Mercurial > hg > ismi-richfaces
view src/main/java/de/mpiwg/itgroup/ismi/merge/GeneralMerge.java @ 99:d0fb989bf53a
better logging of entity deletion.
author | casties |
---|---|
date | Fri, 28 Oct 2016 19:56:44 +0200 |
parents | d172201d24ad |
children | 28a0c2726466 |
line wrap: on
line source
package de.mpiwg.itgroup.ismi.merge; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; 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; import org.mpi.openmind.repository.bo.Relation; import de.mpiwg.itgroup.ismi.entry.beans.AbstractISMIBean; public class GeneralMerge extends AbstractISMIBean implements Serializable{ private static Logger logger = Logger.getLogger(GeneralMerge.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<String, String> firstAttMap = new HashMap<String, String>(); private Map<String, String> secondAttMap = new HashMap<String, String>(); private Entity firstEntity; private Entity secondEntity; private String firstId; private String secondId; private Entity entResult; private List<Attribute> resultAtts; private List<Relation> resultSrcRels; private List<Relation> resultTarRels; private List<String> attLabels; private Map<String, String> selectedAtts; Map<Long, String> selectedFirstSrcRelations; Map<Long, String> selectedSecondSrcRelations; Map<Long, String> selectedFirstTarRelations; Map<Long, String> selectedSecondTarRelations; public GeneralMerge(){} public void loadFirstEntity(ActionEvent event){ reset(); try{ Long id = new Long(this.firstId); this.firstEntity = getWrapper().getEntityById(id); if(this.firstEntity == null){ addErrorMsg("Entity no found."); } else{ if(this.secondEntity != null){ if(this.firstEntity.getObjectClass().equals(this.secondEntity.getObjectClass())){ this.deployDifferences(); }else{ addErrorMsg("The class of the first entity is: " + firstEntity.getObjectClass() + " and class of the second one is: " + secondEntity.getObjectClass() +". They must be equal!"); } } } }catch(Exception e){ addErrorMsg("The first entity could no be loaded."); } } public void loadSecondEntity(ActionEvent event){ reset(); try{ Long id = new Long(this.secondId); this.secondEntity = getWrapper().getEntityById(id); if(this.secondEntity == null){ addErrorMsg("Entity no found."); } else{ if(this.firstEntity != null){ if(this.firstEntity.getObjectClass().equals(this.secondEntity.getObjectClass())){ this.deployDifferences(); }else{ addErrorMsg("The class of the first entity is: " + firstEntity.getObjectClass() + " and class of the second one is: " + secondEntity.getObjectClass() +". They must be equal"); } } } }catch(Exception e){ addErrorMsg( "The second entity could no be loaded."); } } @Override public void reset(){ this.attLabels = new ArrayList<String>(); this.selectedAtts = new HashMap<String, String>(); this.selectedFirstSrcRelations = new HashMap<Long, String>(); this.selectedSecondSrcRelations = new HashMap<Long, String>(); this.selectedFirstTarRelations = new HashMap<Long, String>(); this.selectedSecondTarRelations = new HashMap<Long, String>(); this.entResult = null; this.entitiesLoaded = false; this.showAttributeMapping = false; this.showSrcRelationMapping = false; this.showTarRelationMapping = false; } public void listenerExecuteMerge(){ this.executeMerge(); getAppBean().getSimpleSearchCache().setMapDirty(true); } private void deployDifferences(){ this.showAttributeMapping = true; this.showSrcRelationMapping = true; this.showTarRelationMapping = true; this.entitiesLoaded = true; if(this.firstEntity != null && this.secondEntity != null){ if(firstEntity.isLightweight()){ this.firstEntity = getWrapper().getEntityContent(this.firstEntity); } if(secondEntity.isLightweight()){ this.secondEntity = getWrapper().getEntityContent(this.secondEntity); } this.firstEntity = (Entity)firstEntity.clone(); this.secondEntity = (Entity) secondEntity.clone(); //attributes this.attLabels = new ArrayList<String>(); this.selectedAtts = new HashMap<String, String>(); this.firstAttMap = new HashMap<String, String>(); this.secondAttMap = new HashMap<String, String>(); 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<Long, String>(); this.selectedSecondSrcRelations = new HashMap<Long, String>(); 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<Long, String>(); this.selectedSecondTarRelations = new HashMap<Long, String>(); 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(){ logger.info("Starting merge execution " + firstEntity.getObjectClass() + " ["+ getUserName() +"]" + "[firstEntity=" + firstEntity.getId() + ", secondEntity=" + secondEntity.getId() + "]"); try { this.generateResultEntity(); if(this.entResult != null){ this.printMergeInfo(entResult); String user = getSessionUser().getEmail() + "_merge"; // save new entity this.getWrapper().saveEntity(this.entResult, user); // remove old entities this.getWrapper().removeCurrentVersionEntity(this.firstEntity, user); this.getWrapper().removeCurrentVersionEntity(this.secondEntity, user); //the old relations should be removed, before... this.updateRelatedOW(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(); } } 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<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; } public void setEntResult(Entity entResult) { this.entResult = entResult; } public List<Attribute> getResultAtts() { return resultAtts; } public void setResultAtts(List<Attribute> resultAtts) { this.resultAtts = resultAtts; } public List<Relation> getResultSrcRels() { return resultSrcRels; } public void setResultSrcRels(List<Relation> resultSrcRels) { this.resultSrcRels = resultSrcRels; } public List<Relation> getResultTarRels() { return resultTarRels; } public void setResultTarRels(List<Relation> resultTarRels) { this.resultTarRels = resultTarRels; } public Entity getFirstEntity() { return firstEntity; } public void setFirstEntity(Entity firstEntity) { this.firstEntity = firstEntity; } public Entity getSecondEntity() { return secondEntity; } public void setSecondEntity(Entity secondEntity) { this.secondEntity = secondEntity; } public String getFirstId() { return firstId; } public void setFirstId(String firstId) { this.firstId = firstId; } public String getSecondId() { return secondId; } public void setSecondId(String secondId) { this.secondId = secondId; } public List<String> getAttLabels() { return attLabels; } public void setAttLabels(List<String> attLabels) { this.attLabels = attLabels; } public Map<String, String> getFirstAttMap() { return firstAttMap; } public void setFirstAttMap(Map<String, String> firstAttMap) { this.firstAttMap = firstAttMap; } public Map<String, String> getSecondAttMap() { return secondAttMap; } public void setSecondAttMap(Map<String, String> secondAttMap) { this.secondAttMap = secondAttMap; } public Map<String, String> getSelectedAtts() { return selectedAtts; } public void setSelectedAtts(Map<String, String> selectedAtts) { this.selectedAtts = selectedAtts; } public boolean isShowAttributeMapping() { return showAttributeMapping; } public void setShowAttributeMapping(boolean showAttributeMapping) { this.showAttributeMapping = showAttributeMapping; } public boolean isEntitiesLoaded() { return entitiesLoaded; } public void setEntitiesLoaded(boolean entitiesLoaded) { this.entitiesLoaded = entitiesLoaded; } public Map<Long, String> getSelectedFirstSrcRelations() { return selectedFirstSrcRelations; } public void setSelectedFirstSrcRelations( Map<Long, String> selectedFirstSrcRelations) { this.selectedFirstSrcRelations = selectedFirstSrcRelations; } public Map<Long, String> getSelectedSecondSrcRelations() { return selectedSecondSrcRelations; } public void setSelectedSecondSrcRelations( Map<Long, String> 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<Long, String> getSelectedFirstTarRelations() { return selectedFirstTarRelations; } public void setSelectedFirstTarRelations( Map<Long, String> selectedFirstTarRelations) { this.selectedFirstTarRelations = selectedFirstTarRelations; } public Map<Long, String> getSelectedSecondTarRelations() { return selectedSecondTarRelations; } public void setSelectedSecondTarRelations( Map<Long, String> 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; } */ }