Mercurial > hg > ismi-richfaces
view src/main/java/de/mpiwg/itgroup/ismi/entry/beans/CurrentPersonBean.java @ 178:ca83d67a2dc9
bugfix and nicer messages for PublicByAuthor feature.
author | Robert Casties <casties@mpiwg-berlin.mpg.de> |
---|---|
date | Fri, 08 Jun 2018 18:28:58 +0200 |
parents | 49a631863746 |
children |
line wrap: on
line source
package de.mpiwg.itgroup.ismi.entry.beans; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.convert.Converter; import javax.faces.event.ActionEvent; import javax.faces.event.AjaxBehaviorEvent; import javax.faces.event.ValueChangeEvent; 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.Node; import org.mpi.openmind.repository.bo.Relation; import org.mpi.openmind.repository.services.utils.EditIntent; import org.mpi.openmind.repository.utils.RomanizationLoC; import org.mpi.openmind.repository.utils.TransliterationUtil; import de.mpiwg.itgroup.ismi.auxObjects.AliasListenerObject; /* rich import com.icesoft.faces.async.render.SessionRenderer; import com.icesoft.faces.component.ext.HtmlCommandButton; import com.icesoft.faces.component.ext.HtmlInputHidden; */ import de.mpiwg.itgroup.ismi.auxObjects.ListenerObject; import de.mpiwg.itgroup.ismi.util.guiComponents.AliasEntityList; import de.mpiwg.itgroup.ismi.util.guiComponents.Calendar; import de.mpiwg.itgroup.ismi.util.guiComponents.EntityList; public class CurrentPersonBean extends AbstractISMIBean implements Serializable{ private static final long serialVersionUID = -3366510497089165294L; private static Logger logger = Logger.getLogger(CurrentPersonBean.class); //private Entity person; private String newAlias; private String romanizedNameTranslit; public static String birth_date = "birth_date"; public static String death_date = "death_date"; private AliasListenerObject birthPlaceLo = new AliasListenerObject(PLACE, name, "is_alias_name_of"); private AliasListenerObject deathPlaceLo = new AliasListenerObject(PLACE, name, "is_alias_name_of"); private String valueShortName; private Entity shortNameAlias; // is now an alias of type "prime" private transient Calendar calBirthDate; private transient Calendar calDeathDate; private Map<String, Boolean> deletedAliases = new HashMap<String, Boolean>(); private EntityList livedInPlaces; private EntityList aliasList; private EntityList roleList; private EntityList studentOfList; private EntityList floruitList; /** intent to edit all attributes and relations in the form */ public static EditIntent editPersonIntent = new EditIntent( PERSON, // attributes new String[]{"name", "name_translit", "birth_date", "birth_date_text", "death_date", "death_date_text", "url", "authority_id", "notes", "notes_old", "mams_number"}, // source relations new String[]{"was_born_in", "was_born_in_as", "died_in", "died_in_as", "lived_in", "lived_in_as", "was_student_of", "has_floruit_date", "has_role"}, // target relations new String[]{"is_prime_alias_name_of", "is_alias_name_of", "is_reference_of"}); @Override public void reset(){ super.reset(); this.entity = new Entity(Node.TYPE_ABOX, PERSON, false); this.newAlias = new String(); this.livedInPlaces = new AliasEntityList(PLACE, name, "is_alias_name_of", true); this.aliasList = new EntityList(ALIAS, "alias", getWrapper(), getUserName()); this.roleList = new EntityList(ROLE, "name", getWrapper(), getUserName()); this.studentOfList = new EntityList(PERSON, "name_translit", "Student of"); this.floruitList = new EntityList(FLORUIT_DATE, "date", getWrapper(), getUserName(), true); this.valueShortName = ""; this.shortNameAlias = null; this.birthPlaceLo.reset(); this.deathPlaceLo.reset(); this.deletedAliases = new HashMap<String, Boolean>(); this.calBirthDate = new Calendar(); this.calDeathDate = new Calendar(); } public EntityList getRoleList() { return roleList; } public void setRoleList(EntityList roleList) { this.roleList = roleList; } public EntityList getAliasList() { return aliasList; } public void setAliasList(EntityList aliasList) { this.aliasList = aliasList; } public CurrentPersonBean() { this.reset(); setDefObjectClass(PERSON); registerChecker(birthPlaceLo, "Birth place not valid!"); registerChecker(deathPlaceLo, "Death place not valid!"); } /** * * @param event */ public void shortNameChangeListener(ValueChangeEvent event) { try { if (event.getNewValue() == null) { return; } if (event.getNewValue().equals(event.getOldValue())) { return; } String newShortName = (String) event.getNewValue(); if (shortNameAlias == null) { shortNameAlias = new Entity(Node.TYPE_ABOX, ALIAS, false); } Attribute attr = shortNameAlias.getAttributeByName(alias); if (attr == null) { shortNameAlias.addAttribute(new Attribute(alias, TEXT, newShortName)); } else { attr.setValue(newShortName); } } catch (Exception e) { logger.error(e); } } public String translitNameAction() { String pn = getAttributes().get(name); String translit = TransliterationUtil.getTransliteration(pn); this.getAttributes().put(name_translit, translit); return PAGE_EDITOR; } public Calendar getCalBirthDate() { return calBirthDate; } public void setCalBirthDate(Calendar calBirthDate) { this.calBirthDate = calBirthDate; } public Calendar getCalDeathDate() { return calDeathDate; } public void setCalDeathDate(Calendar calDeathDate) { this.calDeathDate = calDeathDate; } @Override public void setEntity(Entity person) { this.reset(); this.entity = person; if(this.entity != null && this.entity.isPersistent()){ if (this.entity.isLightweight()) { this.entity = this.getWrapper().getEntityContent(person); } this.calDeathDate = updateCalendar(this.entity.getAttributeByName(death_date)); this.calBirthDate = updateCalendar(this.entity.getAttributeByName(birth_date)); this.setCurrentId(this.entity.getId().toString()); this.loadAttributes(this.entity); for (Relation rel : this.entity.getSourceRelations()) { String relName = rel.getOwnValue(); Entity target = getWrapper().getEntityById(rel.getTargetId()); if (relName.equals("was_born_in")) { this.birthPlaceLo.setEntityAndAttributeIfEmpty(target); } else if (relName.equals("was_born_in_as")) { this.birthPlaceLo.setEntityAndAttribute(target); } else if (relName.equals("died_in")) { this.deathPlaceLo.setEntityAndAttributeIfEmpty(target); } else if (relName.equals("died_in_as")) { this.deathPlaceLo.setEntityAndAttribute(target); } else if (relName.equals(lived_in)) { this.livedInPlaces.add(target, rel.getAttributeByName("date")); } else if (relName.equals(lived_in_as)) { this.livedInPlaces.add(target, rel.getAttributeByName("date")); } else if (relName.equals(was_student_of)) { this.studentOfList.add(target); } else if (relName.equals(has_role)) { this.roleList.add(target); } else if (relName.equals("has_floruit_date")) { Attribute calAtt = getWrapper().getAttributeByName(target.getId(), "date"); this.floruitList.add(target, calAtt); } } for (Relation rel : this.entity.getTargetRelations()) { if (rel.getOwnValue().equals("was_created_by") && rel.getSourceObjectClass().equals(TEXT)) { //Entity title = getWrapper().getEntityById(rel.getSourceId()); } else if (rel.getOwnValue().equals("is_alias_name_of")) { Entity alias = getWrapper().getEntityById(rel.getSourceId()); this.aliasList.add(alias); } else if (rel.getOwnValue().equals("is_prime_alias_name_of")) { Entity alias = getWrapper().getEntityByIdWithContent(rel.getSourceId()); this.shortNameAlias = alias; this.valueShortName = alias.getAttributeByName("alias").getValue(); } } //this.loadReferences(this.entity); this.loadEndNoteRefs(); this.displayUrl = generateDisplayUrl(person, null, null, getAppBean().getRoot()); } } /** * Saves the current Person. TODO save the target's relations. * * @return */ @Override public String save() { super.save(); try { long start = System.currentTimeMillis(); CheckResults cr = getCheckResults(); if (cr.hasErrors){ getSessionBean().setErrorMessages(cr); getSessionBean().setDisplayError(true); return "SAVE_ERROR"; } getAttributes().put(birth_date, this.calBirthDate.toJSONString()); getAttributes().put(death_date, this.calDeathDate.toJSONString()); this.entity = updateEntityAttributes(this.entity); // PERSON -> was_born_in -> PLACE replaceUniqueAliasSourceRelation(this.entity, birthPlaceLo, PLACE, "was_born_in", "was_born_in_as"); // PERSON -> was_died_in -> PLACE replaceUniqueAliasSourceRelation(this.entity, deathPlaceLo, PLACE, "died_in", "died_in_as"); // ALIAS -> is_prime_alias_name_of/is_alias_name_of -> PERSON ArrayList<Entity> aliasNames = new ArrayList<Entity>(aliasList.getEntities()); // replace prime_alias_name with alias_name this.entity.removeAllTargetRelationsByName(is_prime_alias_name_of); if (shortNameAlias != null) { if (shortNameAlias.getAttributeByName(alias) == null) { logger.error("ALIAS without Attribute! Trying to fix "+shortNameAlias); if (valueShortName != null) { shortNameAlias.addAttribute(new Attribute(alias, TEXT, valueShortName)); } } shortNameAlias = getWrapper().saveEntity(shortNameAlias, getSessionUser().getEmail(), null); // save as is_alias_name_of aliasNames.add(shortNameAlias); } // set alias names replaceMultipleTargetRelations(entity, aliasNames, ALIAS, is_alias_name_of); // PERSON -> lived_in -> PLACE (manyToMany) this.entity.removeAllSourceRelationsByName(lived_in); this.entity.removeAllSourceRelationsByName(lived_in_as); for (Entity place : this.livedInPlaces.getEntities()) { Entity placeEnt = getWrapper().getEntityByIdWithContent(place.getId()); if (placeEnt.getObjectClass().equals(PLACE)) { // PERSON -> lived_in -> PLACE Relation livedIn = new Relation(this.entity, placeEnt, lived_in); Calendar cal = livedInPlaces.getCalendar(place.getId()); if (cal != null) { livedIn.addAttribute(new Attribute("date", "date", cal.toJSONString())); } } else if (placeEnt.getObjectClass().equals(ALIAS)) { // PERSON -> lived_in_as -> ALIAS Relation livedInAs = new Relation(this.entity, placeEnt, lived_in_as); Calendar cal = livedInPlaces.getCalendar(place.getId()); if (cal != null) { livedInAs.addAttribute(new Attribute("date", "date", cal.toJSONString())); } // ALIAS -> is_alias_name_of -> PLACE List<Entity> places = getWrapper().getTargetsForSourceRelation(placeEnt, is_alias_name_of, PLACE, 1); if (!places.isEmpty()) { // PERSON -> lived_in -> PLACE Entity realPlace = places.get(0); Relation livedIn = new Relation(this.entity, realPlace, lived_in); if (cal != null) { livedIn.addAttribute(new Attribute("date", "date", cal.toJSONString())); } } } } // Person -> has_floruit_date -> FLORUIT DATE ArrayList<Entity> floruitDates = new ArrayList<Entity>(); for (Entity floruitDate : this.floruitList.getEntities()) { floruitDate = getWrapper().getEntityContent(floruitDate); Calendar cal = floruitList.getCalendar(floruitDate.getId()); if (floruitDate.getAttributeByName("date") == null) { floruitDate.addAttribute(new Attribute("date", "date", cal.toJSONString())); } else { floruitDate.getAttributeByName("date").setValue(cal.toJSONString()); } getWrapper().saveEntity(floruitDate, getUserName(), null); floruitDates.add(floruitDate); } replaceMultipleSourceRelations(entity, floruitDates, FLORUIT_DATE, has_floruit_date); //PERSON -> student of manyToMany -> PERSON replaceMultipleSourceRelations(entity, studentOfList.getEntities(), PERSON, was_student_of); //PERSON -> has_role -> ROLE replaceMultipleSourceRelations(entity, roleList.getEntities(), ROLE, has_role); //REFERENCE -> is_reference_of -> THIS this.saveReferences(); // save entity this.entity = getWrapper().saveEntity(this.entity, getSessionUser().getEmail(), editPersonIntent); this.setEntity(this.entity); this.getCache().setMapDirty(true); this.getAppBean().getBiographyBean().makeDirty(); logger.info("Entity saved - Time = " + (System.currentTimeMillis() - start) + ", " + entity); this.printSuccessSavingEntity(); } catch (Exception e) { logger.error(e.getMessage(), e); e.printStackTrace(); this.printInternalError(e); } saveEnd(); return PAGE_EDITOR; } public void listenerEditCalendarForLivedInPlaces(ActionEvent event){ Entity entity = (Entity)getRequestBean("item"); if(entity != null){ Calendar cal = this.livedInPlaces.getCalendar(entity.getId()); getSessionBean().editCalendar(cal, livedInPlaces, entity.getId()); } } public void listenerEditCalendarForFloruitDate(ActionEvent event){ Entity entity = (Entity)getRequestBean("item"); if(entity != null){ Calendar cal = this.floruitList.getCalendar(entity.getId()); getSessionBean().editCalendar(cal, floruitList, entity.getId()); } } public void listenerRomanizeNameTranslit(AjaxBehaviorEvent event){ if(getAttributes().get("name_translit") != null) this.romanizedNameTranslit = RomanizationLoC.convert(getAttributes().get("name_translit")); } public Entity getShortName() { return shortNameAlias; } public void setShortName(Entity shortName) { this.shortNameAlias = shortName; } public String getValueShortName() { return valueShortName; } public void setValueShortName(String valueShortName) { this.valueShortName = valueShortName; } public void setToDate(Object x) { //System.out.println("hello"); } public Converter getToDate() { return new myDateTimeConverter(); } public Map<String, Boolean> getDeletedAliases() { return deletedAliases; } public void setDeletedAliases(Map<String, Boolean> deletedAliases) { this.deletedAliases = deletedAliases; } public void setNewAlias(String newAlias) { this.newAlias = newAlias; } public String getNewAlias() { return newAlias; } public String editMe(){ if(this.entity != null){ getSessionBean().editEntity(this.entity); return "entry_edit_entity"; } return ""; } public void setBirthPlaceLo(AliasListenerObject birthPlaceLo) { this.birthPlaceLo = birthPlaceLo; } public ListenerObject getBirthPlaceLo() { return birthPlaceLo; } public ListenerObject getDeathPlaceLo() { return deathPlaceLo; } public void setDeathPlaceLo(AliasListenerObject deathPlaceLo) { this.deathPlaceLo = deathPlaceLo; } public EntityList getLivedInPlaces() { return livedInPlaces; } public void setLivedInPlaces(EntityList livedInPlaces) { this.livedInPlaces = livedInPlaces; } public EntityList getStudentOfList() { return studentOfList; } public void setStudentOfList(EntityList studentOfList) { this.studentOfList = studentOfList; } public EntityList getFloruitList() { return floruitList; } public void setFloruitList(EntityList floruitList) { this.floruitList = floruitList; } public String getRomanizedNameTranslit() { return romanizedNameTranslit; } public void setRomanizedNameTranslit(String romanizedNameTranslit) { this.romanizedNameTranslit = romanizedNameTranslit; } }