diff src/main/java/de/mpiwg/itgroup/ismi/event/beans/TransferEvent.java @ 1:2e911857a759

(none)
author jurzua
date Wed, 29 Oct 2014 14:00:28 +0000
parents
children 12af756065b5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/mpiwg/itgroup/ismi/event/beans/TransferEvent.java	Wed Oct 29 14:00:28 2014 +0000
@@ -0,0 +1,432 @@
+package de.mpiwg.itgroup.ismi.event.beans;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.model.SelectItem;
+
+import org.mpi.openmind.repository.bo.Attribute;
+import org.mpi.openmind.repository.bo.Entity;
+import org.mpi.openmind.repository.bo.Node;
+import org.mpi.openmind.repository.bo.Relation;
+
+import de.mpiwg.itgroup.ismi.auxObjects.ListenerObject;
+import de.mpiwg.itgroup.ismi.auxObjects.lo.EventTextLO;
+import de.mpiwg.itgroup.ismi.util.guiComponents.Calendar;
+
+public class TransferEvent  extends AbstractEvent implements Serializable{
+	
+	private static final long serialVersionUID = -3606229569295260209L;
+
+	public static String OC = "TRANSFER_EVENT";
+	
+	private boolean selectedPersonFrom;
+	private ListenerObject personFromLo = new ListenerObject(PERSON, name_translit);
+	private ListenerObject repositoryFromLo = new ListenerObject(REPOSITORY, name);
+	
+	private boolean selectedPersonTo;
+	private ListenerObject personToLo = new ListenerObject(PERSON, name_translit);
+	private ListenerObject repositoryToLo = new ListenerObject(REPOSITORY, name);
+	
+	private boolean selectedPlaceOriginalLocation;
+	private ListenerObject placeOriginalLocationLo = new ListenerObject(PLACE, name);
+	private ListenerObject repositoryOriginalLocationLo = new ListenerObject(REPOSITORY, name);
+	
+	private boolean selectedPlaceNewLocation;
+	private ListenerObject placeNewLocationLo = new ListenerObject(PLACE, name);
+	private ListenerObject repositoryNewLocationLo = new ListenerObject(REPOSITORY, name);
+	
+	private List<SelectItem> suggestedTransferOptions = new ArrayList<SelectItem>();
+	
+	public TransferEvent(Entity event) {
+		super(event);
+		this.refreshTransferOptions();
+	}
+	
+	public TransferEvent(){
+		super(new Entity(Node.TYPE_ABOX, OC, false));
+		this.refreshTransferOptions();
+	}
+	
+	@Override
+	public void setEvent(Entity ev){
+		reset();
+		event = ev;
+		if(event != null && event.isPersistent()){
+			if(event.isLightweight()){
+				event = getWrapper().getEntityContent(event);
+			}
+			
+			this.loadAttributes(this.event);
+			this.date = updateCalendar(this.event.getAttributeByName("date"));
+			
+			for (Relation rel : event.getSourceRelations()) {
+				Entity target = null;
+				if (rel.getOwnValue().equals(was_transferred_from)) {
+					// EVENT -> was_transferred_from -> PERSON/REPOSITORY
+					target = getTargetRelation(rel);
+					if(target.getObjectClass().equals(PERSON)){
+						personFromLo.setEntityAndAttribute0(target);
+						selectedPersonFrom = true;
+					}else{
+						repositoryFromLo.setEntityAndAttribute0(target);
+						selectedPersonFrom = false;
+					}
+					
+				}else if (rel.getOwnValue().equals(was_transferred_to)) {
+					// EVENT -> was_transferred_to -> PERSON/REPOSITORY
+					target = getTargetRelation(rel);
+					if(target.getObjectClass().equals(PERSON)){
+						personToLo.setEntityAndAttribute0(target);
+						selectedPersonTo = true;
+					}else{
+						repositoryToLo.setEntityAndAttribute0(target);
+						selectedPersonTo = false;
+					}					
+				} else if (rel.getOwnValue().equals(has_original_location)) {
+					// EVENT -> has_original_location -> PLACE/REPOSITORY
+					target = getTargetRelation(rel);
+					if(target.getObjectClass().equals(PLACE)){
+						placeOriginalLocationLo.setEntityAndAttribute0(target);
+						selectedPlaceOriginalLocation = true;
+					}else{
+						repositoryOriginalLocationLo.setEntityAndAttribute0(target);
+						selectedPlaceOriginalLocation = false;
+					}
+				} else if (rel.getOwnValue().equals(has_new_location)) {
+					// EVENT -> has_new_location -> PLACE/REPOSITORY
+					target = getTargetRelation(rel);
+					if(target.getObjectClass().equals(PLACE)){
+						placeNewLocationLo.setEntityAndAttribute0(target);
+						selectedPlaceNewLocation = true;
+					}else{
+						repositoryNewLocationLo.setEntityAndAttribute0(target);
+						selectedPlaceNewLocation = false;
+					}
+				} else if (rel.getOwnValue().equals(is_a_transfer_of)) {
+					//EVENT study_of WITNESS
+					//WITNESS is_exemplar_of TEXT
+					this.witness = getTargetRelation(rel);
+					if(witness != null && witness.isPersistent()){
+						witnessId = witness.getId();
+						this.textLo.setEntityAndAttribute0( getTextOfWitness(witness));
+						refreshWitnesses(textLo.entity);
+					}
+				} else if (rel.getOwnValue().equals(was_transferred_in)) {
+					target = getTargetRelation(rel);
+					this.placeLo.setEntityAndAttribute0(target);
+				}
+			}
+		}
+	}
+	
+	/*
+	public void listenerChangePersonFrom(ValueChangeEvent event) {
+		this.personFrom = changeListener(event, personFrom, PERSON, name_translit);
+	}
+	
+	public void listenerChangePersonTo(ValueChangeEvent event) {
+		this.personTo = changeListener(event, personTo, PERSON, name_translit);
+	}
+	
+	public void listenerChangeRepositoryFrom(ValueChangeEvent event) {
+		this.repositoryFrom = changeListener(event, repositoryFrom, REPOSITORY, name);
+	}
+	
+	public void listenerChangeRepositoryTo(ValueChangeEvent event) {
+		this.repositoryTo = changeListener(event, repositoryTo, REPOSITORY, name);
+	}*/
+	
+	public void listenerChangeSelectionFrom(ActionEvent event){
+		this.selectedPersonFrom = !selectedPersonFrom;
+	}
+	
+	public void listenerChangeSelectionTo(ActionEvent event){
+		this.selectedPersonTo = !selectedPersonTo;
+	}
+	/*
+	public void listenerChangePlaceOriginalLocation(ValueChangeEvent event){
+		this.placeOriginalLocation = changeListener(event, placeOriginalLocation, PLACE, name);
+	}
+	
+	public void listenerChangePlaceNewLocation(ValueChangeEvent event){
+		this.placeNewLocation = changeListener(event, placeNewLocation, PLACE, name);
+	}
+	
+	public void listenerChangeRepositoryOriginalLocation(ValueChangeEvent event){
+		this.repositoryOriginalLocation = changeListener(event, repositoryOriginalLocation, REPOSITORY, name);
+	}
+	
+	public void listenerChangeRepositoryNewLocation(ValueChangeEvent event){
+		this.repositoryNewLocation = changeListener(event, repositoryNewLocation, REPOSITORY, name);
+	}
+	*/
+	public void listenerChangeSelectionNewLocation(ActionEvent event){
+		this.selectedPlaceNewLocation = !selectedPlaceNewLocation;
+	}
+	
+	public void listenerChangeSelectionOriginalLocation(ActionEvent event){
+		this.selectedPlaceOriginalLocation = !selectedPlaceOriginalLocation;
+	}
+	
+	@Override
+	public void reset(){
+		super.reset();
+		this.selectedPersonFrom = true;
+		this.selectedPersonTo = true;
+		this.selectedPlaceOriginalLocation = true;
+		this.selectedPlaceNewLocation = true;
+		
+		this.defObjectClass = OC;
+		this.personFromLo = new ListenerObject(PERSON, name_translit);
+		this.repositoryFromLo = new ListenerObject(REPOSITORY, name);
+		this.personToLo = new ListenerObject(PERSON, name_translit);
+		this.repositoryToLo = new ListenerObject(REPOSITORY, name);
+		
+		if(textLo != null){
+			textLo.reset();
+		}else{
+			textLo = new EventTextLO(TEXT, full_title_translit, this);
+		}
+		
+		if(placeLo != null){
+			placeLo.reset();
+		}else{
+			placeLo = new ListenerObject(PLACE, name);
+		}
+		
+		
+		this.date = new Calendar();
+		this.witnessList = new ArrayList<SelectItem>();		
+		
+		this.placeNewLocationLo = new ListenerObject(PLACE, name);
+		this.repositoryNewLocationLo = new ListenerObject(REPOSITORY, name);
+		this.personToLo = new ListenerObject(PERSON, name_translit);
+		this.repositoryToLo = new ListenerObject(REPOSITORY, name);
+		this.placeOriginalLocationLo = new ListenerObject(PLACE, name);
+		this.repositoryOriginalLocationLo = new ListenerObject(REPOSITORY, name);
+		/*
+		this.repositoryFromLo.reset();
+		this.repositoryToLo.reset();
+		this.placeNewLocationLo.reset();
+		this.placeOriginalLocationLo.reset();
+		this.repositoryNewLocationLo.reset();
+		this.repositoryOriginalLocationLo.reset();
+		*/
+	}
+	
+	
+	public void listenerRefreshTransferOptions(ActionEvent event){
+		this.refreshTransferOptions();
+	}
+	
+	private void refreshTransferOptions(){
+		this.suggestedTransferOptions = new ArrayList<SelectItem>();
+		suggestedTransferOptions.add(new SelectItem(null, "--choose--"));
+		Attribute binding = getWrapper().getDefAttributeByOwnValue(OC, "options_for_transfer");
+		if(binding != null){
+			for(String s : binding.getPossibleValuesList()){
+				this.suggestedTransferOptions.add(new SelectItem(s));
+			}
+		}
+	}
+	
+	public void listenerSave(ActionEvent event) {
+		this.save();
+	}
+	
+	@Override
+	public String save(){
+		super.save();
+		if(!checkConsistency()){
+			addGeneralMsg("Either the Witness, the Person or the Place is empty.");
+			addGeneralMsg("The event could not be saved.");
+			return null;
+		}
+		
+		try{
+			getAttributes().put("date", this.date.toJSONString());
+			event = updateEntityAttributes(event);
+			
+			// EVENT -> was_studied_by -> WITNESS
+			if(witness.isLightweight()){
+				this.witness = getWrapper().getEntityByIdWithContent(witness.getId());
+			}
+			event.replaceSourceRelation(witness, WITNESS, is_a_transfer_of);
+			
+			// EVENT -> was_transferred_from -> PERSON/REPOSITORY
+			if(isSelectedPersonFrom()){
+				event.replaceSourceRelation(personFromLo.entity, PERSON, was_transferred_from);
+				event.removeAllSourceRelations(was_transferred_from, REPOSITORY);
+			}else{
+				event.replaceSourceRelation(repositoryFromLo.entity, REPOSITORY, was_transferred_from);
+				event.removeAllSourceRelations(was_transferred_from, PERSON);
+			}
+
+			// EVENT -> was_transferred_to -> PERSON/REPOSITORY
+			if(isSelectedPersonTo()){
+				event.replaceSourceRelation(personToLo.entity, PERSON, was_transferred_to);
+				event.removeAllSourceRelations(was_transferred_to, REPOSITORY);
+			}else{
+				event.replaceSourceRelation(repositoryToLo.entity, REPOSITORY, was_transferred_to);
+				event.removeAllSourceRelations(was_transferred_to, PERSON);
+			}
+			
+			// EVENT -> has_original_location -> PLACE/REPOSITORY
+			if(isSelectedPlaceOriginalLocation()){
+				event.replaceSourceRelation(placeOriginalLocationLo.entity, PLACE, has_original_location);
+				event.removeAllSourceRelations(has_original_location, REPOSITORY);
+			}else{
+				event.replaceSourceRelation(repositoryOriginalLocationLo.entity, REPOSITORY, has_original_location);
+				event.removeAllSourceRelations(has_original_location, PLACE);
+			}
+			
+			// EVENT -> has_new_location -> PLACE/REPOSITORY
+			if(isSelectedPlaceNewLocation()){
+				event.replaceSourceRelation(placeNewLocationLo.entity, PLACE, has_new_location);
+				event.removeAllSourceRelations(has_new_location, REPOSITORY);
+			}else{
+				event.replaceSourceRelation(repositoryNewLocationLo.entity, REPOSITORY, has_new_location);
+				event.removeAllSourceRelations(has_new_location, PLACE);
+			}
+			
+			// EVENT -> was_transferred_in -> PLACE
+			event.replaceSourceRelation(placeLo.entity, PLACE, was_transferred_in);
+			
+			getWrapper().saveEntity(event, getSessionUserName());
+			
+			printSuccessSavingEntity();
+			
+		}catch (Exception e) {
+			addGeneralMsg(e.getMessage());
+			logger.error(e.getMessage(), e);
+		}	
+		saveEnd();
+		return null;
+	}
+	
+	public boolean checkConsistency(){
+		//TODO
+		if(this.witness == null || this.textLo.entity == null ){
+			return false;
+		}
+		return true;
+	}
+	
+
+
+	public boolean isSelectedPersonFrom() {
+		return selectedPersonFrom;
+	}
+
+	public boolean isSelectedPersonTo() {
+		return selectedPersonTo;
+	}
+
+	public List<SelectItem> getSuggestedTransferOptions() {
+		return suggestedTransferOptions;
+	}
+
+	public void setSuggestedTransferOptions(
+			List<SelectItem> suggestedTransferOptions) {
+		this.suggestedTransferOptions = suggestedTransferOptions;
+	}
+
+	public boolean isSelectedPlaceOriginalLocation() {
+		return selectedPlaceOriginalLocation;
+	}
+
+
+	
+	public boolean isSelectedPlaceNewLocation() {
+		return selectedPlaceNewLocation;
+	}
+
+	public ListenerObject getPersonFromLo() {
+		return personFromLo;
+	}
+
+	public void setPersonFromLo(ListenerObject personFromLo) {
+		this.personFromLo = personFromLo;
+	}
+
+	public ListenerObject getRepositoryFromLo() {
+		return repositoryFromLo;
+	}
+
+	public void setRepositoryFromLo(ListenerObject repositoryFromLo) {
+		this.repositoryFromLo = repositoryFromLo;
+	}
+
+	public ListenerObject getPersonToLo() {
+		return personToLo;
+	}
+
+	public void setPersonToLo(ListenerObject personToLo) {
+		this.personToLo = personToLo;
+	}
+
+	public ListenerObject getRepositoryToLo() {
+		return repositoryToLo;
+	}
+
+	public void setRepositoryToLo(ListenerObject repositoryToLo) {
+		this.repositoryToLo = repositoryToLo;
+	}
+
+	public ListenerObject getPlaceOriginalLocationLo() {
+		return placeOriginalLocationLo;
+	}
+
+	public void setPlaceOriginalLocationLo(ListenerObject placeOriginalLocationLo) {
+		this.placeOriginalLocationLo = placeOriginalLocationLo;
+	}
+
+	public ListenerObject getRepositoryOriginalLocationLo() {
+		return repositoryOriginalLocationLo;
+	}
+
+	public void setRepositoryOriginalLocationLo(
+			ListenerObject repositoryOriginalLocationLo) {
+		this.repositoryOriginalLocationLo = repositoryOriginalLocationLo;
+	}
+
+	public ListenerObject getPlaceNewLocationLo() {
+		return placeNewLocationLo;
+	}
+
+	public void setPlaceNewLocationLo(ListenerObject placeNewLocationLo) {
+		this.placeNewLocationLo = placeNewLocationLo;
+	}
+
+	public ListenerObject getRepositoryNewLocationLo() {
+		return repositoryNewLocationLo;
+	}
+
+	public void setRepositoryNewLocationLo(ListenerObject repositoryNewLocationLo) {
+		this.repositoryNewLocationLo = repositoryNewLocationLo;
+	}
+
+	public void setSelectedPersonFrom(boolean selectedPersonFrom) {
+		this.selectedPersonFrom = selectedPersonFrom;
+	}
+
+	public void setSelectedPersonTo(boolean selectedPersonTo) {
+		this.selectedPersonTo = selectedPersonTo;
+	}
+
+	public void setSelectedPlaceOriginalLocation(
+			boolean selectedPlaceOriginalLocation) {
+		this.selectedPlaceOriginalLocation = selectedPlaceOriginalLocation;
+	}
+
+	public void setSelectedPlaceNewLocation(boolean selectedPlaceNewLocation) {
+		this.selectedPlaceNewLocation = selectedPlaceNewLocation;
+	}
+
+	
+	
+}