Updates to BM import to integrate AlgaTerra
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 21 Sep 2011 14:29:34 +0000 (14:29 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 21 Sep 2011 14:29:34 +0000 (14:29 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelFactsImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelTaxonImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelTaxonNameImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelTaxonRelationImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/validation/BerlinModelFactsImportValidator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/validation/BerlinModelRefDetailImportValidator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/validation/BerlinModelTaxonImportValidator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/validation/BerlinModelTaxonRelationImportValidator.java

index fb2aec6618e3bf4a74e0e7d95b90f0780e3ed93f..2eac7b90db02859be9cfa0f12065c35dba9d7fa6 100644 (file)
@@ -199,7 +199,6 @@ public class BerlinModelFactsImport  extends BerlinModelImportBase {
                                        String fact = CdmUtils.Nz(rs.getString("Fact"));\r
                                        String notes = CdmUtils.Nz(rs.getString("notes"));\r
                                        Boolean doubtfulFlag = rs.getBoolean("DoubtfulFlag");\r
-                                       Boolean publishFlag = rs.getBoolean("publishFlag");\r
                                        \r
                                        TaxonBase taxonBase = getTaxon(taxonMap, taxonIdObj, taxonId);\r
                                        Feature feature = getFeature(featureMap, categoryFkObj, categoryFk) ;\r
@@ -314,7 +313,13 @@ public class BerlinModelFactsImport  extends BerlinModelImportBase {
                                                        textData.addMarker(Marker.NewInstance(MarkerType.IS_DOUBTFUL(), true));\r
                                                }\r
                                                //publisheFlag\r
-                                               textData.addMarker(Marker.NewInstance(MarkerType.PUBLISH(), publishFlag));\r
+                                               String strPublishFlag = "publishFlag";\r
+                                               boolean publishFlagExists = state.getConfig().getSource().checkColumnExists(dbTableName, strPublishFlag);\r
+                                               if (publishFlagExists){\r
+                                                       Boolean publishFlag = rs.getBoolean(strPublishFlag);\r
+                                                       textData.addMarker(Marker.NewInstance(MarkerType.PUBLISH(), publishFlag));\r
+                                               }\r
+                                               \r
                                                //Sequence\r
                                                Integer sequence = rs.getInt("Sequence");\r
                                                if (sequence != null && sequence != 999){\r
index 2240556591e00f84f0d9004996c3ff7604336fee..788618e22182b431f372e76809ec0901725ff8f3 100644 (file)
@@ -223,10 +223,14 @@ public class BerlinModelTaxonImport  extends BerlinModelImportBase {
                                                taxonBase.setUseNameCache(true);\r
                                        }\r
                                        //publisheFlag\r
-                                       Boolean publishFlag = rs.getBoolean("PublishFlag");\r
-                                       if (config.getTaxonPublishMarker().doMark(publishFlag)){\r
-                                               taxonBase.addMarker(Marker.NewInstance(MarkerType.PUBLISH(), publishFlag));\r
+                                       boolean publishFlagExists = state.getConfig().getSource().checkColumnExists("PTaxon", "PublishFlag");\r
+                                       if (publishFlagExists){\r
+                                               Boolean publishFlag = rs.getBoolean("PublishFlag");\r
+                                               if (config.getTaxonPublishMarker().doMark(publishFlag)){\r
+                                                       taxonBase.addMarker(Marker.NewInstance(MarkerType.PUBLISH(), publishFlag));\r
+                                               }\r
                                        }\r
+                                       \r
                                        //Notes\r
                                        doIdCreatedUpdatedNotes(state, taxonBase, rs, taxonId, NAMESPACE);\r
                                        \r
index fcf82ddb8799639db241e89d4c489952d3302ced..f2bfc4c2ae358b5735e5e781ad51d9737d463426 100644 (file)
@@ -17,6 +17,8 @@ import java.util.Map;
 import java.util.Set;\r
 import java.util.UUID;\r
 \r
+import javax.mail.MethodNotSupportedException;\r
+\r
 import org.apache.log4j.Logger;\r
 import org.springframework.stereotype.Component;\r
 \r
@@ -187,10 +189,18 @@ public class BerlinModelTaxonNameImport extends BerlinModelImportBase {
                                        success &= makeNomenclaturalReference(config, taxonNameBase, nameId, rs, partitioner);\r
        \r
                                        //Source_Acc\r
-                                       String sourceAcc = rs.getString("Source_Acc");\r
-                                       if (CdmUtils.isNotEmpty(sourceAcc)){\r
-                                               ExtensionType sourceAccExtensionType = getExtensionType(state, SOURCE_ACC_UUID, "Source_Acc","Source_Acc","Source_Acc");\r
-                                               Extension datesExtension = Extension.NewInstance(taxonNameBase, sourceAcc, sourceAccExtensionType);\r
+                                       boolean colExists = true;\r
+                                       try {\r
+                                               colExists = state.getConfig().getSource().checkColumnExists("Name", "Source_Acc");\r
+                                       } catch (MethodNotSupportedException e) {\r
+                                               logger.debug("Source does not support 'checkColumnExists'");\r
+                                       }\r
+                                       if (colExists){\r
+                                               String sourceAcc = rs.getString("Source_Acc");\r
+                                               if (CdmUtils.isNotEmpty(sourceAcc)){\r
+                                                       ExtensionType sourceAccExtensionType = getExtensionType(state, SOURCE_ACC_UUID, "Source_Acc","Source_Acc","Source_Acc");\r
+                                                       Extension datesExtension = Extension.NewInstance(taxonNameBase, sourceAcc, sourceAccExtensionType);\r
+                                               }\r
                                        }\r
                                        \r
                                        //created, notes\r
index 07b7fb3bd85db7fddb547c276ee717a53d55bdf5..6575eb16bca386b73c218e2e5a76cca85b6481bc 100644 (file)
@@ -104,31 +104,36 @@ public class BerlinModelTaxonRelationImport  extends BerlinModelImportBase  {
                try {\r
                        while (rs.next()){\r
                                \r
-                               if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}\r
-                               \r
-                               Object ptRefFkObj = rs.getObject("PTRefFk");\r
-                               String ptRefFk= String.valueOf(ptRefFkObj);\r
-                               Reference<?> ref = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, ptRefFk);\r
-                               \r
-                               rs.getString("RefCache");\r
-                               String treeName = "Classification - No Name";\r
-                               String refCache = rs.getString("RefCache");\r
-                               if (CdmUtils.isNotEmpty(refCache)){\r
-                                       treeName = refCache;\r
-                               }\r
-                               if (ref != null && CdmUtils.isNotEmpty(ref.getTitleCache())){\r
-                                       treeName = ref.getTitleCache();\r
-                               }\r
-                               Classification tree = Classification.NewInstance(treeName);\r
-                               tree.setReference(ref);\r
-                               if (i == 1 && state.getConfig().getClassificationUuid() != null){\r
-                                       tree.setUuid(state.getConfig().getClassificationUuid());\r
+                               try {\r
+                                       if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}\r
+                                       \r
+                                       Object ptRefFkObj = rs.getObject("PTRefFk");\r
+                                       String ptRefFk= String.valueOf(ptRefFkObj);\r
+                                       Reference<?> ref = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, ptRefFk);\r
+                                       \r
+                                       rs.getString("RefCache");\r
+                                       String treeName = "Classification - No Name";\r
+                                       String refCache = rs.getString("RefCache");\r
+                                       if (CdmUtils.isNotEmpty(refCache)){\r
+                                               treeName = refCache;\r
+                                       }\r
+                                       if (ref != null && CdmUtils.isNotEmpty(ref.getTitleCache())){\r
+                                               treeName = ref.getTitleCache();\r
+                                       }\r
+                                       Classification tree = Classification.NewInstance(treeName);\r
+                                       tree.setReference(ref);\r
+                                       if (i == 1 && state.getConfig().getClassificationUuid() != null){\r
+                                               tree.setUuid(state.getConfig().getClassificationUuid());\r
+                                       }\r
+                                       IdentifiableSource identifiableSource = IdentifiableSource.NewInstance(ptRefFk, TREE_NAMESPACE);\r
+                                       tree.addSource(identifiableSource);\r
+                                       \r
+                                       getClassificationService().save(tree);\r
+                                       state.putClassificationUuidInt((Integer)ptRefFkObj, tree);\r
+                               } catch (Exception e) {\r
+                                       logger.error("Error in BerlinModleTaxonRelationImport.makeClassifications: " + e.getMessage());\r
+                                       e.printStackTrace();\r
                                }\r
-                               IdentifiableSource identifiableSource = IdentifiableSource.NewInstance(ptRefFk, TREE_NAMESPACE);\r
-                               tree.addSource(identifiableSource);\r
-                               \r
-                               getClassificationService().save(tree);\r
-                               state.putClassificationUuidInt((Integer)ptRefFkObj, tree);\r
                        }\r
                } catch (SQLException e) {\r
                        logger.error("Error in BerlinModleTaxonRelationImport.makeClassifications: " + e.getMessage());\r
@@ -202,101 +207,106 @@ public class BerlinModelTaxonRelationImport  extends BerlinModelImportBase  {
                        while (rs.next()){\r
                                \r
                                if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}\r
-                               \r
+                                       \r
                                int relPTaxonId = rs.getInt("RelPTaxonId");\r
-                               int taxon1Id = rs.getInt("taxon1Id");\r
-                               int taxon2Id = rs.getInt("taxon2Id");\r
-                               Object relRefFkObj = rs.getObject("relRefFk");\r
-                               int treeRefFk = rs.getInt("treeRefFk");\r
-                               int relQualifierFk = rs.getInt("relQualifierFk");\r
-                               String notes = rs.getString("notes");\r
-                               boolean isConceptRelationship = rs.getBoolean("is_concept_relation");\r
-                               \r
-                               TaxonBase taxon1 = taxonMap.get(String.valueOf(taxon1Id));\r
-                               TaxonBase taxon2 = taxonMap.get(String.valueOf(taxon2Id));\r
-                               \r
-                               String refFk = String.valueOf(relRefFkObj);\r
-                               Reference citation = getReferenceOnlyFromMaps(biblioRefMap,     nomRefMap, refFk);\r
-                               \r
-                               String microcitation = null; //does not exist in RelPTaxon\r
-       \r
-                               if (taxon2 != null && taxon1 != null){\r
-                                       if (!(taxon2 instanceof Taxon)){\r
-                                               logger.error("TaxonBase (ID = " + taxon2.getId()+ ", RIdentifier = " + taxon2Id + ") can't be casted to Taxon");\r
-                                               success = false;\r
-                                               continue;\r
-                                       }\r
-                                       AnnotatableEntity taxonRelationship = null;\r
-                                       Taxon toTaxon = (Taxon)taxon2;\r
-                                       if (isTaxonRelationship(relQualifierFk)){\r
-                                               if (!(taxon1 instanceof Taxon)){\r
-                                                       logger.error("TaxonBase (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Taxon");\r
-                                                       success = false;\r
-                                                       continue;\r
-                                               }\r
-                                               Taxon fromTaxon = (Taxon)taxon1;\r
-                                               if (relQualifierFk == TAX_REL_IS_INCLUDED_IN){\r
-                                                       taxonRelationship = makeTaxonomicallyIncluded(state, classificationMap, treeRefFk, fromTaxon, toTaxon, citation, microcitation);\r
-                                               }else if (relQualifierFk == TAX_REL_IS_MISAPPLIED_NAME_OF){\r
-                                                        taxonRelationship = toTaxon.addMisappliedName(fromTaxon, citation, microcitation);\r
-                                               }\r
-                                       }else if (isSynonymRelationship(relQualifierFk)){\r
-                                               if (!(taxon1 instanceof Synonym)){\r
-                                                       logger.error("Taxon (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Synonym");\r
+                               try {\r
+                                       int taxon1Id = rs.getInt("taxon1Id");\r
+                                       int taxon2Id = rs.getInt("taxon2Id");\r
+                                       Object relRefFkObj = rs.getObject("relRefFk");\r
+                                       int treeRefFk = rs.getInt("treeRefFk");\r
+                                       int relQualifierFk = rs.getInt("relQualifierFk");\r
+                                       String notes = rs.getString("notes");\r
+                                       boolean isConceptRelationship = rs.getBoolean("is_concept_relation");\r
+                                       \r
+                                       TaxonBase taxon1 = taxonMap.get(String.valueOf(taxon1Id));\r
+                                       TaxonBase taxon2 = taxonMap.get(String.valueOf(taxon2Id));\r
+                                       \r
+                                       String refFk = String.valueOf(relRefFkObj);\r
+                                       Reference citation = getReferenceOnlyFromMaps(biblioRefMap,     nomRefMap, refFk);\r
+                                       \r
+                                       String microcitation = null; //does not exist in RelPTaxon\r
+\r
+                                       if (taxon2 != null && taxon1 != null){\r
+                                               if (!(taxon2 instanceof Taxon)){\r
+                                                       logger.error("TaxonBase (ID = " + taxon2.getId()+ ", RIdentifier = " + taxon2Id + ") can't be casted to Taxon");\r
                                                        success = false;\r
                                                        continue;\r
                                                }\r
-                                               Synonym synonym = (Synonym)taxon1;\r
-                                               SynonymRelationship synRel = getSynRel(relQualifierFk, toTaxon, synonym, citation, microcitation);\r
-                                               taxonRelationship = synRel;\r
-                                               \r
-                                               if (relQualifierFk == TAX_REL_IS_SYNONYM_OF || \r
-                                                               relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||\r
-                                                               relQualifierFk == TAX_REL_IS_HETEROTYPIC_SYNONYM_OF){\r
-                                                       addProParteAndPartial(synRel, synonym, config);\r
-                                               }else if (relQualifierFk == TAX_REL_IS_PROPARTE_SYN_OF ||\r
-                                                               relQualifierFk == TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF ||\r
-                                                               relQualifierFk == TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF ){\r
-                                                               synRel.setProParte(true);\r
-                                               }else if(relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF || \r
-                                                               relQualifierFk == TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF ||\r
-                                                               relQualifierFk == TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF ){\r
-                                                               synRel.setPartial(true);\r
-                                               }else{\r
-                                                       success = false;\r
-                                                       logger.warn("Proparte/Partial not yet implemented for TaxonRelationShipType " + relQualifierFk);\r
-                                               }\r
-                                       }else if (isConceptRelationship){\r
-                                               ResultWrapper<Boolean> isInverse = new ResultWrapper<Boolean>();\r
-                                               try {\r
-                                                       TaxonRelationshipType relType = BerlinModelTransformer.taxonRelId2TaxonRelType(relQualifierFk, isInverse);      \r
-                                                       if (! (taxon1 instanceof Taxon)){\r
-                                                               success = false;\r
+                                               AnnotatableEntity taxonRelationship = null;\r
+                                               Taxon toTaxon = (Taxon)taxon2;\r
+                                               if (isTaxonRelationship(relQualifierFk)){\r
+                                                       if (!(taxon1 instanceof Taxon)){\r
                                                                logger.error("TaxonBase (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Taxon");\r
+                                                               success = false;\r
+                                                               continue;\r
+                                                       }\r
+                                                       Taxon fromTaxon = (Taxon)taxon1;\r
+                                                       if (relQualifierFk == TAX_REL_IS_INCLUDED_IN){\r
+                                                               taxonRelationship = makeTaxonomicallyIncluded(state, classificationMap, treeRefFk, fromTaxon, toTaxon, citation, microcitation);\r
+                                                       }else if (relQualifierFk == TAX_REL_IS_MISAPPLIED_NAME_OF){\r
+                                                                taxonRelationship = toTaxon.addMisappliedName(fromTaxon, citation, microcitation);\r
+                                                       }\r
+                                               }else if (isSynonymRelationship(relQualifierFk)){\r
+                                                       if (!(taxon1 instanceof Synonym)){\r
+                                                               logger.warn("Validated: Taxon (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Synonym");\r
+                                                               success = false;\r
+                                                               continue;\r
+                                                       }\r
+                                                       Synonym synonym = (Synonym)taxon1;\r
+                                                       SynonymRelationship synRel = getSynRel(relQualifierFk, toTaxon, synonym, citation, microcitation);\r
+                                                       taxonRelationship = synRel;\r
+                                                       \r
+                                                       if (relQualifierFk == TAX_REL_IS_SYNONYM_OF || \r
+                                                                       relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||\r
+                                                                       relQualifierFk == TAX_REL_IS_HETEROTYPIC_SYNONYM_OF){\r
+                                                               addProParteAndPartial(synRel, synonym, config);\r
+                                                       }else if (relQualifierFk == TAX_REL_IS_PROPARTE_SYN_OF ||\r
+                                                                       relQualifierFk == TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF ||\r
+                                                                       relQualifierFk == TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF ){\r
+                                                                       synRel.setProParte(true);\r
+                                                       }else if(relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF || \r
+                                                                       relQualifierFk == TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF ||\r
+                                                                       relQualifierFk == TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF ){\r
+                                                                       synRel.setPartial(true);\r
                                                        }else{\r
-                                                               Taxon fromTaxon = (Taxon)taxon1;\r
-                                                               taxonRelationship = fromTaxon.addTaxonRelation(toTaxon, relType, citation, microcitation);\r
+                                                               success = false;\r
+                                                               logger.warn("Proparte/Partial not yet implemented for TaxonRelationShipType " + relQualifierFk);\r
+                                                       }\r
+                                               }else if (isConceptRelationship){\r
+                                                       ResultWrapper<Boolean> isInverse = new ResultWrapper<Boolean>();\r
+                                                       try {\r
+                                                               TaxonRelationshipType relType = BerlinModelTransformer.taxonRelId2TaxonRelType(relQualifierFk, isInverse);      \r
+                                                               if (! (taxon1 instanceof Taxon)){\r
+                                                                       success = false;\r
+                                                                       logger.error("TaxonBase (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Taxon");\r
+                                                               }else{\r
+                                                                       Taxon fromTaxon = (Taxon)taxon1;\r
+                                                                       taxonRelationship = fromTaxon.addTaxonRelation(toTaxon, relType, citation, microcitation);\r
+                                                               }\r
+                                                       } catch (UnknownCdmTypeException e) {\r
+                                                               //TODO other relationships\r
+                                                               logger.warn("TaxonRelationShipType " + relQualifierFk + " (conceptRelationship) not yet implemented");\r
+                                                               success = false;\r
                                                        }\r
-                                               } catch (UnknownCdmTypeException e) {\r
-                                                       //TODO other relationships\r
-                                                       logger.warn("TaxonRelationShipType " + relQualifierFk + " (conceptRelationship) not yet implemented");\r
+                                               }else {\r
+                                                       //TODO\r
+                                                       logger.warn("TaxonRelationShipType " + relQualifierFk + " not yet implemented");\r
                                                        success = false;\r
                                                }\r
-                                       }else {\r
+                                               \r
+                                               doNotes(taxonRelationship, notes);\r
+                                               taxaToSave.add(taxon2);\r
+                                               \r
+                                               //TODO\r
+                                               //etc.\r
+                                       }else{\r
                                                //TODO\r
-                                               logger.warn("TaxonRelationShipType " + relQualifierFk + " not yet implemented");\r
+                                               logger.warn("Taxa for RelPTaxon " + relPTaxonId + " do not exist in store");\r
                                                success = false;\r
                                        }\r
-                                       \r
-                                       doNotes(taxonRelationship, notes);\r
-                                       taxaToSave.add(taxon2);\r
-                                       \r
-                                       //TODO\r
-                                       //etc.\r
-                               }else{\r
-                                       //TODO\r
-                                       logger.warn("Taxa for RelPTaxon " + relPTaxonId + " do not exist in store");\r
-                                       success = false;\r
+                               } catch (Exception e) {\r
+                                       logger.error("Exception occurred when trying to handle taxon relationship " + relPTaxonId + ":" + e.getMessage());\r
+//                                     e.printStackTrace();\r
                                }\r
                        }\r
                }catch(SQLException e){\r
index f73a90c0dcfce9bea5f334d94785edc0b76c5674..c9558c8f77aa31d150845cc54f81c3bd3d7539b1 100644 (file)
@@ -33,17 +33,16 @@ public class BerlinModelFactsImportValidator implements IOValidator<BerlinModelI
         */\r
        public boolean validate(BerlinModelImportState state) {\r
                boolean result = true;\r
-               BerlinModelImportConfigurator bmiConfig = state.getConfig();\r
-               logger.warn("Checking for Facts not yet fully implemented");\r
-               result &= checkDesignationRefsExist(bmiConfig);\r
+               result &= checkDesignationRefsExist(state);\r
+               result &= checkFactsForSynonyms(state);\r
                return result;\r
        }\r
        \r
        \r
-       private boolean checkDesignationRefsExist(BerlinModelImportConfigurator config){\r
+       private boolean checkDesignationRefsExist(BerlinModelImportState state){\r
                try {\r
                        boolean result = true;\r
-                       Source source = config.getSource();\r
+                       Source source = state.getConfig().getSource();\r
                        String strQueryArticlesWithoutJournal = "SELECT Count(*) as n " +\r
                                        " FROM Fact " +\r
                                        " WHERE (NOT (PTDesignationRefFk IS NULL) ) OR " +\r
@@ -64,4 +63,29 @@ public class BerlinModelFactsImportValidator implements IOValidator<BerlinModelI
                }\r
 \r
        }\r
+       \r
+       private boolean checkFactsForSynonyms(BerlinModelImportState state){\r
+               try {\r
+                       boolean result = true;\r
+                       Source source = state.getConfig().getSource();\r
+                       String strQueryArticlesWithoutJournal = "SELECT Count(*) as n " +\r
+                                       " FROM Fact " +\r
+                                               "INNER JOIN PTaxon ON Fact.PTNameFk = PTaxon.PTNameFk AND Fact.PTRefFk = PTaxon.PTRefFk" +\r
+                                       " WHERE PTaxon.StatusFk IN (2, 3, 4)";\r
+                       ResultSet rs = source.getResultSet(strQueryArticlesWithoutJournal);\r
+                       rs.next();\r
+                       int count = rs.getInt("n");\r
+                       if (count > 0){\r
+                               System.out.println("========================================================");\r
+                               logger.warn("There are "+count+" Facts with attached synonyms.");\r
+                               \r
+                               System.out.println("========================================================");\r
+                       }\r
+                       return result;\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+                       return false;\r
+               }\r
+\r
+       }\r
 }\r
index 7156b7c9b84f263b154a93a8fd448122fcc753c4..239fd2468ce1c82bf6b8c9367e2a04354a49b0ff 100644 (file)
@@ -13,6 +13,8 @@ package eu.etaxonomy.cdm.io.berlinModel.in.validation;
 import java.sql.ResultSet;\r
 import java.sql.SQLException;\r
 \r
+import javax.mail.MethodNotSupportedException;\r
+\r
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;\r
@@ -74,23 +76,27 @@ public class BerlinModelRefDetailImportValidator implements IOValidator<BerlinMo
        private boolean checkRefDetailsWithIdInSource(BerlinModelImportState state) {\r
                boolean success = true;\r
                try {\r
-                       \r
                        Source source = state.getConfig().getSource();\r
-                       String strQuery = \r
-                               "SELECT count(*) AS n FROM RefDetail " + \r
-                               " WHERE (IdInSource IS NOT NULL) AND (RTRIM(LTRIM(IdInSource)) <> '')";\r
-                       ResultSet rs = source.getResultSet(strQuery);\r
-                       rs.next();\r
-                       int n;\r
-                       n = rs.getInt("n");\r
-                       if (n > 0){\r
-                               System.out.println("========================================================");\r
-                               logger.warn("There are " + n + " RefDetails with an idInSource. IdInSources are not supported yet");\r
-                               System.out.println("========================================================");\r
-                               success = false;\r
+                       if (source.checkColumnExists("RefDetail", "idInSource")){\r
+                               String strQuery = \r
+                                       "SELECT count(*) AS n FROM RefDetail " + \r
+                                       " WHERE (IdInSource IS NOT NULL) AND (RTRIM(LTRIM(IdInSource)) <> '')";\r
+                               ResultSet rs = source.getResultSet(strQuery);\r
+                               rs.next();\r
+                               int n;\r
+                               n = rs.getInt("n");\r
+                               if (n > 0){\r
+                                       System.out.println("========================================================");\r
+                                       logger.warn("There are " + n + " RefDetails with an idInSource. IdInSources are not supported yet");\r
+                                       System.out.println("========================================================");\r
+                                       success = false;\r
+                               }\r
                        }\r
+                       \r
                } catch (SQLException e) {\r
                        e.printStackTrace();\r
+               } catch (MethodNotSupportedException e) {\r
+                       logger.debug("Source does not support checking existance of 'idInSource' column");\r
                }\r
                return success;\r
        }\r
index 8e30bb240454769a6031e4cc6ca1c34b939a00e8..276377002f4cbf2683f94c966771b494fec0a223 100644 (file)
@@ -31,8 +31,7 @@ public class BerlinModelTaxonImportValidator implements IOValidator<BerlinModelI
        public boolean validate(BerlinModelImportState state){\r
                boolean result = true;\r
                BerlinModelImportConfigurator bmiConfig = state.getConfig();\r
-               logger.warn("Checking for Taxa not yet fully implemented");\r
-               result &= checkTaxonStatus(bmiConfig);\r
+//             result &= checkTaxonStatus(bmiConfig); //handled by TaxonRelationValidator\r
                result &= checkInactivated(bmiConfig);\r
                return result;\r
        }\r
index b76ba4537d2a63d69018c51edc50bb2c07595537..4dfc56453eb6700ebb999d695b9a3e6d20677879 100644 (file)
@@ -33,18 +33,17 @@ public class BerlinModelTaxonRelationImportValidator implements IOValidator<Berl
         */\r
        public boolean validate(BerlinModelImportState state) {\r
                boolean result = true;\r
-               BerlinModelImportConfigurator bmiConfig = state.getConfig();\r
-               logger.warn("Checking for TaxonRelations not yet fully implemented");\r
-               result &= checkInActivatedStatus(bmiConfig);\r
-               \r
+               result &= checkInActivatedStatus(state);\r
+               result &= checkSynonymRelationsWithAcceptedTaxa(state);\r
+               result &= checkRelPTaxonWithNotes(state);\r
                return result;\r
        }\r
        \r
        \r
-       private boolean checkInActivatedStatus(BerlinModelImportConfigurator bmiConfig){\r
+       private boolean checkInActivatedStatus(BerlinModelImportState state){\r
                try {\r
                        boolean result = true;\r
-                       Source source = bmiConfig.getSource();\r
+                       Source source = state.getConfig().getSource();\r
                        String strSQL = \r
                                " SELECT RelPTaxon.RelPTaxonId, RelPTaxon.RelQualifierFk, FromName.FullNameCache AS FromName, RelPTaxon.PTNameFk1 AS FromNameID, "  +\r
                                        " Status.Status AS FromStatus, ToName.FullNameCache AS ToName, RelPTaxon.PTNameFk2 AS ToNameId, ToStatus.Status AS ToStatus, FromTaxon.DoubtfulFlag AS doubtfulFrom, ToTaxon.DoubtfulFlag AS doubtfulTo" + \r
@@ -117,6 +116,62 @@ public class BerlinModelTaxonRelationImportValidator implements IOValidator<Berl
                                logger.warn("There are " + n + " RelPTaxa with a note. Notes for RelPTaxa are not imported!");\r
                                System.out.println("========================================================");\r
                                success = false;\r
+                               \r
+                       }\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               return success;\r
+       }\r
+       \r
+       /**\r
+        * @param state\r
+        * @return\r
+        */\r
+       private boolean checkSynonymRelationsWithAcceptedTaxa(BerlinModelImportState state) {\r
+               boolean success = true;\r
+               try {\r
+                       \r
+                       Source source = state.getConfig().getSource();\r
+                       String strQuery = \r
+                               "SELECT RelPTaxon.RelPTaxonId, RelPTQualifier, PTaxon.RIdentifier, Name.FullNameCache fromName, PTaxon.PTRefFk, Name.NameId as fromNameId, AcceptedName.FullNameCache acceptedName" +\r
+                               " FROM RelPTaxon INNER JOIN PTaxon ON RelPTaxon.PTNameFk1 = PTaxon.PTNameFk AND RelPTaxon.PTRefFk1 = PTaxon.PTRefFk " +\r
+                                       " INNER JOIN RelPTQualifier ON RelPTaxon.RelQualifierFk = RelPTQualifier.RelPTQualifierId " +\r
+                                       " LEFT OUTER JOIN Name ON PTaxon.PTNameFk = Name.NameId " +\r
+                                       " LEFT OUTER JOIN Name AS AcceptedName ON RelPTaxon.PTNameFk2 = AcceptedName.NameId " +\r
+                               " WHERE (PTaxon.StatusFk = 1) AND (RelPTaxon.RelQualifierFk IN (2, 4, 5, 6, 7))";\r
+                       ResultSet rs = source.getResultSet(strQuery);\r
+                       boolean firstRow = true;\r
+                       int i = 0;\r
+                       while (rs.next()){\r
+                               i++;\r
+                               if (firstRow){\r
+                                       System.out.println("========================================================");\r
+                                       logger.warn("There are accepted taxa being synonyms in a synonym relationship!");\r
+                                       System.out.println("========================================================");\r
+                               }\r
+\r
+                               int relPTaxonId = rs.getInt("RelPTaxonId");\r
+                               String relType = rs.getString("RelPTQualifier");\r
+                               int fromIdentifier = rs.getInt("RIdentifier");\r
+                               String fromName = rs.getString("fromName");\r
+                               int fromRefFk = rs.getInt("PTRefFk");\r
+                               int fromNameId = rs.getInt("fromNameId");\r
+//                             String fromStatus = rs.getString("FromStatus");\r
+                               \r
+                               \r
+                               String toName = rs.getString("acceptedName");\r
+//                             int toNameId = rs.getInt("ToNameId");\r
+//                             String toStatus = rs.getString("ToStatus");\r
+//                             String doubtfulFrom = String.valueOf(rs.getObject("doubtfulFrom"));\r
+//                             String doubtfulTo = String.valueOf(rs.getObject("doubtfulTo"));\r
+                               \r
+                               \r
+                               System.out.println("RelPTaxonId:" + relPTaxonId + \r
+                                               "\n TaxonRIdentifier: " + fromIdentifier + "\n name: " + fromName + "\n nameId: " + fromNameId + "\n RefFk: " + fromRefFk + "\n RelType: " + relType  \r
+                                               + "\n acceptedName: " + toName //+ "\n  ToNameId: " + toNameId + "\n  ToStatus: " + toStatus + "\n  ToDoubtful: " + doubtfulTo )\r
+                                               );\r
+                               success = (firstRow = false);\r
                        }\r
                } catch (SQLException e) {\r
                        e.printStackTrace();\r