--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.io.pesi.out;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
+import eu.etaxonomy.cdm.model.reference.ISectionBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceType;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @author e.-m.lee\r
+ * @date 16.02.2010\r
+ *\r
+ */\r
+public final class PesiTransformer {\r
+ private static final Logger logger = Logger.getLogger(PesiTransformer.class);\r
+\r
+ // References\r
+ public static int REF_ARTICLE_IN_PERIODICAL = 1;\r
+ public static int REF_PART_OF_OTHER = 2;\r
+ public static int REF_BOOK = 3;\r
+ public static int REF_DATABASE = 4;\r
+ public static int REF_INFORMAL = 5;\r
+ public static int REF_NOT_APPLICABLE = 6;\r
+ public static int REF_WEBSITE = 7;\r
+ public static int REF_PUBLISHED = 8;\r
+ public static int REF_JOURNAL = 9;\r
+ public static int REF_UNRESOLVED = 10;\r
+ public static int REF_PUBLICATION = 11;\r
+\r
+ public static String REF_STR_ARTICLE_IN_PERIODICAL = "Article in periodical";\r
+ public static String REF_STR_PART_OF_OTHER = "Part of other";\r
+ public static String REF_STR_BOOK = "Book";\r
+ public static String REF_STR_DATABASE = "Database";\r
+ public static String REF_STR_INFORMAL = "Informal";\r
+ public static String REF_STR_NOT_APPLICABLE = "Not applicable";\r
+ public static String REF_STR_WEBSITE = "Website";\r
+ public static String REF_STR_PUBLISHED = "Published";\r
+ public static String REF_STR_JOURNAL = "Journal";\r
+ public static String REF_STR_UNRESOLVED = "Unresolved";\r
+ public static String REF_STR_PUBLICATION = "Publication";\r
+ \r
+ // Ranks\r
+// public static int RANK_KINGDOM = 10; x\r
+// public static int RANK_SUBKINGDOM = 20;\r
+// public static int RANK_SUPERPHYLUM = 23;\r
+// public static int RANK_PHYLUM = 30;\r
+// public static int RANK_SUBPHYLUM = 40;\r
+// public static int RANK_INFRAPHYLUM = 45;\r
+// public static int RANK_SUPERCLASS = 50;\r
+// public static int RANK_CLASS = 60;\r
+// public static int RANK_SUBCLASS = 70;\r
+// public static int RANK_INFRACLASS = 80;\r
+// public static int RANK_SUPERORDER = 90;\r
+// public static int RANK_ORDER = 100;\r
+// public static int RANK_SUBORDER = 110;\r
+// public static int RANK_INFRAORDER = 120;\r
+// public static int RANK_SECTION = 121;\r
+// public static int RANK_SUBSECTION = 122;\r
+// public static int RANK_SUPERFAMILY = 130;\r
+// public static int RANK_FAMILY = 140;\r
+// public static int RANK_SUBFAMILY = 150;\r
+// public static int RANK_TRIBE = 160;\r
+// public static int RANK_SUBTRIBE = 170;\r
+// public static int RANK_GENUS = 180;\r
+// public static int RANK_SUBGENUS = 190;\r
+// public static int RANK_SPECIES = 220;\r
+// public static int RANK_SUBSPECIES = 230;\r
+// public static int RANK_NATIO = 235;\r
+// public static int RANK_VARIETY = 240;\r
+// public static int RANK_SUBVARIETY = 250;\r
+// public static int RANK_FORMA = 260;\r
+\r
+ // Kingdoms\r
+ public static int KINGDOM_NULL = 0;\r
+ public static int KINGDOM_ANIMALIA = 2;\r
+ public static int KINGDOM_PLANTAE = 3;\r
+ public static int KINGDOM_FUNGI = 4;\r
+ public static int KINGDOM_PROTOCTISTA = 5;\r
+ public static int KINGDOM_MONERA = 6;\r
+\r
+ // RelTaxonQualifier\r
+ public static int IS_BASIONYM_FOR = 1;\r
+ public static int IS_LATER_HOMONYM_OF = 2;\r
+ public static int IS_REPLACED_SYNONYM_FOR = 3;\r
+ public static int IS_VALIDATION_OF = 4;\r
+ public static int IS_LATER_VALIDATION_OF = 5;\r
+ public static int IS_TYPE_OF = 6;\r
+ public static int IS_CONSERVED_TYPE_OF = 7;\r
+ public static int IS_REJECTED_TYPE_OF = 8;\r
+ public static int IS_FIRST_PARENT_OF = 9;\r
+ public static int IS_SECOND_PARENT_OF = 10;\r
+ public static int IS_FEMALE_PARENT_OF = 11;\r
+ public static int IS_MALE_PARENT_OF = 12;\r
+ public static int IS_CONSERVED_AGAINST = 13;\r
+ public static int IS_REJECTED_IN_FAVOUR_OF = 14;\r
+ public static int IS_TREATED_AS_LATER_HOMONYM_OF = 15;\r
+ public static int IS_ORTHOGRAPHIC_VARIANT_OF = 16;\r
+ public static int IS_ALTERNATIVE_NAME_FOR = 17;\r
+ public static int HAS_SAME_TYPE_AS = 18;\r
+ public static int IS_LECTOTYPE_OF = 61;\r
+ public static int TYPE_NOT_DESIGNATED = 62;\r
+ public static int IS_TAXONOMICALLY_INCLUDED_IN = 101;\r
+ public static int IS_SYNONYM_OF = 102;\r
+ public static int IS_MISAPPLIED_NAME_FOR = 103;\r
+ public static int IS_PRO_PARTE_SYNONYM_OF = 104;\r
+ public static int IS_PARTIAL_SYNONYM_OF = 105;\r
+ public static int IS_HETEROTYPIC_SYNONYM_OF = 106;\r
+ public static int IS_HOMOTYPIC_SYNONYM_OF = 107;\r
+ public static int IS_PRO_PARTE_AND_HOMOTYPIC_SYNONYM_OF = 201;\r
+ public static int IS_PRO_PARTE_AND_HETEROTYPIC_SYNONYM_OF = 202;\r
+ public static int IS_PARTIAL_AND_HOMOTYPIC_SYNONYM_OF = 203;\r
+ public static int IS_PARTIAL_AND_HETEROTYPIC_SYNONYM_OF = 204;\r
+\r
+ /**\r
+ * Returns the {@link SourceCategory SourceCategory} representation of the given {@link ReferenceType ReferenceType} in PESI.\r
+ * @param reference The {@link ReferenceBase ReferenceBase}.\r
+ * @return The {@link SourceCategory SourceCategory} representation in PESI.\r
+ */\r
+ public static Integer reference2SourceCategoryFK(ReferenceBase<?> reference) {\r
+ if (reference == null){\r
+ return null;\r
+ } else if (reference.getType().equals(ReferenceType.Article)) {\r
+ return REF_ARTICLE_IN_PERIODICAL;\r
+ } else if (reference instanceof ISectionBase) {\r
+ return REF_PART_OF_OTHER;\r
+ } else if (reference.getType().equals(ReferenceType.Book)) {\r
+ return REF_BOOK;\r
+ } else if (reference.getType().equals(ReferenceType.Database)) {\r
+ return REF_DATABASE;\r
+ } else if (reference.getType().equals(ReferenceType.WebPage)) {\r
+ return REF_WEBSITE;\r
+ } else if (reference.getType().equals(ReferenceType.CdDvd)) {\r
+ return REF_NOT_APPLICABLE;\r
+ } else if (reference.getType().equals(ReferenceType.Journal)) {\r
+ return REF_JOURNAL;\r
+ } else if (reference.getType().equals(ReferenceType.Generic)) {\r
+ return REF_UNRESOLVED;\r
+ } else if (reference.getType().equals(ReferenceType.PrintSeries)) {\r
+ return REF_PUBLISHED;\r
+ } else if (reference.getType().equals(ReferenceType.Proceedings)) {\r
+ return REF_PUBLISHED;\r
+ } else if (reference.getType().equals(ReferenceType.Patent)) {\r
+ return REF_NOT_APPLICABLE;\r
+ } else if (reference.getType().equals(ReferenceType.PersonalCommunication)) {\r
+ return REF_INFORMAL;\r
+ } else if (reference.getType().equals(ReferenceType.Report)) {\r
+ return REF_NOT_APPLICABLE;\r
+ } else if (reference.getType().equals(ReferenceType.Thesis)) {\r
+ return REF_NOT_APPLICABLE;\r
+ } else {\r
+ //TODO Figure out a way to handle this gracefully.\r
+ logger.warn("Reference type not yet supported in PESI: "+ reference.getClass().getSimpleName());\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * Returns the {@link SourceCategoryCache SourceCategoryCache}.\r
+ * @param reference The {@link ReferenceBase ReferenceBase}.\r
+ * @return The {@link SourceCategoryCache SourceCategoryCache}.\r
+ */\r
+ public static String getSourceCategoryCache(ReferenceBase<?> reference) {\r
+ if (reference == null){\r
+ return null;\r
+ } else if (reference.getType().equals(ReferenceType.Article)) {\r
+ return REF_STR_ARTICLE_IN_PERIODICAL;\r
+ } else if (reference instanceof ISectionBase) {\r
+ return REF_STR_PART_OF_OTHER;\r
+ } else if (reference.getType().equals(ReferenceType.Book)) {\r
+ return REF_STR_BOOK;\r
+ } else if (reference.getType().equals(ReferenceType.Database)) {\r
+ return REF_STR_DATABASE;\r
+ } else if (reference.getType().equals(ReferenceType.WebPage)) {\r
+ return REF_STR_WEBSITE;\r
+ } else if (reference.getType().equals(ReferenceType.CdDvd)) {\r
+ return REF_STR_NOT_APPLICABLE;\r
+ } else if (reference.getType().equals(ReferenceType.Journal)) {\r
+ return REF_STR_JOURNAL;\r
+ } else if (reference.getType().equals(ReferenceType.Generic)) {\r
+ return REF_STR_UNRESOLVED;\r
+ } else if (reference.getType().equals(ReferenceType.PrintSeries)) {\r
+ return REF_STR_PUBLISHED;\r
+ } else if (reference.getType().equals(ReferenceType.Proceedings)) {\r
+ return REF_STR_PUBLISHED;\r
+ } else if (reference.getType().equals(ReferenceType.Patent)) {\r
+ return REF_STR_NOT_APPLICABLE;\r
+ } else if (reference.getType().equals(ReferenceType.PersonalCommunication)) {\r
+ return REF_STR_INFORMAL;\r
+ } else if (reference.getType().equals(ReferenceType.Report)) {\r
+ return REF_STR_NOT_APPLICABLE;\r
+ } else if (reference.getType().equals(ReferenceType.Thesis)) {\r
+ return REF_STR_NOT_APPLICABLE;\r
+ } else {\r
+ //TODO Figure out a way to handle this gracefully.\r
+ logger.warn("Reference type not yet supported in PESI: "+ reference.getClass().getSimpleName());\r
+ return null;\r
+ }\r
+ }\r
+ \r
+// public static Integer rank2RankId(Rank rank) {\r
+// if (rank == null){\r
+// return null;\r
+// }\r
+// else if (rank.equals(Rank.KINGDOM())) {\r
+// return RANK_KINGDOM;\r
+// } else if (rank.equals(Rank.SUBKINGDOM())) {\r
+// return RANK_SUBKINGDOM;\r
+// } else if (rank.equals(Rank.SUPERPHYLUM())) {\r
+// return RANK_SUPERPHYLUM;\r
+// } else if (rank.equals(Rank.PHYLUM())) {\r
+// return RANK_PHYLUM;\r
+// } else if (rank.equals(Rank.SUBPHYLUM())) {\r
+// return RANK_SUBPHYLUM;\r
+// } else if (rank.equals(Rank.INFRAPHYLUM())) {\r
+// return RANK_INFRAPHYLUM;\r
+// } else if (rank.equals(Rank.SUPERCLASS())) {\r
+// return RANK_SUPERCLASS;\r
+// } else if (rank.equals(Rank.CLASS())) {\r
+// return RANK_CLASS;\r
+// } else if (rank.equals(Rank.SUBCLASS())) {\r
+// return RANK_SUBCLASS;\r
+// } else if (rank.equals(Rank.INFRACLASS())) {\r
+// return RANK_INFRACLASS;\r
+// } else if (rank.equals(Rank.SUPERORDER())) {\r
+// return RANK_SUPERORDER;\r
+// } else if (rank.equals(Rank.ORDER())) {\r
+// return RANK_ORDER;\r
+// } else if (rank.equals(Rank.SUBORDER())) {\r
+// return RANK_SUBORDER;\r
+// } else if (rank.equals(Rank.INFRAORDER())) {\r
+// return RANK_INFRAORDER;\r
+// } else if (rank.equals(Rank.secti)) {\r
+// return RANK_;\r
+// }\r
+// \r
+// public static int RANK_SECTION = 121;\r
+// public static int RANK_SUBSECTION = 122;\r
+// public static int RANK_SUPERFAMILY = 130;\r
+// public static int RANK_FAMILY = 140;\r
+// public static int RANK_SUBFAMILY = 150;\r
+// public static int RANK_TRIBE = 160;\r
+// public static int RANK_SUBTRIBE = 170;\r
+// public static int RANK_GENUS = 180;\r
+// public static int RANK_SUBGENUS = 190;\r
+// public static int RANK_SPECIES = 220;\r
+// public static int RANK_SUBSPECIES = 230;\r
+// public static int RANK_NATIO = 235;\r
+// public static int RANK_VARIETY = 240;\r
+// public static int RANK_SUBVARIETY = 250;\r
+// public static int RANK_FORMA = 260;\r
+// }\r
+ \r
+ public static Integer taxRelation2RelTaxonQualifierFk (RelationshipBase<?,?,?> relationship){\r
+// if (relationship == null) {\r
+// return null;\r
+// } else {\r
+// if ((relationship.getType()).equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {\r
+// return TAX_REL_IS_INCLUDED_IN;\r
+// }\r
+// }\r
+ return null;\r
+ }\r
+}\r