changeset 97:13b313ae1af8

new import-merge works now.
author casties
date Fri, 28 Oct 2016 18:21:07 +0200
parents 895bf7494d17
children 9b02c9af49b0
files src/main/java/de/mpiwg/itgroup/ismi/merge/ImportMerge.java src/main/webapp/merge/importMerge.xhtml
diffstat 2 files changed, 211 insertions(+), 134 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/ismi/merge/ImportMerge.java	Thu Oct 27 20:19:57 2016 +0200
+++ b/src/main/java/de/mpiwg/itgroup/ismi/merge/ImportMerge.java	Fri Oct 28 18:21:07 2016 +0200
@@ -75,6 +75,11 @@
     public ImportMerge() {
     }
 
+    /**
+     * Action that loads the import file and parses it into the Nodes list.
+     * 
+     * @param event
+     */
     public void loadImportFile(ActionEvent event) {
         reset();
         try {
@@ -89,9 +94,7 @@
             this.importNodeListLength = importNodeList.size();
             this.importFileMsg = importNodeListLength + " Nodes";
             this.importNodeIdx = 0;
-            loadImportNode(null);
-            //this.reset();
-            //this.firstEntity = (Entity) importNodeList.get(importNodeIdx);
+            loadImportNode();
             
         } catch (Exception e) {
             addErrorMsg("The import file could no be loaded.");
@@ -99,7 +102,12 @@
         }
     }
 
-    public void loadImportNode(ActionEvent event) {
+    /**
+     * Load the current Node from the import list.
+     * 
+     * @param event
+     */
+    public void loadImportNode() {
         reset();
         try {
             importNode = importNodeList.get(importNodeIdx);
@@ -108,6 +116,9 @@
             secondEntity = null;
 
             if (importNode.getNodeType().equals("ATTRIBUTE")) {
+                /*
+                 * Attribute
+                 */
                 Attribute att = (Attribute) importNode;
                 String attName = att.getName();
                 if (attName == null) {
@@ -141,6 +152,9 @@
                     }
                 }
             } else if (importNode.getNodeType().equals("ENTITY")) {
+                /*
+                 * Entity
+                 */
                 Entity ent = (Entity) importNode;
                 Long id = ent.getId();
                 if (id == null) {
@@ -148,7 +162,7 @@
                     this.secondEntity = ent;
                     // what to use to compare?
                     this.firstEntity = new Entity();
-                    deployDifferences();
+                    this.firstEntity.setLightweight(false);
                     
                 } else {
                     // entity exists
@@ -163,13 +177,17 @@
                         // compare with old version 
                         this.firstEntity = systemEnt;
                     } else {
-                        importNodeMsg = "Entity does no longer exist!";
+                        importNodeMsg = "Entity does not exist!";
                         // TODO: try to undelete?
                         this.firstEntity = new Entity();
+                        this.firstEntity.setLightweight(false);
                         this.secondEntity = ent;
                     }
                 }
             } else if (importNode.getNodeType().equals("RELATION")) {
+                /*
+                 * Relation
+                 */
                 Relation rel = (Relation) importNode;
                 String relName = rel.getObjectClass();
                 if (relName == null) {
@@ -202,7 +220,8 @@
                             return;
                         }
                         // create new Entity with this Relation
-                        Entity newEnt = (Entity) sourceEnt.clone();
+                        Entity newEnt = new Entity();
+                        newEnt.setLightweight(false);
                         newEnt.addSourceRelation(rel);
                         this.secondEntity = newEnt;
                         // compare with old version 
@@ -212,6 +231,7 @@
             }
         } catch (Exception e) {
             addErrorMsg("The import Node could no be loaded.");
+            addErrorMsg("Error: "+e);
         }
     }
 
@@ -223,13 +243,14 @@
         if (importNodeIdx < 0) {
             importNodeIdx = 0;
         }
-        loadImportNode(null);
+        loadImportNode();
     }
     
     public void loadFirstEntity(ActionEvent event) {
         reset();
         try {
             if (firstEntity != null && secondEntity != null) {
+                // create list of differences
                 deployDifferences();
             } else {
                 if (importNodeMsg != null) {
@@ -257,11 +278,9 @@
         this.showTarRelationMapping = false;
     }
 
-    public void listenerExecuteMerge() {
-        this.executeMerge();
-        getAppBean().getSimpleSearchCache().setMapDirty(true);
-    }
-
+    /**
+     * Create list of differences in attributes and relations for display.
+     */
     private void deployDifferences() {
         this.showAttributeMapping = true;
         this.showSrcRelationMapping = true;
@@ -280,7 +299,9 @@
             this.secondEntity = (Entity) secondEntity.clone();
             */
             
-            // attributes
+            /*
+             * attributes
+             */
             this.attLabels = new ArrayList<String>();
             this.selectedAtts = new HashMap<String, String>();
             this.firstAttMap = new HashMap<String, String>();
@@ -302,7 +323,9 @@
                 }
             }
 
-            // source relations
+            /*
+             * source relations
+             */
             this.selectedFirstSrcRelations = new HashMap<Long, String>();
             this.selectedSecondSrcRelations = new HashMap<Long, String>();
 
@@ -316,7 +339,9 @@
                 selectedSecondSrcRelations.put(rel.getId(), TAKE);
             }
 
-            // target relations
+            /*
+             * target relations
+             */
             this.selectedFirstTarRelations = new HashMap<Long, String>();
             this.selectedSecondTarRelations = new HashMap<Long, String>();
 
@@ -333,39 +358,51 @@
         }
     }
 
+    /**
+     * Preview merged Entity as text.
+     * 
+     * @param event
+     */
     public void preview(ActionEvent event) {
         this.generateResultEntity();
     }
 
+    /**
+     * Execute Merge action from UI.
+     */
+    public void listenerExecuteMerge() {
+        this.executeMerge();
+        getAppBean().getSimpleSearchCache().setMapDirty(true);
+    }
+
+    /**
+     * Merge Entities.
+     * 
+     * firstEntity is current one. secondEntity is imported.
+     */
     private void executeMerge() {
 
-        logger.info("Starting merge execution " + firstEntity.getObjectClass() + " [" + getUserName() + "]"
+        logger.info("Starting merge import " + firstEntity.getObjectClass() + " [" + getUserName() + "]"
                 + "[firstEntity=" + firstEntity.getId() + ", secondEntity=" + secondEntity.getId() + "]");
 
         try {
             this.generateResultEntity();
             if (this.entResult != null) {
-
+                // print to log
                 this.printMergeInfo(entResult);
-
+                // save the new Entity
                 this.getWrapper().saveEntity(this.entResult, getSessionUser().getEmail() + "_merge");
-
-                this.getWrapper().removeCurrentVersionEntity(this.firstEntity);
-                this.getWrapper().removeCurrentVersionEntity(this.secondEntity);
-
-                // the old relations should be removed, before...
+                // update generated ownvalues
                 this.updateRelatedOW(this.entResult, getSessionUser().getEmail() + "_merge");
 
-                this.printMergeInfo(entResult);
-
-                logger.info("Merge execution 'successful' " + firstEntity.getObjectClass() + " [" + getUserName() + "]"
+                logger.info("Merge import successful " + firstEntity.getObjectClass() + " [" + getUserName() + "]"
                         + "[firstEntity=" + firstEntity.getId() + ", secondEntity=" + secondEntity.getId()
                         + ", generatedEntity=" + entResult.getId() + "]");
 
                 this.firstEntity = null;
                 this.secondEntity = null;
 
-                addGeneralMsg("The entities were merged successfully");
+                addGeneralMsg("The imported entity was merged successfully");
                 addGeneralMsg("The new entity has the id " + this.entResult.getId());
                 this.reset();
             }
@@ -378,7 +415,6 @@
     private void printMergeInfo(Entity ent) {
         StringBuilder sb = new StringBuilder("\n\n");
 
-        sb.append("-------------------------------------------");
         sb.append("-----------------------------------------\n");
         sb.append("Merging result [" + getUserName() + "]\n");
         sb.append(ent.toString() + "\n");
@@ -397,11 +433,128 @@
             sb.append("\t" + tar.toString() + "\n");
         }
 
-        sb.append("-------------------------------------------");
         sb.append("-----------------------------------------\n");
         logger.info(sb.toString());
     }
 
+    /**
+     * Generate new Entity taking selected Attributes and Relations from both Entities.
+     * 
+     * Uses id from firstEntity, creating a new version of this entity.
+     */
+    private void generateResultEntity() {
+        // create new Entity
+        this.entResult = new Entity();
+        this.entResult.setLightweight(false);
+        // use id from firstEntity
+        Long newId = this.firstEntity.getId();
+        if (newId == null) {
+            // Entity is new -- try imported id
+            newId = secondEntity.getId();
+        }
+        this.entResult.setId(newId);
+        // use object_class from firstEntity
+        String oc = this.firstEntity.getObjectClass();
+        if (oc == null) {
+            // Entity is new -- try imported object_class
+           oc = secondEntity.getObjectClass();
+        }
+        this.entResult.setObjectClass(oc);
+        
+        /*
+         * generating attributes
+         */
+        try {
+            for (String attName : this.selectedAtts.keySet()) {
+                String selected = this.selectedAtts.get(attName);
+                String value = "";
+                if (selected.equals(FIRST_VALUE)) {
+                    value = (firstEntity.getAttributeByName(attName) == null) ? ""
+                            : firstEntity.getAttributeByName(attName).getOwnValue();
+                } else if (selected.equals(SECOND_VALUE)) {
+                    value = (secondEntity.getAttributeByName(attName) == null) ? ""
+                            : secondEntity.getAttributeByName(attName).getOwnValue();
+                }
+                this.entResult.addAttribute(new Attribute(attName, "text", value));
+            }
+        } catch (Exception e) {
+            logger.error(e);
+            addErrorMsg("Please inform support of this exception: " + e.getMessage());
+        }
+
+        /*
+         * generating source relations
+         */
+        for (Relation rel : firstEntity.getSourceRelations()) {
+            String selectedValue = this.selectedFirstSrcRelations.get(rel.getId());
+            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
+                if (!this.entResult.containsSourceRelation(rel.getOwnValue(), rel.getTargetId())) {
+                    this.entResult.addSourceRelation(generateSrcRelation(rel));
+                }
+            }
+        }
+
+        for (Relation rel : secondEntity.getSourceRelations()) {
+            String selectedValue = this.selectedSecondSrcRelations.get(rel.getId());
+            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
+                if (!this.entResult.containsSourceRelation(rel.getOwnValue(), rel.getTargetId())) {
+                    this.entResult.addSourceRelation(generateSrcRelation(rel));
+                }
+            }
+        }
+
+        /*
+         * generating target relations
+         */
+        for (Relation rel : firstEntity.getTargetRelations()) {
+            String selectedValue = this.selectedFirstTarRelations.get(rel.getId());
+            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
+                // ensuring that there is no two equals relations.
+                if (!this.entResult.containsTargetRelation(rel.getOwnValue(), rel.getSourceId())) {
+                    this.entResult.addTargetRelation(generateTarRelation(rel));
+                }
+            }
+        }
+
+        for (Relation rel : secondEntity.getTargetRelations()) {
+            String selectedValue = this.selectedSecondTarRelations.get(rel.getId());
+            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
+                if (!this.entResult.containsTargetRelation(rel.getOwnValue(), rel.getSourceId())) {
+                    this.entResult.addTargetRelation(generateTarRelation(rel));
+                }
+            }
+        }
+    }
+
+    private Relation generateSrcRelation(Relation rel) {
+        Relation newRel = new Relation();
+        newRel.setOwnValue(rel.getOwnValue());
+        newRel.setTarget(getWrapper().getEntityById(rel.getTargetId()));
+        return newRel;
+    }
+
+    private Relation generateTarRelation(Relation rel) {
+        Relation newRel = new Relation();
+        newRel.setOwnValue(rel.getOwnValue());
+        newRel.setSource(getWrapper().getEntityById(rel.getSourceId()));
+        return newRel;
+    }
+
+    public List<SelectItem> getAttSelectItems() {
+        List<SelectItem> items = new ArrayList<SelectItem>();
+        items.add(new SelectItem(FIRST_VALUE));
+        items.add(new SelectItem(SECOND_VALUE));
+        items.add(new SelectItem(IGNORE));
+        return items;
+    }
+
+    public List<SelectItem> getRelSelectItems() {
+        List<SelectItem> items = new ArrayList<SelectItem>();
+        items.add(new SelectItem(TAKE));
+        items.add(new SelectItem(IGNORE));
+        return items;
+    }
+
     public void actionShowTarRelationMapping(ActionEvent event) {
         this.showTarRelationMapping = true;
     }
@@ -426,101 +579,6 @@
         this.showAttributeMapping = false;
     }
 
-    private void generateResultEntity() {
-        this.entResult = new Entity();
-        this.entResult.setLightweight(false);
-        this.entResult.setObjectClass(this.firstEntity.getObjectClass());
-
-        // generating attributes
-        try {
-            for (String attName : this.selectedAtts.keySet()) {
-                String selected = this.selectedAtts.get(attName);
-                String value = "";
-                if (selected.equals(FIRST_VALUE)) {
-                    value = (firstEntity.getAttributeByName(attName) == null) ? ""
-                            : firstEntity.getAttributeByName(attName).getOwnValue();
-                } else if (selected.equals(SECOND_VALUE)) {
-                    value = (secondEntity.getAttributeByName(attName) == null) ? ""
-                            : secondEntity.getAttributeByName(attName).getOwnValue();
-                }
-                this.entResult.addAttribute(new Attribute(attName, "text", value));
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            addErrorMsg("Please inform support of this exception: " + e.getMessage());
-        }
-
-        // generating source relations
-        for (Relation rel : firstEntity.getSourceRelations()) {
-            String selectedValue = this.selectedFirstSrcRelations.get(rel.getId());
-            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
-                if (!this.entResult.containsSourceRelation(rel.getOwnValue(), rel.getTargetId())) {
-                    this.entResult.addSourceRelation(generateSrcRelation(rel));
-                }
-            }
-        }
-
-        for (Relation rel : secondEntity.getSourceRelations()) {
-            String selectedValue = this.selectedSecondSrcRelations.get(rel.getId());
-            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
-                if (!this.entResult.containsSourceRelation(rel.getOwnValue(), rel.getTargetId())) {
-                    this.entResult.addSourceRelation(generateSrcRelation(rel));
-                }
-            }
-        }
-
-        // generating target relations
-        for (Relation rel : firstEntity.getTargetRelations()) {
-            String selectedValue = this.selectedFirstTarRelations.get(rel.getId());
-            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
-                // ensuring that there is no two equals relations.
-                if (!this.entResult.containsTargetRelation(rel.getOwnValue(), rel.getSourceId())) {
-                    this.entResult.addTargetRelation(generateTarRelation(rel));
-                }
-            }
-        }
-
-        for (Relation rel : secondEntity.getTargetRelations()) {
-            String selectedValue = this.selectedSecondTarRelations.get(rel.getId());
-            if (StringUtils.isNotEmpty(selectedValue) && selectedValue.equals(TAKE)) {
-                if (!this.entResult.containsTargetRelation(rel.getOwnValue(), rel.getSourceId())) {
-                    this.entResult.addTargetRelation(generateTarRelation(rel));
-                }
-            }
-        }
-    }
-
-    private Relation generateSrcRelation(Relation rel) {
-
-        Relation newRel = new Relation();
-        newRel.setOwnValue(rel.getOwnValue());
-        newRel.setTarget(getWrapper().getEntityById(rel.getTargetId()));
-
-        return newRel;
-    }
-
-    private Relation generateTarRelation(Relation rel) {
-        Relation newRel = new Relation();
-        newRel.setOwnValue(rel.getOwnValue());
-        newRel.setSource(getWrapper().getEntityById(rel.getSourceId()));
-        return newRel;
-    }
-
-    public List<SelectItem> getAttSelectItems() {
-        List<SelectItem> items = new ArrayList<SelectItem>();
-        items.add(new SelectItem(FIRST_VALUE));
-        items.add(new SelectItem(SECOND_VALUE));
-        items.add(new SelectItem(IGNORE));
-        return items;
-    }
-
-    public List<SelectItem> getRelSelectItems() {
-        List<SelectItem> items = new ArrayList<SelectItem>();
-        items.add(new SelectItem(TAKE));
-        items.add(new SelectItem(IGNORE));
-        return items;
-    }
-
     public Entity getEntResult() {
         return entResult;
     }
@@ -724,13 +782,13 @@
             String nt = importNode.getNodeType();
             if (nt.equals("ATTRIBUTE")) {
                 Attribute att = (Attribute) importNode;
-                s = "ATTRIBUTE " + att.getName() + " [on " + att.getSourceObjectClass() + " " + att.getSourceId() + "] = " + att.getOwnValue();
+                s = "ATTRIBUTE " + att.getName() + " [" + att.getSourceObjectClass() + " " + att.getSourceId() + "] = " + att.getOwnValue();
             } else if (nt.equals("ENTITY")) {
                 Entity ent = (Entity) importNode;
-                s = "ENTITY " + ent.getObjectClass() + " [" + ent.getId() + "] = " + ent.getOwnValue();
+                s = "ENTITY " + ent.getObjectClass() + " [" + ent.getId() + "] : " + ent.getOwnValue();
             } else if (nt.equals("RELATION")) {
                 Relation rel = (Relation) importNode;
-                s = "RELATION " + rel.getObjectClass() + " [" + rel.getId() + "] "
+                s = "RELATION " + rel.getObjectClass() + " [" + rel.getId() + "] : "
                     + "source=[" + rel.getSourceObjectClass() + " " + rel.getSourceId() + "] "
                     + "target=[" + rel.getTargetObjectClass() + " " + rel.getTargetId() + "]";
             } else {
--- a/src/main/webapp/merge/importMerge.xhtml	Thu Oct 27 20:19:57 2016 +0200
+++ b/src/main/webapp/merge/importMerge.xhtml	Fri Oct 28 18:21:07 2016 +0200
@@ -17,7 +17,7 @@
 			</div>
 			
 			<h:panelGrid rendered="#{Session.user != null}"
-				styleClass="mainPanel" columns="1">
+				styleClass="mainPanel" id="mainPanel" columns="1">
 			
 				
 
@@ -31,7 +31,7 @@
                     
                         <a4j:commandButton value="Load"
                             actionListener="#{Session.importMerge.loadImportFile}"
-                            render="loadListPanel,loadingPanel" />
+                            render="mainPanel,loadListPanel,loadingPanel,mergingPanel" />
                             
                         <h:outputText
                                 value="#{Session.importMerge.importFileMsg}"
@@ -42,7 +42,7 @@
 
 				<h:panelGrid columns="2" styleClass="createPanel"
 					columnClasses="createPanelFirstColumn" id="loadingPanel" 
-					rendered="#{Session.importMerge.importNodeListLength > 0}">
+					rendered="#{Session.importMerge.getImportNodeListLength() > 0}">
 
 					<h:outputText value="Import Nodes" />
 
@@ -78,10 +78,23 @@
 						rendered="#{Session.importMerge.entitiesLoaded}"
 						styleClass="titlePanel"/>
 
-					<h:panelGrid columns="2" styleClass="createPanel"
+					<h:panelGrid columns="3" styleClass="createPanel"
 						columnClasses="createPanelFirstColumn,createPanelColumn02,createPanelColumn02"
 						rendered="#{Session.importMerge.entitiesLoaded}">
 
+                        <h:outputText value="ID" />
+                        <h:outputText value="#{Session.importMerge.firstEntity.getId()}" />
+                        <h:outputText value="#{Session.importMerge.secondEntity.getId()}" />
+
+                        <h:outputText value="Class" />
+                        <h:outputText value="#{Session.importMerge.firstEntity.getObjectClass()}" />
+                        <h:outputText value="#{Session.importMerge.secondEntity.getObjectClass()}" />
+                        
+                    </h:panelGrid>
+
+                    <h:panelGrid columns="2" styleClass="createPanel"
+                        columnClasses="createPanelFirstColumn,createPanelColumn02,createPanelColumn02"
+                        rendered="#{Session.importMerge.entitiesLoaded}">
 
 						<h:outputText value="Attributes" />
 						<rich:dataTable var="attName"
@@ -284,12 +297,18 @@
 
 
 					<h:outputText value="Entity Preview"
-						rendered="#{!empty Session.importMerge.entResult}"
+						rendered="#{Session.importMerge.entResult != null}"
 						styleClass="titlePanel"/>
+						
 					<h:panelGrid columns="2" styleClass="createPanel"
 						columnClasses="createPanelFirstColumn"
-						rendered="#{!empty Session.importMerge.entResult}">
+						rendered="#{Session.importMerge.entResult != null}">
 
+                        <h:outputText value="ID"/>
+                        <h:outputText value="#{Session.importMerge.entResult.getId()}" styleClass="textBack"/>
+
+                        <h:outputText value="Class"/>
+                        <h:outputText value="#{Session.importMerge.entResult.getObjectClass()}" styleClass="textBack"/>
 
 						<h:outputText value="Attributes" />
 						<rich:dataTable