import java.net.MalformedURLException;\r
import java.net.URI;\r
import java.net.URISyntaxException;\r
-import java.net.URL;\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
+import java.util.HashSet;\r
import java.util.Set;\r
import java.util.UUID;\r
\r
import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
import eu.etaxonomy.cdm.model.common.Language;\r
import eu.etaxonomy.cdm.model.common.MarkerType;\r
+import eu.etaxonomy.cdm.model.common.Representation;\r
import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.reference.Reference;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.Classification;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
\r
/**\r
* @author a.mueller\r
\r
\r
protected ExtensionType getExtensionType(STATE state, UUID uuid, String label, String text, String labelAbbrev){\r
+ if (uuid == null){\r
+ uuid = UUID.randomUUID();\r
+ }\r
ExtensionType extensionType = state.getExtensionType(uuid);\r
if (extensionType == null){\r
extensionType = (ExtensionType)getTermService().find(uuid);\r
if (extensionType == null){\r
extensionType = ExtensionType.NewInstance(text, label, labelAbbrev);\r
extensionType.setUuid(uuid);\r
- ExtensionType.DOI().getVocabulary().addTerm(extensionType);\r
+ UUID uuidExtensionTypeVoc = UUID.fromString("117cc307-5bd4-4b10-9b2f-2e14051b3b20");\r
+ TermVocabulary voc = getVocabularyService().find(uuidExtensionTypeVoc);\r
+ voc.addTerm(extensionType);\r
getTermService().save(extensionType);\r
}\r
state.putExtensionType(extensionType);\r
}\r
\r
protected MarkerType getMarkerType(STATE state, UUID uuid, String label, String text, String labelAbbrev){\r
+ if (uuid == null){\r
+ uuid = UUID.randomUUID();\r
+ }\r
MarkerType markerType = state.getMarkerType(uuid);\r
if (markerType == null){\r
markerType = (MarkerType)getTermService().find(uuid);\r
if (markerType == null){\r
markerType = MarkerType.NewInstance(label, text, labelAbbrev);\r
markerType.setUuid(uuid);\r
- MarkerType.COMPLETE().getVocabulary().addTerm(markerType);\r
+ UUID uuidMarkerTypeVoc = UUID.fromString("19dffff7-e142-429c-a420-5d28e4ebe305");\r
+ TermVocabulary voc = getVocabularyService().find(uuidMarkerTypeVoc);\r
+ voc.addTerm(markerType);\r
getTermService().save(markerType);\r
}\r
state.putMarkerType(markerType);\r
}\r
\r
protected AnnotationType getAnnotationType(STATE state, UUID uuid, String label, String text, String labelAbbrev){\r
+ if (uuid == null){\r
+ uuid = UUID.randomUUID();\r
+ }\r
AnnotationType annotationType = state.getAnnotationType(uuid);\r
if (annotationType == null){\r
annotationType = (AnnotationType)getTermService().find(uuid);\r
if (annotationType == null){\r
annotationType = AnnotationType.NewInstance(label, text, labelAbbrev);\r
annotationType.setUuid(uuid);\r
- AnnotationType.EDITORIAL().getVocabulary().addTerm(annotationType);\r
+ UUID uuidAnnotationTypeVoc = UUID.fromString("ca04609b-1ba0-4d31-9c2e-aa8eb2f4e62d");\r
+ TermVocabulary voc = getVocabularyService().find(uuidAnnotationTypeVoc);\r
+ voc.addTerm(annotationType);\r
getTermService().save(annotationType);\r
}\r
state.putAnnotationType(annotationType);\r
return annotationType;\r
}\r
\r
+ public static final UUID uuidUserDefinedNamedAreaVocabulary = UUID.fromString("b2238399-a3af-4f6d-b7eb-ff5d0899bf1b");\r
/**\r
* Returns a named area for a given uuid by first . If the named area does not\r
* @param state\r
* @return\r
*/\r
protected NamedArea getNamedArea(STATE state, UUID uuid, String label, String text, String labelAbbrev, NamedAreaType areaType, NamedAreaLevel level){\r
+ return getNamedArea(state, uuid, label, text, labelAbbrev, areaType, level, null);\r
+ }\r
+\r
+ protected NamedArea getNamedArea(STATE state, UUID uuid, String label, String text, String labelAbbrev, NamedAreaType areaType, NamedAreaLevel level, TermVocabulary voc){\r
+ if (uuid == null){\r
+ uuid = UUID.randomUUID();\r
+ }\r
NamedArea namedArea = state.getNamedArea(uuid);\r
if (namedArea == null){\r
namedArea = (NamedArea)getTermService().find(uuid);\r
if (namedArea == null){\r
namedArea = NamedArea.NewInstance(text, label, labelAbbrev);\r
+ if (voc == null){\r
+ voc = getVocabulary(uuidUserDefinedNamedAreaVocabulary, "User defined vocabulary for named areas", "User Defined Named Areas", null);\r
+ }\r
+ voc.addTerm(namedArea);\r
namedArea.setType(areaType);\r
namedArea.setLevel(level);\r
namedArea.setUuid(uuid);\r
}\r
return feature;\r
}\r
+ \r
+ /**\r
+ * Returns a presence term for a given uuid by first ...\r
+ * @param state\r
+ * @param uuid\r
+ * @param label\r
+ * @param text\r
+ * @param labelAbbrev\r
+ * @return\r
+ */\r
+ protected PresenceTerm getPresenceTerm(STATE state, UUID uuid, String label, String text, String labelAbbrev){\r
+ if (uuid == null){\r
+ return null;\r
+ }\r
+ PresenceTerm presenceTerm = state.getPresenceTerm(uuid);\r
+ if (presenceTerm == null){\r
+ presenceTerm = (PresenceTerm)getTermService().find(uuid);\r
+ if (presenceTerm == null){\r
+ presenceTerm = PresenceTerm.NewInstance(text, label, labelAbbrev);\r
+ presenceTerm.setUuid(uuid);\r
+ //set vocabulary ; FIXME use another user-defined vocabulary\r
+ UUID uuidPresenceVoc = UUID.fromString("adbbbe15-c4d3-47b7-80a8-c7d104e53a05"); \r
+ TermVocabulary<PresenceTerm> voc = getVocabularyService().find(uuidPresenceVoc);\r
+ voc.addTerm(presenceTerm);\r
+ getTermService().save(presenceTerm);\r
+ }\r
+ state.putPresenceTerm(presenceTerm);\r
+ }\r
+ return presenceTerm;\r
+ }\r
\r
/**\r
* Returns a language for a given uuid by first ...\r
return language;\r
}\r
\r
+\r
+ /**\r
+ * @param uuid \r
+ * @return\r
+ * \r
+ */\r
+ protected TermVocabulary getVocabulary(UUID uuid, String text, String label, String abbrev) {\r
+ TermVocabulary voc = getVocabularyService().find(uuid);\r
+ if (voc == null){\r
+ voc = TermVocabulary.NewInstance(text, label, abbrev, null);\r
+ voc.setUuid(uuid);\r
+ getVocabularyService().save(voc);\r
+ }\r
+ return voc;\r
+ }\r
+ \r
/**\r
* Adds an orginal source to a sourceable objects (implemented for Identifiable entity and description element.\r
* If cdmBase is not sourceable nothing happens.\r
* @param citation\r
* @throws SQLException\r
*/\r
- public void addOriginalSource(CdmBase cdmBase, Object idAttributeValue, String namespace, Reference citation) throws SQLException {\r
+ public void addOriginalSource(CdmBase cdmBase, Object idAttributeValue, String namespace, Reference citation) {\r
if (cdmBase instanceof ISourceable ){\r
IOriginalSource source;\r
ISourceable sourceable = (ISourceable)cdmBase;\r
return;\r
}\r
sourceable.addSource(source);\r
+ }else if (cdmBase != null){\r
+ logger.warn("Sourced object does not implement ISourceable: " + cdmBase.getClass() + "," + cdmBase.getUuid());\r
+ }else{\r
+ logger.warn("Sourced object is null");\r
}\r
}\r
\r
return result;\r
}\r
\r
+ \r
+ /**\r
+ * Returns the accepted taxon of a {@link TaxonBase taxon base}. <BR>\r
+ * If taxonBase is of type taxon the same object is returned. If taxonBase is of type\r
+ * synonym the accepted taxon is returned if one exists. If no accepted taxon exists\r
+ * <code>null</code> is returned. If multiple accepted taxa exist the one taxon with the \r
+ * same secundum reference is returned. If no such single taxon exists an \r
+ * {@link IllegalStateException illegal state exception} is thrown. \r
+ * @param taxonBase\r
+ * @return\r
+ */\r
+ protected Taxon getAcceptedTaxon(TaxonBase<?> taxonBase) {\r
+ if (taxonBase == null){\r
+ return null;\r
+ }else if(taxonBase.isInstanceOf(Taxon.class)){\r
+ return CdmBase.deproxy(taxonBase, Taxon.class);\r
+ }else if(taxonBase.isInstanceOf(Synonym.class)){\r
+ Synonym synonym = CdmBase.deproxy(taxonBase, Synonym.class);\r
+ Set<Taxon> acceptedTaxa = synonym.getAcceptedTaxa();\r
+ if (acceptedTaxa.size() == 0){\r
+ return null;\r
+ }else if (acceptedTaxa.size() == 1){\r
+ return acceptedTaxa.iterator().next();\r
+ }else{\r
+ Reference sec = synonym.getSec();\r
+ if (sec != null){\r
+ Set<Taxon> taxaWithSameSec = new HashSet<Taxon>();\r
+ for (Taxon taxon: acceptedTaxa){\r
+ if (sec.equals(taxon.getSec())){\r
+ taxaWithSameSec.add(taxon);\r
+ }\r
+ }\r
+ if (taxaWithSameSec.size() == 1){\r
+ return taxaWithSameSec.iterator().next();\r
+ }\r
+ }\r
+ throw new IllegalStateException("Can't define the one accepted taxon for a synonym out of multiple accept taxa");\r
+ }\r
+ }else{\r
+ throw new IllegalStateException("Unknown TaxonBase subclass: " + taxonBase.getClass().getName());\r
+ }\r
+ }\r
+\r
+ \r
\r
/**\r
* @param derivedUnitFacade\r