@XmlSchemaType(name = "IDREF")
@IndexColumn(name="sortIndex", base = 0)
@ManyToMany(fetch = FetchType.LAZY)
- @Cascade(CascadeType.SAVE_UPDATE)
+ @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
@Match(MatchMode.MATCH)
private List<Person> teamMembers;
+
+ @XmlElement(name = "hasMoreMembers")
+ private boolean hasMoreMembers;
+
/**
//kindOfUnit\r
public static final UUID uuidSpecimenScan = UUID.fromString("acda15be-c0e2-4ea8-8783-b9b0c4ad7f03");\r
public static final UUID uuidDetailImage = UUID.fromString("31eb8d02-bf5d-437c-bcc6-87a626445f34");\r
-
- //...\r
++\r
\r
//Identifier Type\r
public static final UUID uuidLsid = UUID.fromString("26729412-9df6-4cc3-9e5d-501531ca21f0");\r
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch = FetchType.LAZY)
// @Target(TeamOrPersonBase.class)
- @Cascade(CascadeType.SAVE_UPDATE)
+ @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+ @JoinColumn(name="combinationAuthorship_id")
@CacheUpdate("authorshipCache")
@IndexedEmbedded
private TeamOrPersonBase<?> combinationAuthorTeam;
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch = FetchType.LAZY)
// @Target(TeamOrPersonBase.class)
- @Cascade(CascadeType.SAVE_UPDATE)
+ @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+ @JoinColumn(name="exCombinationAuthorship_id")
@CacheUpdate("authorshipCache")
@IndexedEmbedded
private TeamOrPersonBase<?> exCombinationAuthorTeam;
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch = FetchType.LAZY)
// @Target(TeamOrPersonBase.class)
- @Cascade(CascadeType.SAVE_UPDATE)
+ @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+ @JoinColumn(name="basionymAuthorship_id")
@CacheUpdate("authorshipCache")
@IndexedEmbedded
private TeamOrPersonBase<?> basionymAuthorTeam;
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch = FetchType.LAZY)
// @Target(TeamOrPersonBase.class)
- @Cascade(CascadeType.SAVE_UPDATE)
+ @Cascade({CascadeType.SAVE_UPDATE,CascadeType.MERGE})
+ @JoinColumn(name="exBasionymAuthorship_id")
@CacheUpdate("authorshipCache")
@IndexedEmbedded
private TeamOrPersonBase<?> exBasionymAuthorTeam;
* @return\r
*/\r
public List<TaggedText> getTaggedName(UUID uuid);\r
-
+ \r
- List<HashMap<String, String>> getNameRecords();\r
+ /**\r
+ * @param nameUuid\r
+ * @return\r
+ */\r
+ public UpdateResult setAsGroupsBasionym(UUID nameUuid);\r
-
++\r
+ public List<HashMap<String, String>> getNameRecords();\r
-
++\r
}
*/\r
public interface IPolytomousKeyNodeService extends IVersionableService<PolytomousKeyNode> {\r
\r
- //public UUID delete(PolytomousKeyNode node, boolean deleteChildren);\r
+ \r
- public DeleteResult delete(UUID nodeUUID, boolean deleteChildren);\r
+ public DeleteResult delete(PolytomousKeyNode node, boolean deleteChildren);\r
+\r
+ public DeleteResult delete(UUID nodeUuid, boolean deleteChildren);\r
++\r
++\r
}\r
*/
public int countAllNodesForClassification(Classification classification);
- public UpdateResult moveTaxonNode(TaxonNode taxonNode, TaxonNode newParent);
-
- public UpdateResult moveTaxonNode(UUID taxonNodeUUID, UUID newParentUUID);
-
+ public DeleteResult deleteTaxonNode(UUID nodeUUID, TaxonDeletionConfigurator config);
+
- UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID targetNodeUuid,
- boolean moveToParent);
-
-
-
+ /**
+ * @param taxonNode
+ * @param newParentTaxonNode
+ * @return
+ */
+ public UpdateResult moveTaxonNode(TaxonNode taxonNode, TaxonNode newParentTaxonNode);
+ public UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID targetNodeUuid, boolean moveToParent);
+ /**
+ * @param taxonNodeUuid
+ * @param newParentTaxonNodeUuid
+ * @return
+ */
+ public UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID newParentTaxonNodeUuid);
}
\r
}\r
\r
+ @Override\r
+ @Transactional(readOnly = true)\r
+ public UpdateResult setAsGroupsBasionym(UUID nameUuid) {\r
+ TaxonNameBase name = dao.load(nameUuid);\r
+ UpdateResult result = new UpdateResult();\r
+ name.setAsGroupsBasionym();\r
+ result.addUpdatedObject(name);\r
+ return result;\r
++\r
+ }\r
+\r
@Override\r
public List<HashMap<String,String>> getNameRecords(){\r
- \r
+ \r
return dao.getNameRecords();\r
- \r
+ \r
}\r
\r
}\r
protected void setDao(IPolytomousKeyNodeDao dao) {\r
this.dao = dao;\r
}\r
- \r
+\r
@Override\r
- public DeleteResult delete(PolytomousKeyNode node, boolean deleteChildren){\r
- UUID uuid = node.getUuid();\r
+ public DeleteResult delete(UUID nodeUUID, boolean deleteChildren){\r
+ DeleteResult result = new DeleteResult();\r
+ PolytomousKeyNode node = dao.findByUuid(nodeUUID);\r
node = (PolytomousKeyNode)HibernateProxyHelper.deproxy(node);\r
- List<PolytomousKeyNode> children = node.getChildren();
- PolytomousKeyNode parent = node.getParent();
+ List<PolytomousKeyNode> children = node.getChildren();\r
+ PolytomousKeyNode parent = node.getParent();\r
+ parent = HibernateProxyHelper.deproxy(parent, PolytomousKeyNode.class);\r
++\r
if(!deleteChildren){\r
- \r
+\r
for (PolytomousKeyNode child: children){\r
parent.addChild(child);\r
parent.removeChild(node);\r
dao.update(child);\r
+ result.addUpdatedObject(child);\r
}\r
- \r
+\r
dao.update(node);\r
+ result.addUpdatedObject(node);\r
}\r
if (node.getParent()!= null){\r
node.getParent().removeChild(node);\r
if (node.getKey().getRoot().equals(node)){\r
node.getKey().setRoot(null);\r
}\r
- dao.delete(node);\r
+ if (dao.delete(node) == null){\r
+ result.setAbort();\r
+ }\r
dao.saveOrUpdate(parent);\r
- DeleteResult result = new DeleteResult();\r
result.addUpdatedObject(parent);\r
return result;\r
- \r
+\r
}\r
\r
+ @Override\r
+ public DeleteResult delete(UUID nodeUuid, boolean deleteChildren){\r
+ PolytomousKeyNode node = dao.load(nodeUuid);\r
+ return delete(node, deleteChildren);\r
+ }\r
+\r
}\r
if (treeNode instanceof TaxonNode){
TaxonNode taxonNode;
taxonNode = HibernateProxyHelper.deproxy(treeNode, TaxonNode.class);
-
+ TaxonNode parent = taxonNode.getParent();
//check whether the node has children or the children are already deleted
- if(taxonNode.hasChildNodes()){
+ if(taxonNode.hasChildNodes()) {
Set<ITaxonTreeNode> children = new HashSet<ITaxonTreeNode> ();
List<TaxonNode> childNodesList = taxonNode.getChildNodes();
children.addAll(childNodesList);
}
+
+ @Override
+ @Transactional(readOnly = false)
+ public DeleteResult deleteTaxonNodes(Collection<UUID> nodeUuids, TaxonDeletionConfigurator config) {
+ Set<ITaxonTreeNode> nodes = new HashSet<ITaxonTreeNode>();
+ for(UUID nodeUuid : nodeUuids) {
+ nodes.add(dao.load(nodeUuid));
+ }
+ return deleteTaxonNodes(nodes, config);
+ }
+
+
++
@Override
@Transactional(readOnly = false)
public DeleteResult deleteTaxonNode(UUID nodeUUID, TaxonDeletionConfigurator config) {
if (config == null){
config = new TaxonDeletionConfigurator();
}
+ DeleteResult result = new DeleteResult();
if (config.getTaxonNodeConfig().isDeleteTaxon()){
- result = taxonService.deleteTaxon(taxon, config, node.getClassification());
- result.addUpdatedObject(parent);
- result.setCdmEntity(node);
- return result;
- } else{
- result.setCdmEntity(node);
- boolean success = taxon.removeTaxonNode(node);
- if (success) {
- result.addUpdatedObject(parent);
- result.setCdmEntity(node);
- if (!dao.delete(node).equals(null)){
- return result;
- } else {
- result.setError();
- return result;
- }
+ result = taxonService.deleteTaxon(taxon, config, node.getClassification());
+ if (result.isOk()){
+ return result;
+ }
+ }
+
+ result.setCdmEntity(node);
+ boolean success = taxon.removeTaxonNode(node);
+ taxonService.saveOrUpdate(taxon);
+ result.addUpdatedObject(taxon);
+
+ if (success){
+ result.setStatus(Status.OK);
+ if (!dao.delete(node).equals(null)){
+ return result;
} else {
result.setError();
- result.addException(new Exception("The node can not be removed from the taxon."));
return result;
}
+ }else{
+ result.setError();
+ result.addException(new Exception("The node can not be removed from the taxon."));
+ return result;
}
+
+
}
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.api.service.ITaxonNodeService#listAllNodesForClassification(eu.etaxonomy.cdm.model.taxon.Classification, int, int)
*/
results = dao.getTaxaByNameForEditor(configurator.isDoTaxa(), configurator.isDoSynonyms(), configurator.isDoNamesWithoutTaxa(), configurator.isDoMisappliedNames(),configurator.getTitleSearchStringSqlized(), configurator.getClassification(), configurator.getMatchMode(), configurator.getNamedAreas());\r
}\r
if (configurator.isDoTaxaByCommonNames()) {\r
-
++\r
//if(configurator.getPageSize() == null ){\r
List<UuidAndTitleCache<IdentifiableEntity>> commonNameResults = dao.getTaxaByCommonNameForEditor(configurator.getTitleSearchStringSqlized(), configurator.getClassification(), configurator.getMatchMode(), configurator.getNamedAreas());\r
if(commonNameResults != null){\r
return this.dao.findIdenticalTaxonNames(propertyPath);\r
}\r
\r
+ @Override\r
+ @Transactional(readOnly = true)\r
+ public DeleteResult deleteTaxon(UUID taxonUuid, TaxonDeletionConfigurator config, UUID classificationUuid) {\r
+ return deleteTaxon((Taxon)dao.load(taxonUuid), config, classificationDao.load(classificationUuid));\r
+ }\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteTaxon(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator)\r
+ */\r
++\r
@Override\r
public DeleteResult deleteTaxon(Taxon taxon, TaxonDeletionConfigurator config, Classification classification) {\r
\r
\r
}\r
\r
++\r
+ @Transactional(readOnly = false)\r
+ @Override\r
+ public DeleteResult deleteSynonym(UUID synonymUuid, UUID taxonUuid, SynonymDeletionConfigurator config) {\r
+ return deleteSynonym((Synonym)dao.load(synonymUuid), (Taxon)dao.load(taxonUuid), config);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.ITaxonService#findIdenticalTaxonNameIds(java.util.List)\r
+ */\r
++\r
@Override\r
public List<TaxonNameBase> findIdenticalTaxonNameIds(List<String> propertyPath) {\r
\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
package eu.etaxonomy.cdm.api.service;\r
-\r
+
import java.io.Serializable;\r
- import java.util.ArrayList;\r
+ import java.util.Collection;\r
import java.util.HashSet;\r
- import java.util.List;\r
import java.util.Set;\r
\r
+ import org.apache.commons.collections.buffer.CircularFifoBuffer;\r
import org.apache.log4j.Logger;\r
\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
private Status status = Status.OK;\r
\r
- private final List<Exception> exceptions = new ArrayList<Exception>();\r
+ @SuppressWarnings("unchecked")\r
+ private final Collection<Exception> exceptions = new CircularFifoBuffer(10);\r
\r
private final Set<CdmBase> upatedObjects = new HashSet<CdmBase>();\r
-\r
+
private final Set<CdmBase> unchangedObjects = new HashSet<CdmBase>();\r
\r
private CdmBase cdmEntity;\r