ref #8162 adapt cdmlip to new term package structure
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / hibernate / EnumUserType.java
index 92683b8f51396435d006d273821eabda64214491..d714932792c5219e46672c8e18ede148ef42661d 100644 (file)
@@ -1,8 +1,8 @@
 /**\r
 * Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \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
@@ -24,34 +24,38 @@ import org.hibernate.usertype.ParameterizedType;
 import org.hibernate.usertype.UserType;\r
 import org.jadira.usertype.dateandtime.shared.spi.AbstractUserType;\r
 \r
-import eu.etaxonomy.cdm.model.common.IKeyTerm;\r
 import eu.etaxonomy.cdm.model.common.OriginalSourceType;\r
-import eu.etaxonomy.cdm.model.common.TermType;\r
+import eu.etaxonomy.cdm.model.media.ExternalLinkType;\r
+import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName;\r
 import eu.etaxonomy.cdm.model.molecular.SequenceDirection;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
 import eu.etaxonomy.cdm.model.name.RankClass;\r
+import eu.etaxonomy.cdm.model.name.RegistrationStatus;\r
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\r
+import eu.etaxonomy.cdm.model.reference.AuthorityType;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceType;\r
+import eu.etaxonomy.cdm.model.term.IKeyTerm;\r
+import eu.etaxonomy.cdm.model.term.TermType;\r
 \r
 /**\r
  * User type for IEnumTerm\r
  * Partly copied from http://stackoverflow.com/questions/9839553/hibernate-map-enum-to-varchar\r
  * @author a.mueller\r
- * @created 15-07-2013\r
+ * @since 15-07-2013\r
  */\r
 public class EnumUserType<E extends Enum<E>>  extends AbstractUserType implements UserType, ParameterizedType {\r
        private static final long serialVersionUID = 4641078915907621907L;\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(EnumUserType.class);\r
-    \r
-       private Class<E> clazz = null; \r
-    \r
-       public EnumUserType(){};\r
-       \r
-    public EnumUserType(Class<E> c) { \r
-       this.clazz = c; \r
-    } \r
-       \r
+\r
+       private Class<E> clazz = null;\r
+\r
+       public EnumUserType(){}\r
+\r
+    public EnumUserType(Class<E> c) {\r
+       this.clazz = c;\r
+    }\r
+\r
 \r
        @Override\r
        @SuppressWarnings("unchecked")\r
@@ -62,7 +66,7 @@ public class EnumUserType<E extends Enum<E>>  extends AbstractUserType implement
                        throw new RuntimeException(e);\r
                }\r
        }\r
-    \r
+\r
        private static final int[] SQL_TYPES = { Types.VARCHAR };\r
 \r
 \r
@@ -77,46 +81,67 @@ public class EnumUserType<E extends Enum<E>>  extends AbstractUserType implement
        }\r
 \r
        @Override\r
-       public IKeyTerm nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) \r
+       public IKeyTerm nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)\r
                        throws HibernateException, SQLException {\r
         String val = (String) StandardBasicTypes.STRING.nullSafeGet(rs, names, session, owner);\r
-               \r
+\r
                if(val == null) {\r
                        return null;\r
                } else {\r
-                       // TermType\r
-                       if (clazz.equals(TermType.class)){\r
-                               return TermType.getByKey(val);\r
-                       //Reference Type\r
-                       }else if (clazz.equals(ReferenceType.class)){\r
-                                       return ReferenceType.getByKey(val);\r
-                       //OriginalSourceType\r
-                       }else if (clazz.equals(OriginalSourceType.class)){\r
-                               return OriginalSourceType.getByKey(val);\r
-                       //NomenclaturalCode\r
-                       }else if (clazz.equals(NomenclaturalCode.class)){\r
-                               return NomenclaturalCode.getByKey(val);\r
-                       //RankClass\r
-                       }else if (clazz.equals(RankClass.class)){\r
-                               return RankClass.getByKey(val);\r
-                       //SpecimenOrObservationType\r
-                       }else if (clazz.equals(SpecimenOrObservationType.class)){\r
-                               return SpecimenOrObservationType.getByKey(val);\r
-                       //SequenceDirection\r
-                       }else if (clazz.equals(SequenceDirection.class)){\r
-                               return SequenceDirection.getByKey(val);\r
-                       }else{\r
-                       throw new IllegalArgumentException(String.format("EnumType %s not supported by %s.", clazz.getSimpleName(), EnumUserType.class.getSimpleName()));\r
-               }\r
+\r
+                   return getTerm(clazz, val);\r
                }\r
        }\r
 \r
+    /**\r
+     * @param val\r
+     * @return\r
+     */\r
+    public static <E extends Enum<E>> IKeyTerm getTerm(Class<E> clazz, String val) {\r
+        // TermType\r
+        if (clazz.equals(TermType.class)){\r
+               return TermType.getByKey(val);\r
+        //Reference Type\r
+        }else if (clazz.equals(ReferenceType.class)){\r
+                       return ReferenceType.getByKey(val);\r
+        //OriginalSourceType\r
+        }else if (clazz.equals(OriginalSourceType.class)){\r
+               return OriginalSourceType.getByKey(val);\r
+        //NomenclaturalCode\r
+        }else if (clazz.equals(NomenclaturalCode.class)){\r
+               return NomenclaturalCode.getByKey(val);\r
+        //RankClass\r
+        }else if (clazz.equals(RankClass.class)){\r
+               return RankClass.getByKey(val);\r
+        //SpecimenOrObservationType\r
+        }else if (clazz.equals(SpecimenOrObservationType.class)){\r
+               return SpecimenOrObservationType.getByKey(val);\r
+        //SequenceDirection\r
+        }else if (clazz.equals(SequenceDirection.class)){\r
+               return SequenceDirection.getByKey(val);\r
+        //RegistrationStatus\r
+        }else if (clazz.equals(RegistrationStatus.class)){\r
+            return RegistrationStatus.getByKey(val);\r
+        //CdmMetaDataPropertyName\r
+        }else if (clazz.equals(CdmMetaDataPropertyName.class)){\r
+            return CdmMetaDataPropertyName.getByKey(val);\r
+        //EntityAuthority\r
+        }else if (clazz.equals(AuthorityType.class)){\r
+            return AuthorityType.getByKey(val);\r
+        //ExternalLinkType\r
+        }else if (clazz.equals(ExternalLinkType.class)){\r
+            return ExternalLinkType.getByKey(val);\r
+        }else{\r
+               throw new IllegalArgumentException(String.format("EnumType %s not supported by %s.", clazz.getSimpleName(), EnumUserType.class.getSimpleName()));\r
+        }\r
+    }\r
+\r
        @Override\r
-       public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor session) \r
+       public void nullSafeSet(PreparedStatement statement, Object value, int index, SessionImplementor session)\r
                        throws HibernateException, SQLException {\r
-               if (value == null) { \r
+               if (value == null) {\r
             StandardBasicTypes.STRING.nullSafeSet(statement, value, index, session);\r
-        } else { \r
+        } else {\r
                IKeyTerm term = (IKeyTerm)value;\r
             StandardBasicTypes.STRING.nullSafeSet(statement, term.getKey(), index, session);\r
         }\r