# HG changeset patch # User casties # Date 1475769719 -7200 # Node ID 545e47659e1f99d73134dfca8b96493e7fabd5ed # Parent 017f8ff46e500f7f13b2d13ab25bb0ff8adda837 Merging references works now. diff -r 017f8ff46e50 -r 545e47659e1f src/main/java/de/mpiwg/itgroup/ismi/merge/ReferenceMerge.java --- a/src/main/java/de/mpiwg/itgroup/ismi/merge/ReferenceMerge.java Wed Oct 05 15:36:46 2016 +0200 +++ b/src/main/java/de/mpiwg/itgroup/ismi/merge/ReferenceMerge.java Thu Oct 06 18:01:59 2016 +0200 @@ -7,9 +7,7 @@ import java.util.Map; import javax.faces.event.ActionEvent; -import javax.faces.model.SelectItem; -import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.mpi.openmind.repository.bo.Attribute; import org.mpi.openmind.repository.bo.Entity; @@ -23,46 +21,31 @@ private static Logger logger = Logger.getLogger(ReferenceMerge.class); private static final long serialVersionUID = 1L; - public static String FIRST_VALUE = "first value"; - public static String SECOND_VALUE = "second value"; - public static String IGNORE = "ignore"; - public static String TAKE = "take"; - - private boolean showAttributeMapping = false; - private boolean showSrcRelationMapping = false; - private boolean showTarRelationMapping = false; private boolean entitiesLoaded = false; - private Map firstAttMap = new HashMap(); - private Map secondAttMap = new HashMap(); - private Entity firstEntity; private String firstBibId; + private String firstEndnoteContent; + private Entity secondEntity; private String secondBibId; private Map firstEntityMap; private Map secondEntityMap; + private List> previewResults; + private String firstId; private String secondId; - private Entity entResult; - private List resultAtts; - private List resultSrcRels; - private List resultTarRels; - - private List attLabels; - private Map selectedAtts; - - Map selectedFirstSrcRelations; - Map selectedSecondSrcRelations; - Map selectedFirstTarRelations; - Map selectedSecondTarRelations; - - public ReferenceMerge(){} - + /** + * Load the first reference by its endnote-id. + * + * Start the merge preview if the second reference has already been loaded. + * + * @param event + */ public void loadFirstEntity(ActionEvent event){ reset(); try{ @@ -82,7 +65,7 @@ if(this.secondEntityMap != null && ! this.secondEntityMap.isEmpty()){ // continue merge - this.deployDifferences(); + this.previewDifferences(); } } } catch(Exception e) { @@ -90,6 +73,13 @@ } } + /** + * Load the second reference by its endnote-id. + * + * Start the merge preview if the first reference has already been loaded. + * + * @param event + */ public void loadSecondEntity(ActionEvent event){ reset(); try{ @@ -109,7 +99,7 @@ if(this.firstEntityMap != null && ! this.firstEntityMap.isEmpty()){ // continue merge - this.deployDifferences(); + this.previewDifferences(); } } }catch(Exception e){ @@ -118,19 +108,9 @@ } @Override - public void reset(){ - this.attLabels = new ArrayList(); - this.selectedAtts = new HashMap(); - this.selectedFirstSrcRelations = new HashMap(); - this.selectedSecondSrcRelations = new HashMap(); - this.selectedFirstTarRelations = new HashMap(); - this.selectedSecondTarRelations = new HashMap(); - this.entResult = null; - + public void reset(){ this.entitiesLoaded = false; - this.showAttributeMapping = false; - this.showSrcRelationMapping = false; - this.showTarRelationMapping = false; + this.previewResults = null; } public void listenerExecuteMerge(){ @@ -138,312 +118,108 @@ getAppBean().getSimpleSearchCache().setMapDirty(true); } - private void deployDifferences(){ - this.showAttributeMapping = true; - this.showSrcRelationMapping = true; - this.showTarRelationMapping = true; + /** + * Creates preview result list of the changes in the references. + */ + private void previewDifferences() { this.entitiesLoaded = true; + if(this.firstEntity != null && this.secondEntity != null){ - this.attLabels = new ArrayList(); + this.previewResults = new ArrayList>(); + + if (firstEntity.isLightweight()) { + firstEntity = getWrapper().getEntityContent(firstEntity); + } + Attribute ecAtt = firstEntity.getAttributeByName("endnote-content"); + firstEndnoteContent = (ecAtt != null) ? ecAtt.getValue() : ""; for (Entity ent : this.secondEntityMap.keySet()) { + HashMap preview = new HashMap(); + + // insert content from first entity + preview.put("new-bib-id", firstBibId); + preview.put("new-endnote-content", firstEndnoteContent); + + // fetch content for second entity if (ent.isLightweight()) { ent = getWrapper().getEntityContent(ent); } String id = ent.getId().toString(); - attLabels.add(id); - firstAttMap.put(id, firstEntity.getAttributeByName("endnote-id").getValue()); - secondAttMap.put(id, ent.getAttributeByName("endnote-id").getValue()); + preview.put("id", id); + Attribute bibidAtt = ent.getAttributeByName("endnote-id"); + preview.put("old-bib-id", bibidAtt.getValue()); + Attribute aiAtt = ent.getAttributeByName("additional_information"); + if (aiAtt != null) { + preview.put("additional-information", aiAtt.getValue()); + } + + // get relations + String relatedEnts = ""; + for (Relation rel : ent.getSourceRelations()) { + relatedEnts += rel.getObjectClass() + " "; + Entity relEnt = getWrapper().getEntityById(rel.getTargetId()); + relatedEnts += "[" + relEnt.getObjectClass() + "] "; + relatedEnts += relEnt.getOwnValue() + " "; + relatedEnts += "[" + relEnt.getId() + "] "; + } + preview.put("related-entities", relatedEnts); + + previewResults.add(preview); } - /* - if(secondEntity.isLightweight()){ - this.secondEntity = getWrapper().getEntityContent(this.secondEntity); - } - - this.firstEntity = (Entity)firstEntity.clone(); - this.secondEntity = (Entity) secondEntity.clone(); - - //attributes - this.attLabels = new ArrayList(); - this.selectedAtts = new HashMap(); - this.firstAttMap = new HashMap(); - this.secondAttMap = new HashMap(); - - for(Attribute att : this.firstEntity.getAttributes()){ - firstAttMap.put(att.getName(), att.getValue()); - if(!attLabels.contains(att.getName())){ - attLabels.add(att.getName()); - selectedAtts.put(att.getName(), FIRST_VALUE); - } - } - - for(Attribute att : this.secondEntity.getAttributes()){ - secondAttMap.put(att.getName(), att.getValue()); - if(!attLabels.contains(att.getName())){ - attLabels.add(att.getName()); - selectedAtts.put(att.getName(), FIRST_VALUE); - } - } - - //source relations - this.selectedFirstSrcRelations = new HashMap(); - this.selectedSecondSrcRelations = new HashMap(); - - for(Relation rel : this.firstEntity.getSourceRelations()){ - rel.setTarget(getWrapper().getEntityById(rel.getTargetId())); - selectedFirstSrcRelations.put(rel.getId(), TAKE); - } - - - for(Relation rel : this.secondEntity.getSourceRelations()){ - rel.setTarget(getWrapper().getEntityById(rel.getTargetId())); - selectedSecondSrcRelations.put(rel.getId(), TAKE); - } - - //target relations - this.selectedFirstTarRelations = new HashMap(); - this.selectedSecondTarRelations = new HashMap(); - - for(Relation rel : this.firstEntity.getTargetRelations()){ - rel.setSource(getWrapper().getEntityById(rel.getSourceId())); - selectedFirstTarRelations.put(rel.getId(), TAKE); - } - - for(Relation rel : this.secondEntity.getTargetRelations()){ - rel.setSource(getWrapper().getEntityById(rel.getSourceId())); - selectedSecondTarRelations.put(rel.getId(), TAKE); - } - - */ } } - public void preview(ActionEvent event){ - this.generateResultEntity(); - } - - private void executeMerge(){ + /** + * Execute the changes in the references. + * + * Replaces the endnote-id and endnote-content attributes of the secondEntityMap + * with the values of the firstEntity. + */ + private void executeMerge() { - logger.info("Starting merge execution " + firstEntity.getObjectClass() + logger.info("Starting reference merge execution " + firstEntity.getObjectClass() + " ["+ getUserName() +"]" + "[firstEntity=" + firstEntity.getId() + ", secondEntity=" + secondEntity.getId() + "]"); - try { - this.generateResultEntity(); - if(this.entResult != null){ - - this.printMergeInfo(entResult); - - 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... - this.generateSecundaryOW(this.entResult, getSessionUser().getEmail() + "_merge"); - - this.printMergeInfo(entResult); - - logger.info("Merge execution '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 new entity has the id " + this.entResult.getId()); - this.reset(); - } + + for (Entity ent : secondEntityMap.keySet()) { + // fetch content (should not be necessary) + if (ent.isLightweight()) { + ent = getWrapper().getEntityContent(ent); + } + + // replace endnote-id + Attribute bibidAtt = ent.getAttributeByName("endnote-id"); + if (firstBibId != null) { + bibidAtt.setOwnValue(firstBibId); + } else { + throw new NullPointerException("Missing endnote-id to replace!"); + } + // replace endnote-content + Attribute ecAtt = ent.getAttributeByName("endnote-content"); + if (firstEndnoteContent != null) { + ecAtt.setOwnValue(firstEndnoteContent); + } else { + ecAtt.setOwnValue(""); + } + + // save entity + this.getWrapper().saveEntity(ent, getSessionUser().getEmail() + "_merge"); + } + + addGeneralMsg(secondEntityMap.size() + " references were changed successfully"); + this.reset(); + } catch (Exception e) { printInternalError(e); logger.error("["+ getUserName() +"] " + e.getMessage(), e); } } - 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"); - sb.append("Attributes:\n"); - for(Attribute att : ent.getAttributes()){ - sb.append("\t" + att.toString() + "\n"); - } - - sb.append("Src Relations:\n"); - for(Relation src : ent.getSourceRelations()){ - sb.append("\t" + src.toString() + "\n"); - } - - sb.append("Tar Relations:\n"); - for(Relation tar : ent.getTargetRelations()){ - sb.append("\t" + tar.toString() + "\n"); - } - - sb.append("-------------------------------------------"); - sb.append("-----------------------------------------\n"); - logger.info(sb.toString()); - } - - public void actionShowTarRelationMapping(ActionEvent event){ - this.showTarRelationMapping = true; - } - - public void actionHideTarRelationMapping(ActionEvent event){ - this.showTarRelationMapping = false; - } - - public void actionShowSrcRelationMapping(ActionEvent event){ - this.showSrcRelationMapping = true; - } - - public void actionHideSrcRelationMapping(ActionEvent event){ - this.showSrcRelationMapping = false; - } - - public void actionShowAttributeMapping(ActionEvent event){ - this.showAttributeMapping = true; - } - - public void actionHideAttributeMapping(ActionEvent event){ - 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 getAttSelectItems() { - List items = new ArrayList(); - items.add(new SelectItem(FIRST_VALUE)); - items.add(new SelectItem(SECOND_VALUE)); - items.add(new SelectItem(IGNORE)); - return items; - } - - public List getRelSelectItems(){ - List items = new ArrayList(); - items.add(new SelectItem(TAKE)); - items.add(new SelectItem(IGNORE)); - return items; - } - - public Entity getEntResult() { - return entResult; - } - - public void setEntResult(Entity entResult) { - this.entResult = entResult; - } - - public List getResultAtts() { - return resultAtts; - } - - public void setResultAtts(List resultAtts) { - this.resultAtts = resultAtts; - } - - public List getResultSrcRels() { - return resultSrcRels; - } - - public void setResultSrcRels(List resultSrcRels) { - this.resultSrcRels = resultSrcRels; - } - - public List getResultTarRels() { - return resultTarRels; - } - - public void setResultTarRels(List resultTarRels) { - this.resultTarRels = resultTarRels; - } public Entity getFirstEntity() { return firstEntity; @@ -477,46 +253,6 @@ this.secondId = secondId; } - public List getAttLabels() { - return attLabels; - } - - public void setAttLabels(List attLabels) { - this.attLabels = attLabels; - } - - public Map getFirstAttMap() { - return firstAttMap; - } - - public void setFirstAttMap(Map firstAttMap) { - this.firstAttMap = firstAttMap; - } - - public Map getSecondAttMap() { - return secondAttMap; - } - - public void setSecondAttMap(Map secondAttMap) { - this.secondAttMap = secondAttMap; - } - - public Map getSelectedAtts() { - return selectedAtts; - } - - public void setSelectedAtts(Map selectedAtts) { - this.selectedAtts = selectedAtts; - } - - public boolean isShowAttributeMapping() { - return showAttributeMapping; - } - - public void setShowAttributeMapping(boolean showAttributeMapping) { - this.showAttributeMapping = showAttributeMapping; - } - public boolean isEntitiesLoaded() { return entitiesLoaded; } @@ -525,90 +261,6 @@ this.entitiesLoaded = entitiesLoaded; } - public Map getSelectedFirstSrcRelations() { - return selectedFirstSrcRelations; - } - - public void setSelectedFirstSrcRelations( - Map selectedFirstSrcRelations) { - this.selectedFirstSrcRelations = selectedFirstSrcRelations; - } - - public Map getSelectedSecondSrcRelations() { - return selectedSecondSrcRelations; - } - - public void setSelectedSecondSrcRelations( - Map selectedSecondSrcRelations) { - this.selectedSecondSrcRelations = selectedSecondSrcRelations; - } - public boolean isShowSrcRelationMapping() { - return showSrcRelationMapping; - } - - public void setShowSrcRelationMapping(boolean showSrcRelationMapping) { - this.showSrcRelationMapping = showSrcRelationMapping; - } - - - public boolean isShowTarRelationMapping() { - return showTarRelationMapping; - } - - public void setShowTarRelationMapping(boolean showTarRelationMapping) { - this.showTarRelationMapping = showTarRelationMapping; - } - - public Map getSelectedFirstTarRelations() { - return selectedFirstTarRelations; - } - - public void setSelectedFirstTarRelations( - Map selectedFirstTarRelations) { - this.selectedFirstTarRelations = selectedFirstTarRelations; - } - - public Map getSelectedSecondTarRelations() { - return selectedSecondTarRelations; - } - - public void setSelectedSecondTarRelations( - Map selectedSecondTarRelations) { - this.selectedSecondTarRelations = selectedSecondTarRelations; - } - /* - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public boolean isShowMsgPopup() { - return showMsgPopup; - } - - public void setShowMsgPopup(boolean showMsgPopup) { - this.showMsgPopup = showMsgPopup; - } - - public String getConfirmMsg() { - return confirmMsg; - } - - public void setConfirmMsg(String confirmMsg) { - this.confirmMsg = confirmMsg; - } - - public boolean isShowConfirmPopup() { - return showConfirmPopup; - } - - public void setShowConfirmPopup(boolean showConfirmPopup) { - this.showConfirmPopup = showConfirmPopup; - } - */ /** * @return the firstBibId @@ -623,4 +275,11 @@ public String getSecondBibId() { return secondBibId; } + + /** + * @return the previewResults + */ + public List> getPreviewResults() { + return previewResults; + } } \ No newline at end of file diff -r 017f8ff46e50 -r 545e47659e1f src/main/webapp/merge/referenceMerge.xhtml --- a/src/main/webapp/merge/referenceMerge.xhtml Wed Oct 05 15:36:46 2016 +0200 +++ b/src/main/webapp/merge/referenceMerge.xhtml Thu Oct 06 18:01:59 2016 +0200 @@ -13,7 +13,7 @@
- +
@@ -27,7 +27,7 @@ - + @@ -81,7 +81,7 @@ - @@ -90,191 +90,58 @@ rendered="#{Session.referenceMerge.entitiesLoaded}"> - - + + - + - + - + + value="#{result['old-bib-id']}" /> - + + value="#{result['new-bib-id']}" /> - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -