view src/main/java/de/mpiwg/itgroup/ismi/util/guiComponents/MisidentificationTable.java @ 136:502ae5b1a07d

fixing bugs from re-use efforts. misc cleanups.
author casties
date Thu, 02 Mar 2017 19:48:58 +0100
parents fb3cb7d70f66
children
line wrap: on
line source

package de.mpiwg.itgroup.ismi.util.guiComponents;

import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;

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;
import de.mpiwg.itgroup.ismi.utils.SelectableObject;

public class MisidentificationTable extends AbstractISMIBean {
	private static final long serialVersionUID = -2756216426560705498L;
	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() {
		lo = new ListenerObject(PERSON, "name_translit");
	}

	public void listenerRemove(ActionEvent event) {
		List<SelectableObject<Misidentification>> toDelete = new ArrayList<SelectableObject<Misidentification>>();

		for (SelectableObject<Misidentification> so : this.list) {
			if (so.isSelected()) {
				toDelete.add(so);
			}
		}
		for (SelectableObject<Misidentification> so : toDelete) {
			this.list.remove(so);
		}
	}

	public void listenerEditRef(ActionEvent event) {
		SelectableObject<Misidentification> so = (SelectableObject<Misidentification>) getRequestBean("item");
		if (so != null) {
			this.misident = so.getObj();
		}
	}

	public void listenerSaveRef(ActionEvent event) {
		this.misident = null;
	}

	public void listenerCancel(ActionEvent event) {
		// @TODO
	}

	public void listenerCreate(ActionEvent event) {
		Entity ent = this.lo.entity;
		if (ent != null & ent.isPersistent()) {
			// FIXME: where to get title?

			this.create(null, null, ent);
		}
	}

	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())));
			} catch (Exception e) {
				addErrorMsg(e.getMessage());
				logger.error(e);
			}
		} else {
			addGeneralMsg("This entity has been already inserted!");
		}
	}

	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())));
		} 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())) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Save all misidentifications. Deletes removed misidentifications.
	 * 
	 * @param witness
	 * @return
	 * @throws Exception
	 */
	public Entity saveMisidentifications(Entity witness) throws Exception {
		// remember old misidentifications
		List<Relation> oldRels = witness.getSourceRelations(Misidentification.HAS_MISIDENT, Misidentification.MISIDENT);
		List<Entity> misidents = new ArrayList<Entity>();
		// save new misidentifications
		for (Misidentification misident : this.getMisidentList()) {
			misident.saveMisidentification(witness);
			misidents.add(misident.getMisident());			
		}
		// update relations
		this.replaceMultipleSourceRelations(witness, misidents, Misidentification.MISIDENT, Misidentification.HAS_MISIDENT);
		// check for orphaned old misidentifications
		for (Relation rel : oldRels) {
			boolean found = false;
			for (Entity miEnt : misidents) {
				if (miEnt != null && rel.getTargetId() == miEnt.getId()) {
					found = true;
					break;
				}
			}
			if (!found) {
				Entity miEnt = getWrapper().getEntityById(rel.getTargetId());
				logger.warn("Orphaned MISIDENTIFICATION will be deleted: "+miEnt);
				getWrapper().removeCurrentVersionEntity(miEnt, getUserName());
			}
		}
		return witness;
	}

	private List<Misidentification> getMisidentList() {
		List<Misidentification> list = new ArrayList<Misidentification>();
		for (SelectableObject<Misidentification> so : this.list) {
			list.add(so.getObj());
		}
		return list;
	}

	public List<SelectableObject<Misidentification>> getList() {
		return list;
	}

	public void setList(List<SelectableObject<Misidentification>> list) {
		this.list = list;
	}

	public Misidentification getMisident() {
		return misident;
	}

	public void setMisident(Misidentification misident) {
		this.misident = misident;
	}

	public ListenerObject getLo() {
		return lo;
	}

	public void setLo(ListenerObject lo) {
		this.lo = lo;
	}
}