/**\r
- * \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
+\r
package eu.etaxonomy.cdm.io.common;\r
\r
import java.lang.reflect.InvocationTargetException;\r
import java.lang.reflect.Method;\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
-import java.util.Calendar;\r
+import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
import org.jdom.Element;\r
import org.jdom.Namespace;\r
-import org.joda.time.DateTime;\r
\r
import eu.etaxonomy.cdm.common.CdmUtils;\r
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;\r
import eu.etaxonomy.cdm.model.common.Annotation;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.ISourceable;\r
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
+import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
import eu.etaxonomy.cdm.model.common.Language;\r
-import eu.etaxonomy.cdm.model.common.OriginalSource;\r
import eu.etaxonomy.cdm.model.common.TimePeriod;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
/**\r
* @param sourceId\r
* @return\r
*/\r
- public static boolean setOriginalSource(IdentifiableEntity idEntity, ReferenceBase sourceReference, String sourceId, String namespace){\r
- OriginalSource originalSource = new OriginalSource();\r
- originalSource.setIdInSource(sourceId);\r
- originalSource.setCitation(sourceReference);\r
- originalSource.setIdNamespace(namespace);\r
+ public static boolean setOriginalSource(ISourceable idEntity, ReferenceBase sourceReference, String sourceId, String namespace){\r
+ IdentifiableSource originalSource = IdentifiableSource.NewInstance(sourceId, namespace, sourceReference, null);\r
idEntity.addSource(originalSource);\r
return true;\r
}\r
return true;\r
}\r
}\r
+ \r
+ }\r
+\r
+ private static boolean valuesAreNull(List<Object> values){\r
+ for (Object sourceValue : values.toArray()){\r
+ if (sourceValue != null){\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ \r
+ public static boolean addMultipleValues(List<Object> sourceValues, CdmBase cdmBase, String cdmAttrName, List<Class> classes, boolean overwriteNull, boolean obligat){\r
+ String methodName;\r
+// Object strValue;\r
+ try {\r
+ \r
+ if (overwriteNull == NO_OVERWRITE && valuesAreNull(sourceValues)){\r
+ if (logger.isDebugEnabled()) { logger.debug("no overwrite for NULL-value");}\r
+ return true;\r
+ }\r
+ if (logger.isDebugEnabled()) { logger.debug("addValues: " + sourceValues.toString());}\r
+ \r
+ \r
+ if (cdmAttrName == null || cdmAttrName.length() < 1 ){\r
+ throw new IllegalArgumentException("CdmAttributeName should have atleast 1 character");\r
+ }\r
+ methodName = "add" + cdmAttrName.substring(0, 1).toUpperCase() + cdmAttrName.substring(1) ;\r
+ \r
+ Class[] classArray = classes.toArray(new Class[0]);\r
+ Method cdmMethod = cdmBase.getClass().getMethod(methodName, classArray);\r
+ cdmMethod.invoke(cdmBase, sourceValues.toArray());\r
+ return true;\r
+ } catch (NullPointerException e) {\r
+ logger.error("NullPointerException: " + e.getMessage());\r
+ return false;\r
+ } catch (IllegalArgumentException e) {\r
+ logger.error("IllegalArgumentException: " + e.getMessage());\r
+ return false;\r
+ } catch (IllegalAccessException e) {\r
+ logger.error("IllegalAccessException: " + e.getMessage());\r
+ return false;\r
+ } catch (InvocationTargetException e) {\r
+ logger.error("InvocationTargetException: " + e.getMessage());\r
+ return false;\r
+ }catch (SecurityException e) {\r
+ logger.error("SecurityException: " + e.getMessage());\r
+ return false;\r
+ } catch (NoSuchMethodException e) {\r
+ if (obligat){\r
+ logger.error("NoSuchMethod: " + e.getMessage());\r
+ return false;\r
+ }else{\r
+ if (logger.isDebugEnabled()){ logger.debug("NoSuchMethod: " + e.getMessage());}\r
+ return true;\r
+ }\r
+ }\r
+ \r
}\r
\r
public static boolean addAnnotationFromResultSet(ResultSet rs, String attributeName, AnnotatableEntity cdmBase, Language language){\r
\r
\r
public static TimePeriod getDatePublished(String refYear){\r
- //FIXME until now only quick and dirty and wrong\r
- if (refYear == null){\r
- return null;\r
- }\r
- String[] years = refYear.split("-");\r
- DateTime dtStart = null;\r
- DateTime dtEnd = null;\r
- \r
- if (years.length > 2 || years.length <= 0){\r
- logger.warn("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX getDatePublished");\r
- }else {\r
- dtStart = parseSingleDate(years[0]);\r
- \r
- if (years.length >= 2){\r
- dtEnd = parseSingleDate(years[1]);\r
- }\r
+ TimePeriod resultNew;\r
+ try {\r
+ resultNew = TimePeriod.parseString(refYear);\r
+ } catch (IllegalArgumentException e) {\r
+ logger.warn("RefYear could not be parsed: " + refYear);\r
+ resultNew = null;\r
}\r
- TimePeriod result = TimePeriod.NewInstance(dtStart, dtEnd);\r
- return result;\r
+ return resultNew;\r
}\r
+\r
+ //************** EXPORT *******************/\r
+ \r
\r
- private static DateTime parseSingleDate(String singleDateString){\r
- //FIXME until now only quick and dirty and wrong\r
- DateTime dt = new DateTime(9999, 12, 30, 0,0,0,0);\r
- if (CdmUtils.isNumeric(singleDateString)){\r
- try {\r
- Integer year = Integer.valueOf(singleDateString.trim());\r
- if (year > 1750 && year < 2050){\r
- dt = dt.withYear(year);\r
+ public static<T extends Object> T getValue(CdmBase cdmBase, String cdmAttrName, boolean isBoolean, boolean obligatory){\r
+ String methodName;\r
+ T result;\r
+ try {\r
+ if (isBoolean){\r
+ if (cdmAttrName == null || cdmAttrName.length() < 3 || !( cdmAttrName.startsWith("is") || cdmAttrName.startsWith("use")) ){\r
+ throw new IllegalArgumentException("boolean CdmAttributeName should have atleast 3 characters and start with 'is' or 'use': " + cdmAttrName);\r
}\r
- } catch (NumberFormatException e) {\r
- logger.debug("Not a Integer format in getCalendar()");\r
+ methodName = cdmAttrName ;\r
+ }else {\r
+ if (cdmAttrName == null || cdmAttrName.length() < 1 ){\r
+ throw new IllegalArgumentException("CdmAttributeName should have atleast 1 character");\r
+ }\r
+ methodName = "get" + cdmAttrName.substring(0, 1).toUpperCase() + cdmAttrName.substring(1) ;\r
+ }\r
+// else{\r
+// logger.error("Class not supported: " + clazz.toString());\r
+// return null;\r
+// }\r
+ Method cdmMethod = cdmBase.getClass().getMethod(methodName);\r
+ result = (T)cdmMethod.invoke(cdmBase);\r
+ return result;\r
+ } catch (NullPointerException e) {\r
+ logger.error("NullPointerException: " + e.getMessage());\r
+ return null;\r
+ } catch (IllegalArgumentException e) {\r
+ logger.error("IllegalArgumentException: " + e.getMessage());\r
+ return null;\r
+ } catch (IllegalAccessException e) {\r
+ logger.error("IllegalAccessException: " + e.getMessage());\r
+ return null;\r
+ } catch (InvocationTargetException e) {\r
+ logger.error("InvocationTargetException: " + e.getMessage());\r
+ return null;\r
+ }catch (SecurityException e) {\r
+ logger.error("SecurityException: " + e.getMessage());\r
+ return null;\r
+ } catch (NoSuchMethodException e) {\r
+ if (obligatory){\r
+ logger.error("NoSuchMethod: " + e.getMessage());\r
+ return null;\r
+ }else{\r
+ if (logger.isDebugEnabled()){ logger.debug("NoSuchMethod: " + e.getMessage());}\r
+ return null;\r
}\r
}\r
- return dt;\r
-\r
+ \r
}\r
\r
\r
+ \r
+ \r
+ \r
//******* old *****************\r
\r
// private static Calendar getCalendar(String strYear){\r