cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/events/LoggingIoObserver.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmAttributeMapperBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmIoMapping.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmMapperBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/CdmSingleAttributeMapperBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbIgnoreMapper.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/DbImportAnnotationCreationMapper.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IdMapper.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/IndexCounter.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/MethodMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/out/ObjectChangeMapper.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/TermUri.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/in/ConverterBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/in/CsvStream.java -text
*/\r
@Component\r
public class BerlinModelAuthorImport extends BerlinModelImportBase {\r
+ private static final boolean BLANK_TO_NULL = true;\r
+\r
private static final Logger logger = Logger.getLogger(BerlinModelAuthorImport.class);\r
\r
public static final String NAMESPACE = "Author";\r
\r
dbAttrName = "Abbrev";\r
cdmAttrName = "nomenclaturalTitle";\r
- success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
dbAttrName = "FirstName";\r
cdmAttrName = "firstname";\r
- success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
dbAttrName = "LastName";\r
cdmAttrName = "lastname";\r
- success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
String dates = rs.getString("dates");\r
if (dates != null){\r
//Details\r
dbAttrName = "details";\r
cdmAttrName = "citationMicroReference";\r
- success &= ImportHelper.addStringValue(rs, nomStatus, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, nomStatus, dbAttrName, cdmAttrName, true);\r
\r
//doubtful\r
if (doubtful){\r
*/\r
@Component\r
public class BerlinModelTaxonNameImport extends BerlinModelImportBase {\r
+ private static final boolean BLANK_TO_NULL = true;\r
+\r
private static final Logger logger = Logger.getLogger(BerlinModelTaxonNameImport.class);\r
\r
public static final String NAMESPACE = "TaxonName";\r
dbAttrName = "genus";\r
}\r
cdmAttrName = "genusOrUninomial";\r
- success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
dbAttrName = "genusSubdivisionEpi";\r
cdmAttrName = "infraGenericEpithet";\r
- success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
dbAttrName = "speciesEpi";\r
cdmAttrName = "specificEpithet";\r
- success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
\r
dbAttrName = "infraSpeciesEpi";\r
cdmAttrName = "infraSpecificEpithet";\r
- success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
dbAttrName = "unnamedNamePhrase";\r
cdmAttrName = "appendedPhrase";\r
- success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
//Details\r
dbAttrName = "details";\r
cdmAttrName = "nomenclaturalMicroReference";\r
- success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);\r
\r
//nomRef\r
success &= makeNomenclaturalReference(config, taxonNameBase, nameId, rs, partitioner);\r
success = handleNameRelationship(success, config, name1Id, name2Id,\r
relQualifierFk, notes, nameFrom, nameTo, citation,\r
microcitation, rule);\r
+ nameFrom.setTitleCache(null);\r
+ nameTo.setTitleCache(null);\r
+ nameFrom.getTitleCache();\r
+ nameTo.getTitleCache();\r
nameToSave.add(nameFrom);\r
\r
//TODO\r
\r
dbAttrName = "RealName";\r
cdmAttrName = "TitleCache";\r
- success &= ImportHelper.addStringValue(rs, person, dbAttrName, cdmAttrName);\r
+ success &= ImportHelper.addStringValue(rs, person, dbAttrName, cdmAttrName, false);\r
\r
\r
userMap.put(username, user);\r
return true;\r
}\r
\r
- public static boolean addStringValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName){\r
- return addValue(rs, cdmBase, dbAttrName, cdmAttrName, String.class, OVERWRITE);\r
+ public static boolean addStringValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName, boolean blankToNull){\r
+ return addValue(rs, cdmBase, dbAttrName, cdmAttrName, String.class, OVERWRITE, blankToNull);\r
}\r
\r
- public static boolean addStringValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName, boolean overwriteNull){\r
- return addValue(rs, cdmBase, dbAttrName, cdmAttrName, String.class, overwriteNull);\r
- }\r
+// public static boolean addStringValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName, boolean overwriteNull){\r
+// return addValue(rs, cdmBase, dbAttrName, cdmAttrName, String.class, overwriteNull);\r
+// }\r
\r
public static boolean addBooleanValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName){\r
- return addValue(rs, cdmBase, dbAttrName, cdmAttrName, boolean.class, OVERWRITE);\r
+ return addValue(rs, cdmBase, dbAttrName, cdmAttrName, boolean.class, OVERWRITE, false);\r
}\r
\r
- public static boolean addValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName, Class clazz, boolean overwriteNull){\r
+ public static boolean addValue(ResultSet rs, CdmBase cdmBase, String dbAttrName, String cdmAttrName, Class clazz, boolean overwriteNull, boolean blankToNull){\r
Object strValue;\r
try {\r
strValue = rs.getObject(dbAttrName);\r
* @created 05.08.2008\r
* @version 1.0\r
*/\r
-public abstract class CdmAttributeMapperBase {\r
+public abstract class CdmAttributeMapperBase extends CdmMapperBase{\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(CdmAttributeMapperBase.class);\r
\r
\r
import org.apache.log4j.Logger;\r
\r
+import eu.etaxonomy.cdm.io.common.mapping.out.ObjectChangeMapper;\r
+\r
\r
\r
/**\r
private static final Logger logger = Logger.getLogger(CdmIoMapping.class);\r
\r
//protected List<CdmAttributeMapperBase> mapperList = new ArrayList<CdmAttributeMapperBase>();\r
- protected List<CdmAttributeMapperBase> mapperList = new ArrayList<CdmAttributeMapperBase>();\r
+ protected List<CdmMapperBase> mapperList = new ArrayList<CdmMapperBase>();\r
Set<String> sourceAttributes = new HashSet<String>();\r
Set<String> destinationAttributes = new HashSet<String>();\r
List<String> sourceAttributeList = new ArrayList<String>();\r
sourceAttributeList.addAll(multipleMapper.getSourceAttributes());\r
destinationAttributes.addAll(multipleMapper.getDestinationAttributes());\r
destinationAttributeList.addAll(multipleMapper.getDestinationAttributeList());\r
+ }else if (mapper instanceof ObjectChangeMapper){\r
+ ObjectChangeMapper changeMapper = (ObjectChangeMapper)mapper;\r
+ sourceAttributes.addAll(changeMapper.getSourceAttributes());\r
+ sourceAttributeList.addAll(changeMapper.getSourceAttributes());\r
+ destinationAttributes.addAll(changeMapper.getDestinationAttributes());\r
+ destinationAttributeList.addAll(changeMapper.getDestinationAttributeList());\r
+ \r
}else{\r
logger.error("Unknown mapper type: " + mapper.getClass().getSimpleName());\r
throw new IllegalArgumentException("Unknown mapper type: " + mapper.getClass().getSimpleName());\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 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.mapping;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+/**\r
+ * The most general mapper class for all cdm mappers.\r
+ * @author a.mueller\r
+ * @created 12.01.2012\r
+ */\r
+public abstract class CdmMapperBase {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(CdmMapperBase.class);\r
+ \r
+}
\ No newline at end of file
\r
import eu.etaxonomy.cdm.io.common.DbImportStateBase;\r
import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.mapping.out.DbStringMapper;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
/**\r
private boolean isInitialized = false;;\r
private Class<? extends CdmBase> destinationClass;\r
private DbImportMapping<STATE, CONFIG> secondPathMapping;\r
+ private boolean blankToNull = false;\r
\r
public DbImportMapping(){\r
// this.dbTableName = tableName;\r
if (!isInitialized){\r
// this.dbTableName = tableName;\r
this.destinationClass = destinationClass;\r
- for (CdmAttributeMapperBase mapper: this.mapperList){\r
+ for (CdmMapperBase mapper: this.mapperList){\r
if (mapper instanceof IDbImportMapper){\r
((IDbImportMapper) mapper).initialize(state, destinationClass);\r
+ }else{\r
+ logger.warn("Mapper type " + mapper.getClass().getSimpleName() + " not yet implemented for DB import mapping");\r
}\r
}\r
isInitialized = true;\r
}\r
return true;\r
}\r
+\r
+ public void addMapper(CdmAttributeMapperBase mapper){\r
+ super.addMapper(mapper);\r
+ if (mapper instanceof DbStringMapper){\r
+ ((DbStringMapper)mapper).setBlankToNull(isBlankToNull());\r
+ }\r
+ }\r
\r
/**\r
* Invokes the second path mapping if one has been defined\r
} else {\r
CdmBase objectToSave = null;\r
// try {\r
- for (CdmAttributeMapperBase mapper : this.mapperList){\r
+ for (CdmMapperBase mapper : this.mapperList){\r
if (mapper instanceof IDbImportMapper){\r
IDbImportMapper<DbImportStateBase<?,?>,CdmBase> dbMapper = (IDbImportMapper)mapper;\r
try {\r
this.secondPathMapping = secondPathMapping;\r
}\r
\r
+ /**\r
+ * If <code>true</code> all {@link DbStringMapper} map blank strings to <code>null</code>\r
+ * @return\r
+ */\r
+ public boolean isBlankToNull() {\r
+ return blankToNull;\r
+ }\r
+\r
+ /**\r
+ * @see #isBlankToNull()\r
+ * @param blankToNull\r
+ */\r
+ public void setBlankToNull(boolean blankToNull) {\r
+ this.blankToNull = blankToNull;\r
+ }\r
+\r
// /**\r
// * @return the berlinModelTableName\r
// */\r
import eu.etaxonomy.cdm.io.common.Source;\r
import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;\r
import eu.etaxonomy.cdm.io.common.mapping.CdmIoMapping;\r
+import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
/**\r
this.preparedStatement = db.getConnection().prepareStatement(strPreparedStatement);\r
index = new IndexCounter(1);\r
\r
- for (CdmAttributeMapperBase mapper : this.mapperList){\r
+ for (CdmMapperBase mapper : this.mapperList){\r
if (mapper instanceof IDbExportMapper){\r
IDbExportMapper<DbExportStateBase<?>> dbMapper = (IDbExportMapper)mapper;\r
dbMapper.initialize(preparedStatement, index, state, dbTableName);\r
public boolean invoke(CdmBase cdmBase) throws SQLException{\r
try {\r
boolean result = true;\r
- for (CdmAttributeMapperBase mapper : this.mapperList){\r
- if (mapper instanceof IDbExportMapper){\r
+ for (CdmMapperBase mapper : this.mapperList){\r
+ if (mapper instanceof ObjectChangeMapper){\r
+ ObjectChangeMapper changeMapper = (ObjectChangeMapper)mapper;\r
+ cdmBase = changeMapper.getNewObject(cdmBase);\r
+ }else if (mapper instanceof IDbExportMapper){\r
IDbExportMapper<DbExportStateBase<?>> dbMapper = (IDbExportMapper)mapper;\r
try {\r
result &= dbMapper.invoke(cdmBase);\r
e.printStackTrace();\r
continue;\r
}\r
- }else{\r
+ }else {\r
logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());\r
}\r
}\r
this.preparedStatement = preparedStatement;\r
}\r
\r
- protected List<CdmAttributeMapperBase> getAttributeMapperList(){\r
- List<CdmAttributeMapperBase> list = this.mapperList;\r
- return list;\r
- }\r
+// protected List<CdmAttributeMapperBase> getAttributeMapperList(){\r
+// List<CdmAttributeMapperBase> list = this.mapperList;\r
+// return list;\r
+// }\r
\r
\r
}\r
import eu.etaxonomy.cdm.io.common.DbExportConfiguratorBase;\r
import eu.etaxonomy.cdm.io.common.DbExportStateBase;\r
import eu.etaxonomy.cdm.io.common.ImportHelper;\r
-import eu.etaxonomy.cdm.io.common.Source;\r
-import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;\r
+import eu.etaxonomy.cdm.io.common.mapping.CdmMapperBase;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
\r
/**\r
result = false;\r
continue;\r
}\r
- for (CdmAttributeMapperBase mapper : this.mapperList){\r
+ for (CdmMapperBase mapper : this.mapperList){\r
if (mapper == this.parentMapper){\r
parentMapper.invoke(parent);\r
}else if (mapper == this.sequenceMapper){\r
\r
package eu.etaxonomy.cdm.io.common.mapping.out;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
import org.hsqldb.Types;\r
\r
private static final Logger logger = Logger.getLogger(DbStringMapper.class);\r
\r
private static final int MAX_PRECISION = -1; //precision for datatype nvarchar(max) == clob (SQL Server 2008)\r
+ private boolean blankToNull = false;\r
\r
public static DbStringMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
return new DbStringMapper(cdmAttributeString, dbAttributeString, null, true);\r
@Override\r
protected Object getValue(CdmBase cdmBase) {\r
String result = (String)super.getValue(cdmBase);\r
- if (result != null && result.length() > getPrecision() && getPrecision() != MAX_PRECISION){\r
- logger.warn("Truncation (" + result.length() + "->" + getPrecision() + ") needed for Attribute " + getDestinationAttribute() + " in " + cdmBase + "." );\r
- result = result.substring(0, getPrecision());\r
+ if (isBlankToNull() && StringUtils.isBlank(result)){\r
+ result = null;\r
+ }\r
+ if (result != null){\r
+ if (result.length() > getPrecision() && getPrecision() != MAX_PRECISION){\r
+ logger.warn("Truncation (" + result.length() + "->" + getPrecision() + ") needed for Attribute " + getDestinationAttribute() + " in " + cdmBase + "." );\r
+ result = result.substring(0, getPrecision());\r
+ }\r
}\r
return result;\r
}\r
\r
+\r
+ /**\r
+ * If <code>true</code> all {@link DbStringMapper} map blank strings to <code>null</code>\r
+ * @return\r
+ */\r
+ public boolean isBlankToNull() {\r
+ return blankToNull;\r
+ }\r
+\r
+ /**\r
+ * @see #isBlankToNull()\r
+ * @param blankToNull\r
+ */\r
+ public void setBlankToNull(boolean blankToNull) {\r
+ this.blankToNull = blankToNull;\r
+ }\r
+ \r
\r
\r
/* (non-Javadoc)\r
return NewInstance(dbAttributeString, bmeb, methodName);\r
}\r
\r
+ public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase bmeb, Class<?> parameterTypes){\r
+ String methodName = "get" + dbAttributeString;\r
+ return new MethodMapper(dbAttributeString, bmeb.getClass(), methodName, parameterTypes);\r
+ }\r
+ \r
public static <T extends DbExportBase> MethodMapper NewInstance(String dbAttributeString, DbExportBase bmeb, String methodName){\r
Class<?> parameterTypes = bmeb.getStandardMethodParameter();\r
MethodMapper result = new MethodMapper(dbAttributeString, bmeb.getClass(), methodName, parameterTypes);\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 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.mapping.out;\r
+\r
+import java.lang.reflect.Method;\r
+import java.sql.PreparedStatement;\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.common.DbExportStateBase;\r
+import eu.etaxonomy.cdm.io.common.mapping.CdmAttributeMapperBase;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class ObjectChangeMapper extends CdmAttributeMapperBase implements IDbExportMapper<DbExportStateBase<?>> {\r
+ private static final Logger logger = Logger.getLogger(ObjectChangeMapper.class);\r
+\r
+ private DbExportStateBase<?> state; //for possible later use\r
+ \r
+ private String cdmAttribute;\r
+ \r
+ private Method method;\r
+// private Class<?>[] parameterTypes;\r
+ \r
+ public static ObjectChangeMapper NewInstance(Class<? extends CdmBase> oldClass, Class<? extends CdmBase> newClass, String cdmAttribute){\r
+ String methodName = "get" + cdmAttribute;\r
+ return new ObjectChangeMapper(oldClass, methodName, (Class<?>[])null);\r
+ }\r
+ \r
+ /**\r
+ * @param parameterTypes \r
+ * @param dbIdAttributString\r
+ */\r
+ protected ObjectChangeMapper(Class<?> clazz, String methodName, Class<?>... parameterTypes) {\r
+ try {\r
+// this.parameterTypes = parameterTypes;\r
+ method = clazz.getDeclaredMethod(methodName, parameterTypes);\r
+ method.setAccessible(true);\r
+ } catch (SecurityException e) {\r
+ logger.error("SecurityException", e);\r
+ } catch (NoSuchMethodException e) {\r
+ logger.error("NoSuchMethodException", e);\r
+ }\r
+ }\r
+ \r
+ \r
+ @Override\r
+ public void initialize(PreparedStatement stmt, IndexCounter index, DbExportStateBase<?> state, String tableName) {\r
+ this.state = state;\r
+ }\r
+\r
+ public boolean invoke(CdmBase cdmBase) {\r
+ throw new RuntimeException("Invoke must not be called for " + this.getClass().getSimpleName() + ". Return type is still incompatible. Use getNewObject instead.");\r
+ }\r
+\r
+ public CdmBase getNewObject(CdmBase oldCdmBase){\r
+ try {\r
+ return (CdmBase)method.invoke(oldCdmBase, (Object[])null);\r
+ } catch (Exception e) {\r
+ throw new RuntimeException(e);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public Set<String> getSourceAttributes() {\r
+ Set<String> result = new HashSet<String>();\r
+ if (cdmAttribute != null){\r
+ result.add(cdmAttribute);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public Set<String> getDestinationAttributes() {\r
+ return new HashSet<String>();\r
+ }\r
+\r
+ @Override\r
+ public List<String> getSourceAttributeList() {\r
+ ArrayList<String> result = new ArrayList<String>();\r
+ if (cdmAttribute != null){\r
+ result.add(cdmAttribute);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public List<String> getDestinationAttributeList() {\r
+ return new ArrayList<String>();\r
+ }\r
+\r
+\r
+\r
+}\r