Mercurial > hg > ismi-richfaces
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