/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
* <li> AgentNames (partially) according to the TCS
* <li> MicroAgent (partially) according to the ABCD schema
* </ul>
- *
+ *
* @author m.doering
* @version 1.0
* @created 08-Nov-2007 13:06:58
public class Team extends TeamOrPersonBase<Team> {
private static final long serialVersionUID = 97640416905934622L;
public static final Logger logger = Logger.getLogger(Team.class);
-
+
@XmlElement(name = "ProtectedNomenclaturalTitleCache")
private boolean protectedNomenclaturalTitleCache = false;
@Cascade(CascadeType.SAVE_UPDATE)
@Match(MatchMode.MATCH)
private List<Person> teamMembers;
-
-
- /**
+
+
+ /**
* Creates a new team instance without any concrete {@link Person members}.
*/
static public Team NewInstance(){
return new Team();
}
-
- /**
+
+ /**
+ * Creates a new team instance with a bibliographic and nomenclatural title
+ * but without any {@link Person members}. The caches are set to protected.
+ */
+ static public Team NewTitledInstance(String title, String nomTitle){
+ Team result = new Team();
+ result.setTitleCache(title, true);
+ result.setNomenclaturalTitle(nomTitle, true);
+ return result;
+ }
+
+ /**
* Class constructor (including the cache strategy defined in
* {@link eu.etaxonomy.cdm.strategy.cache.agent.TeamDefaultCacheStrategy TeamDefaultCacheStrategy}).
*/
*/
private void addListenerForTeamMember(Person member) {
PropertyChangeListener listener = new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent e) {
- if (! isProtectedTitleCache()){
- titleCache = titleCache;
- }
- if (! isProtectedNomenclaturalTitleCache()){
- nomenclaturalTitle = nomenclaturalTitle;
- }
+ @Override
+ public void propertyChange(PropertyChangeEvent e) {
+
+// ---- code with no effect below -----
+// if (! isProtectedTitleCache()){
+// titleCache = titleCache;
+// }
+// if (! isProtectedNomenclaturalTitleCache()){
+// nomenclaturalTitle = nomenclaturalTitle;
+// }
}
};
member.addPropertyChangeListener(listener);
}
- /**
- * Returns the list of {@link Person members} belonging to <i>this</i> team.
- * A person may be a member of several distinct teams.
+ /**
+ * Returns the list of {@link Person members} belonging to <i>this</i> team.
+ * A person may be a member of several distinct teams.
*/
public List<Person> getTeamMembers(){
if(teamMembers == null) {
}
return this.teamMembers;
}
-
+
protected void setTeamMembers(List<Person> teamMembers) {
this.teamMembers = teamMembers;
addListenersToMembers();
}
-
- /**
- * Adds a new {@link Person person} to <i>this</i> team at the end of the members' list.
+
+ /**
+ * Adds a new {@link Person person} to <i>this</i> team at the end of the members' list.
*
* @param person the person who should be added to the other team members
* @see #getTeamMembers()
addListenerForTeamMember(person);
}
}
-
- /**
+
+ /**
* Adds a new {@link Person person} to <i>this</i> team
* at the given index place of the members' list. If the person is already
- * a member of the list he will be moved to the given index place.
+ * a member of the list he will be moved to the given index place.
* The index must be an integer (>=0). If the index is larger than
* the present number of members the person will be added at the end of the list.
*
firePropertyChange("teamMember", null, person);
}
}
-
- /**
+
+ /**
* Removes one person from the list of members of <i>this</i> team.
*
* @param person the person who should be deleted from <i>this</i> team
if (wasMember){
firePropertyChange("teamMember", person, null);
}
-
+
}
-
+
/**
* Generates or returns the {@link TeamOrPersonBase#getnomenclaturalTitle() nomenclatural identification} string for <i>this</i> team.
* This method overrides {@link TeamOrPersonBase#getNomenclaturalTitle() getNomenclaturalTitle}.
* {@link eu.etaxonomy.cdm.strategy.cache.agent.TeamDefaultCacheStrategy TeamDefaultCacheStrategy}.
* The result might be kept as nomenclatural abbreviation
* by using the {@link #setNomenclaturalTitle(String) setNomenclaturalTitle} method.
- *
+ *
* @return a string which identifies <i>this</i> team for nomenclature
*/
@Override
//as long as team members to not inform the team about changes the cache must be created new each time
nomenclaturalTitle = cacheStrategy.getNomenclaturalTitle(this);
}
- return nomenclaturalTitle;
+ return nomenclaturalTitle;
}
-
+
/**
* Assigns a {@link TeamOrPersonBase#nomenclaturalTitle nomenclatural identification} string to <i>this</i> team
* and protects it from overwriting.
* This method overrides {@link TeamOrPersonBase#setNomenclaturalTitle(String) setNomenclaturalTitle}.
- *
+ *
* @see #getNomenclaturalTitle()
* @see #setNomenclaturalTitle(String, boolean)
*/
/**
* Assigns a {@link TeamOrPersonBase#nomenclaturalTitle nomenclatural identification} string to <i>this</i> team
* and a protection flag status to this string.
- *
+ *
* @see #getNomenclaturalTitle()
*/
public void setNomenclaturalTitle(String nomenclaturalTitle, boolean protectedNomenclaturalTitleCache) {
this.nomenclaturalTitle = nomenclaturalTitle;
this.protectedNomenclaturalTitleCache = protectedNomenclaturalTitleCache;
}
-
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.model.agent.TeamOrPersonBase#getTitleCache()
*/
isGeneratingTitleCache = true;
String result = "";
if (isProtectedTitleCache()){
- result = this.titleCache;
+ result = this.titleCache;
}else{
result = generateTitle();
result = replaceEmptyTitleByNomTitle(result);
result = getTruncatedCache(result);
+ this.titleCache = result;
}
isGeneratingTitleCache = false;
return result;
boolean protectedNomenclaturalTitleCache) {
this.protectedNomenclaturalTitleCache = protectedNomenclaturalTitleCache;
}
-
-
+
+//*********************** CLONE ********************************************************/
+
+ /**
+ * Clones <i>this</i> Team. This is a shortcut that enables to create
+ * a new instance that differs only slightly from <i>this</i> Team.
+ * The corresponding person is cloned.
+ *
+ * @see eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity#clone()
+ * @see java.lang.Object#clone()
+ */
+ @Override
+ public Object clone() {
+ try{
+ Team result = (Team)super.clone();
+ result.teamMembers = new ArrayList<Person>();
+ for (Person teamMember: this.teamMembers){
+ result.addTeamMember(teamMember);
+ }
+ //no changes to protectedNomenclaturalTitleCache
+ return result;
+ } catch (CloneNotSupportedException e){
+ logger.warn("Object does not implement cloneable");
+ e.printStackTrace();
+ return null;
+ }
+
+
+ }
+
+
}
\ No newline at end of file