changeset 122:fb3cb7d70f66

misidentification of witness should really work now.
author casties
date Tue, 10 Jan 2017 17:58:51 +0100
parents 6f0e9a333c15
children 32ce1f93ad33
files src/main/java/de/mpiwg/itgroup/ismi/entry/beans/CurrentWitnessBean.java src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/Misidentification.java src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/MisidentificationTable.java src/main/resources/own-value.cfg.xml
diffstat 4 files changed, 80 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/ismi/entry/beans/CurrentWitnessBean.java	Mon Jan 09 20:37:29 2017 +0100
+++ b/src/main/java/de/mpiwg/itgroup/ismi/entry/beans/CurrentWitnessBean.java	Tue Jan 10 17:58:51 2017 +0100
@@ -241,7 +241,7 @@
 			
 			// WITNESS -> is_exemplar_of -> TEXT
 			this.entity.replaceSourceRelation(this.titleLo.entity, TEXT, is_exemplar_of);
-			
+			// legacy relations(?)
 			this.entity.removeAllSourceRelationsByName(is_possible_exemplar_of);
 			this.entity.removeAllSourceRelations(rel_has_title_written_as, ALIAS);
 			this.entity.removeAllSourceRelations(rel_has_author_written_as, ALIAS);
--- a/src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/Misidentification.java	Mon Jan 09 20:37:29 2017 +0100
+++ b/src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/Misidentification.java	Tue Jan 10 17:58:51 2017 +0100
@@ -94,8 +94,8 @@
 
 		if (misident.isLightweight()) {
 			misident = ot.getEntityByIdWithContent(misident.getId());
-			obj.setMisident(misident);
 		}
+		obj.setMisident(misident);
 		
 		// load title
 		if (misident.containsAttribute(TITLE)) {
--- a/src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/MisidentificationTable.java	Mon Jan 09 20:37:29 2017 +0100
+++ b/src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/MisidentificationTable.java	Tue Jan 10 17:58:51 2017 +0100
@@ -7,6 +7,7 @@
 
 import org.apache.log4j.Logger;
 import org.mpi.openmind.repository.bo.Entity;
+import org.mpi.openmind.repository.bo.Relation;
 
 import de.mpiwg.itgroup.ismi.auxObjects.ListenerObject;
 import de.mpiwg.itgroup.ismi.entry.beans.AbstractISMIBean;
@@ -17,123 +18,132 @@
 	private static Logger logger = Logger.getLogger(MisidentificationTable.class);
 
 	private List<SelectableObject<Misidentification>> list = new ArrayList<SelectableObject<Misidentification>>();
-	
+
 	private Misidentification misident;
-	
+
 	private ListenerObject lo;
-	//private String attName;
-	//private String oc;
-	
-	public MisidentificationTable(){
+	// private String attName;
+	// private String oc;
+
+	public MisidentificationTable() {
 		lo = new ListenerObject(PERSON, "name_translit");
 	}
-	
-	public void listenerRemove(ActionEvent event){		
+
+	public void listenerRemove(ActionEvent event) {
 		List<SelectableObject<Misidentification>> toDelete = new ArrayList<SelectableObject<Misidentification>>();
-		
-		for(SelectableObject<Misidentification> so : this.list){
-			if(so.isSelected()){
+
+		for (SelectableObject<Misidentification> so : this.list) {
+			if (so.isSelected()) {
 				toDelete.add(so);
 			}
 		}
-		for(SelectableObject<Misidentification> so : toDelete){
+		for (SelectableObject<Misidentification> so : toDelete) {
 			this.list.remove(so);
 		}
 	}
-	
-	public void listenerEditRef(ActionEvent event){
-		SelectableObject<Misidentification> so = 
-			(SelectableObject<Misidentification>)getRequestBean("item");
-		if(so != null){
+
+	public void listenerEditRef(ActionEvent event) {
+		SelectableObject<Misidentification> so = (SelectableObject<Misidentification>) getRequestBean("item");
+		if (so != null) {
 			this.misident = so.getObj();
 		}
 	}
-	
-	public void listenerSaveRef(ActionEvent event){
+
+	public void listenerSaveRef(ActionEvent event) {
 		this.misident = null;
 	}
-	
-	public void listenerCancel(ActionEvent event){
-		//@TODO
+
+	public void listenerCancel(ActionEvent event) {
+		// @TODO
 	}
-	
+
 	public void listenerCreate(ActionEvent event) {
 		Entity ent = this.lo.entity;
-		if(ent != null & ent.isPersistent()){
+		if (ent != null & ent.isPersistent()) {
 			// FIXME: where to get title?
-			
-			this.create(null, null, ent);	
+
+			this.create(null, null, ent);
 		}
 	}
-	
-	public void load(Entity misattEntity){
-		if(!containsEntity(misattEntity)){
-			//TODO sort
-			//Collections.sort(this.misattList);
+
+	public void load(Entity misattEntity) {
+		if (!containsEntity(misattEntity)) {
+			// TODO sort
+			// Collections.sort(this.misattList);
 			try {
-				this.list.add(new SelectableObject<Misidentification>(Misidentification.load(misattEntity, getWrapper(), getUserName())));
+				this.list.add(new SelectableObject<Misidentification>(
+						Misidentification.load(misattEntity, getWrapper(), getUserName())));
 			} catch (Exception e) {
 				addErrorMsg(e.getMessage());
 				logger.error(e);
 			}
-		}else{
+		} else {
 			addGeneralMsg("This entity has been already inserted!");
 		}
 	}
-	
-	public void create(String title, String title_translit, Entity person){
+
+	public void create(String title, String title_translit, Entity person) {
 		try {
-			this.list.add(new SelectableObject<Misidentification>(Misidentification.create(title, title_translit, person, getWrapper(), getUserName())));
+			this.list.add(new SelectableObject<Misidentification>(
+					Misidentification.create(title, title_translit, person, getWrapper(), getUserName())));
 		} catch (Exception e) {
 			addErrorMsg(e.getMessage());
 			logger.error(e);
 		}
 	}
-	
-	private boolean containsEntity(Entity ent){
-		for(SelectableObject<Misidentification> so : this.list){
-			if(so.getObj().getPerson() != null && so.getObj().getPerson().getId().equals(ent.getId())){
+
+	private boolean containsEntity(Entity ent) {
+		for (SelectableObject<Misidentification> so : this.list) {
+			if (so.getObj().getPerson() != null && so.getObj().getPerson().getId().equals(ent.getId())) {
 				return true;
 			}
 		}
 		return false;
 	}
-	
-	/*
-	public void listenerChanged(ValueChangeEvent event) {
-		this.lo = changeListener(event, lo, this.oc, this.attName);
-		if(lo.entity != null && lo.entity.isPersistent()){
-			lo.statusImage.setStatus(StatusImage.STATUS_OK);
-		}else{
-			lo.statusImage.setStatus(StatusImage.STATUS_UNSET);
-		}
-	}
-	*/
 
-	
 	/**
-	 * Save all misidentifications.
+	 * Save all misidentifications. Deletes removed misidentifications.
 	 * 
-	 * @param text
+	 * @param witness
 	 * @return
 	 * @throws Exception
 	 */
-	public Entity saveMisidentifications(Entity text) throws Exception{
-		for(Misidentification misatt : this.getMisidentList()){
-			text = misatt.saveAndGetMisidentification(text);
+	public Entity saveMisidentifications(Entity witness) throws Exception {
+		// remember old misidentifications
+		List<Relation> oldRels = witness.getSourceRelations(Misidentification.HAS_MISIDENT, Misidentification.MISIDENT);
+		// delete old relations
+		witness.removeAllSourceRelationsByName(Misidentification.HAS_MISIDENT);
+		// create new misidentifications
+		for (Misidentification misident : this.getMisidentList()) {
+			witness = misident.saveAndGetMisidentification(witness);
 		}
-		return text;
+		// check for orphaned old misidentifications
+		for (Relation rel : oldRels) {
+			boolean match = false;
+			for (Misidentification mi : this.getMisidentList()) {
+				Entity miEnt = mi.getMisident();
+				if (miEnt != null && rel.getTargetId() == miEnt.getId()) {
+					match = true;
+					break;
+				}
+			}
+			if (!match) {
+				Entity ent = getWrapper().getEntityById(rel.getTargetId());
+				logger.warn("Orphaned MISIDENTIFICATION will be deleted: "+ent);
+				getWrapper().removeCurrentVersionEntity(ent, getUserName());
+			}
+		}
+		return witness;
 	}
-	
-	
+
 	private List<Misidentification> getMisidentList() {
 		List<Misidentification> list = new ArrayList<Misidentification>();
-		for(SelectableObject<Misidentification> so : this.list){
+		for (SelectableObject<Misidentification> so : this.list) {
 			list.add(so.getObj());
 		}
 		return list;
 	}
-	
+
 	public List<SelectableObject<Misidentification>> getList() {
 		return list;
 	}
--- a/src/main/resources/own-value.cfg.xml	Mon Jan 09 20:37:29 2017 +0100
+++ b/src/main/resources/own-value.cfg.xml	Tue Jan 10 17:58:51 2017 +0100
@@ -59,19 +59,14 @@
         </own-value-rule>
 
 
-       <own-value-rule id="misident_01">
+       <own-value-rule id="misident-witness">
             <target-relation name="has_misidentification" substring="false">
-                <source object-class="WITNESS">
-                    <source-relation name="is_exemplar_of" substring="false">
-                        <target object-class="TEXT">
-                            <attribute name="full_title_translit" end-node="true"/>
-                        </target>
-                    </source-relation>
+                <source object-class="WITNESS" end-node="true">
                 </source>
             </target-relation>
         </own-value-rule>                                
 
-        <own-value-rule id="misident_02">
+        <own-value-rule id="misident-person">
             <source-relation name="misattributed_to" substring="false">
                 <target object-class="PERSON">
                     <attribute name="name_translit" end-node="true"/>
@@ -348,9 +343,9 @@
         </print-rule>    
             
         <print-rule for="MISIDENTIFICATION">
-			<formatstr value="%misident_01% to %misident_02%"/>
-            <entry own-value-rule="misident_01"/>
-            <entry own-value-rule="misident_02"/>
+			<formatstr value="%misident-witness% to %misident-person%"/>
+            <entry own-value-rule="misident-witness"/>
+            <entry own-value-rule="misident-person"/>
         </print-rule>    
             
         <print-rule for="REFERENCE">