refactor reference import
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 20 Dec 2011 22:12:12 +0000 (22:12 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 20 Dec 2011 22:12:12 +0000 (22:12 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelImportState.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelReferenceImport.java

index b689cbe48b73a184fd5689c6a8efe6587e624fcd..96453314bc5721d891a5b06fa45c38c3da22b905 100644 (file)
@@ -32,6 +32,8 @@ public class BerlinModelImportState extends DbImportStateBase<BerlinModelImportC
        Map<String, DefinedTermBase> dbCdmDefTermMap = new HashMap<String, DefinedTermBase>();\r
        \r
        Map<String, User> usernameMap = new HashMap<String, User>();\r
+       \r
+       private boolean isReferenceSecondPath = false;\r
 \r
        \r
        /* (non-Javadoc)\r
@@ -69,6 +71,14 @@ public class BerlinModelImportState extends DbImportStateBase<BerlinModelImportC
                usernameMap.put(username, user);\r
        }\r
 \r
+       public boolean isReferenceSecondPath() {\r
+               return isReferenceSecondPath;\r
+       }\r
+\r
+       public void setReferenceSecondPath(boolean isReferenceSecondPath) {\r
+               this.isReferenceSecondPath = isReferenceSecondPath;\r
+       }\r
+\r
 \r
 \r
     \r
index 052f9ed28ab4c05f48cc5bedee7730f3f79ecb12..ba3e3ac1a33598ce1c882182092f9c725b2ea8b7 100644 (file)
@@ -166,6 +166,107 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
        }\r
 \r
 \r
+//     @Override\r
+//     protected void doInvoke_old(BerlinModelImportState state){\r
+//             logger.info("start make " + getPluralString() + " ...");\r
+//\r
+//             boolean success = true;\r
+//             initializeMappers(state);\r
+//             BerlinModelImportConfigurator config = state.getConfig();\r
+//             Source source = config.getSource();\r
+//\r
+//             String strSelectId = " SELECT Reference.RefId as refId ";\r
+//             String strSelectFull = \r
+//                     " SELECT Reference.* , InReference.RefId as InRefId, InReference.RefCategoryFk as InRefCategoryFk,  " +\r
+//                     " InInReference.RefId as InInRefId, InInReference.RefCategoryFk as InInRefCategoryFk, " +\r
+//                     " InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk, RefSource.RefSource " ;\r
+//             String strFrom =  " FROM Reference AS InInReference " +\r
+//                     " RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " + \r
+//                     " RIGHT OUTER JOIN %s ON InReference.RefId = Reference.InRefFk " + \r
+//                     " LEFT OUTER JOIN RefSource ON Reference.RefSourceFk = RefSource.RefSourceId " +\r
+//                     " WHERE (1=1) ";\r
+//             String strWherePartitioned = " AND (Reference.refId IN ("+ ID_LIST_TOKEN + ") ) "; \r
+//             \r
+//             String referenceTable = CdmUtils.Nz(state.getConfig().getReferenceIdTable());\r
+//             referenceTable = referenceTable.isEmpty() ? " Reference"  : referenceTable + " as Reference ";\r
+//             String strIdFrom = String.format(strFrom, referenceTable );\r
+//             \r
+//             \r
+//             //test max number of recursions\r
+//             String strQueryTestMaxRecursion = strSelectId + strIdFrom +  \r
+//                     " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
+//             ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTestMaxRecursion);\r
+//             try {\r
+//                     if (testMaxRecursionResultSet.next() == true){\r
+//                             logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
+//                             state.setUnsuccessfull();\r
+//                             return;\r
+//                     }\r
+//             } catch (SQLException e1) {\r
+//                     e1.printStackTrace();\r
+//                     logger.error("There are references with more then 2 in-reference recursion. Maximum number of allowed recursions is 2. Records will not be stored.");\r
+//                     success = false;\r
+//             }\r
+//\r
+//             String strSelectIdBase = strSelectId + strIdFrom;\r
+//             \r
+//             String referenceFilter = CdmUtils.Nz(state.getConfig().getReferenceIdTable());\r
+//             if (! referenceFilter.isEmpty()){\r
+//                     referenceFilter = " AND " + referenceFilter + " ";\r
+//             }\r
+//             referenceFilter = "";  //don't use it for now\r
+//             \r
+//             String strIdQueryNoInRef = strSelectIdBase + \r
+//                     " AND (Reference.InRefFk is NULL) " +  referenceFilter;\r
+//             String strIdQuery1InRef = strSelectIdBase + \r
+//                     " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) "  +  referenceFilter;\r
+//             String strIdQuery2InRefs = strSelectIdBase + \r
+//                     " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) "  +  referenceFilter;\r
+//\r
+//             if (config.getDoReferences() == CONCEPT_REFERENCES){\r
+//                     strIdQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) " + referenceFilter;\r
+//             }\r
+//\r
+//             String strRecordQuery = strSelectFull + String.format(strFrom, " Reference ") + strWherePartitioned;\r
+//             \r
+//             int recordsPerTransaction = config.getRecordsPerTransaction();\r
+//             try{\r
+//                     //NoInRefs\r
+//                     ResultSetPartitioner partitioner = ResultSetPartitioner.NewInstance(source, strIdQueryNoInRef, strRecordQuery, recordsPerTransaction);\r
+//                     while (partitioner.nextPartition()){\r
+//                             partitioner.doPartition(this, state);\r
+//                     }\r
+//                     logger.info("end make references with no in-references ... " + getSuccessString(success));\r
+//\r
+//                     if (config.getDoReferences() == ALL || config.getDoReferences() == NOMENCLATURAL){\r
+//\r
+//                             //1InRef\r
+//                             partitioner = ResultSetPartitioner.NewInstance(source, strIdQuery1InRef, strRecordQuery, recordsPerTransaction);\r
+//                             while (partitioner.nextPartition()){\r
+//                                     partitioner.doPartition(this, state);\r
+//                             }\r
+//                             logger.info("end make references with no 1 in-reference ... " + getSuccessString(success));\r
+//     \r
+//                             //2InRefs\r
+//                             partitioner = ResultSetPartitioner.NewInstance(source, strIdQuery2InRefs, strRecordQuery, recordsPerTransaction);\r
+//                             while (partitioner.nextPartition()){\r
+//                                     partitioner.doPartition(this, state);\r
+//                             }\r
+//                             logger.info("end make references with no 2 in-reference ... " + getSuccessString(success));\r
+//                     }\r
+//\r
+//             } catch (SQLException e) {\r
+//                     logger.error("SQLException:" +  e);\r
+//                     state.setUnsuccessfull();\r
+//                     return;\r
+//             }\r
+//             logger.info("end make " + getPluralString() + " ... " + getSuccessString(success));\r
+//             if (! success){\r
+//                     state.setUnsuccessfull();\r
+//             }\r
+//             return;\r
+//     }\r
+\r
        @Override\r
        protected void doInvoke(BerlinModelImportState state){\r
                logger.info("start make " + getPluralString() + " ...");\r
@@ -177,13 +278,10 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
 \r
                String strSelectId = " SELECT Reference.RefId as refId ";\r
                String strSelectFull = \r
-                       " SELECT Reference.* , InReference.RefId as InRefId, InReference.RefCategoryFk as InRefCategoryFk,  " +\r
-                       " InInReference.RefId as InInRefId, InInReference.RefCategoryFk as InInRefCategoryFk, " +\r
-                       " InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk, RefSource.RefSource " ;\r
-               String strFrom =  " FROM Reference AS InInReference " +\r
-                       " RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " + \r
-                       " RIGHT OUTER JOIN %s ON InReference.RefId = Reference.InRefFk " + \r
-                       " LEFT OUTER JOIN RefSource ON Reference.RefSourceFk = RefSource.RefSourceId " +\r
+                       " SELECT Reference.* ,InReference.RefCategoryFk as InRefCategoryFk, RefSource.RefSource " ;\r
+               String strFrom =  " FROM %s  " + \r
+                       " LEFT OUTER JOIN Reference as InReference ON InReference.refId = Reference.inRefFk " +\r
+                               " LEFT OUTER JOIN RefSource ON Reference.RefSourceFk = RefSource.RefSourceId " +\r
                        " WHERE (1=1) ";\r
                String strWherePartitioned = " AND (Reference.refId IN ("+ ID_LIST_TOKEN + ") ) "; \r
                \r
@@ -193,20 +291,20 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                \r
                \r
                //test max number of recursions\r
-               String strQueryTestMaxRecursion = strSelectId + strIdFrom +  \r
-                       " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
-               ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTestMaxRecursion);\r
-               try {\r
-                       if (testMaxRecursionResultSet.next() == true){\r
-                               logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
-                               state.setUnsuccessfull();\r
-                               return;\r
-                       }\r
-               } catch (SQLException e1) {\r
-                       e1.printStackTrace();\r
-                       logger.error("There are references with more then 2 in-reference recursion. Maximum number of allowed recursions is 2. Records will not be stored.");\r
-                       success = false;\r
-               }\r
+//             String strQueryTestMaxRecursion = strSelectId + strIdFrom +  \r
+//                     " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
+//             ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTestMaxRecursion);\r
+//             try {\r
+//                     if (testMaxRecursionResultSet.next() == true){\r
+//                             logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
+//                             state.setUnsuccessfull();\r
+//                             return;\r
+//                     }\r
+//             } catch (SQLException e1) {\r
+//                     e1.printStackTrace();\r
+//                     logger.error("There are references with more then 2 in-reference recursion. Maximum number of allowed recursions is 2. Records will not be stored.");\r
+//                     success = false;\r
+//             }\r
 \r
                String strSelectIdBase = strSelectId + strIdFrom;\r
                \r
@@ -216,44 +314,36 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                }\r
                referenceFilter = "";  //don't use it for now\r
                \r
-               String strIdQueryNoInRef = strSelectIdBase + \r
-                       " AND (Reference.InRefFk is NULL) " +  referenceFilter;\r
-               String strIdQuery1InRef = strSelectIdBase + \r
-                       " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) "  +  referenceFilter;\r
-               String strIdQuery2InRefs = strSelectIdBase + \r
-                       " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) "  +  referenceFilter;\r
-\r
-               if (config.getDoReferences() == CONCEPT_REFERENCES){\r
-                       strIdQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) " + referenceFilter;\r
-               }\r
+               String strIdQueryFirstPath = strSelectId + strIdFrom ;\r
+               String strIdQuerySecondPath = strSelectId + strIdFrom + " AND (Reference.InRefFk is NOT NULL) ";\r
+               \r
+//             if (config.getDoReferences() == CONCEPT_REFERENCES){\r
+//                     strIdQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) " + referenceFilter;\r
+//             }\r
 \r
                String strRecordQuery = strSelectFull + String.format(strFrom, " Reference ") + strWherePartitioned;\r
                \r
                int recordsPerTransaction = config.getRecordsPerTransaction();\r
                try{\r
-                       //NoInRefs\r
-                       ResultSetPartitioner partitioner = ResultSetPartitioner.NewInstance(source, strIdQueryNoInRef, strRecordQuery, recordsPerTransaction);\r
+                       //firstPath \r
+                       ResultSetPartitioner partitioner = ResultSetPartitioner.NewInstance(source, strIdQueryFirstPath, strRecordQuery, recordsPerTransaction);\r
                        while (partitioner.nextPartition()){\r
                                partitioner.doPartition(this, state);\r
                        }\r
                        logger.info("end make references with no in-references ... " + getSuccessString(success));\r
+                       state.setReferenceSecondPath(true);\r
 \r
-                       if (config.getDoReferences() == ALL || config.getDoReferences() == NOMENCLATURAL){\r
+//                     if (config.getDoReferences() == ALL || config.getDoReferences() == NOMENCLATURAL){\r
 \r
-                               //1InRef\r
-                               partitioner = ResultSetPartitioner.NewInstance(source, strIdQuery1InRef, strRecordQuery, recordsPerTransaction);\r
-                               while (partitioner.nextPartition()){\r
-                                       partitioner.doPartition(this, state);\r
-                               }\r
-                               logger.info("end make references with no 1 in-reference ... " + getSuccessString(success));\r
-       \r
-                               //2InRefs\r
-                               partitioner = ResultSetPartitioner.NewInstance(source, strIdQuery2InRefs, strRecordQuery, recordsPerTransaction);\r
-                               while (partitioner.nextPartition()){\r
-                                       partitioner.doPartition(this, state);\r
-                               }\r
-                               logger.info("end make references with no 2 in-reference ... " + getSuccessString(success));\r
+                       //secondPath\r
+                       partitioner = ResultSetPartitioner.NewInstance(source, strIdQuerySecondPath, strRecordQuery, recordsPerTransaction);\r
+                       while (partitioner.nextPartition()){\r
+                               partitioner.doPartition(this, state);\r
                        }\r
+                       logger.info("end make references with no 1 in-reference ... " + getSuccessString(success));\r
+                       state.setReferenceSecondPath(false);\r
+                       \r
+//                     }\r
 \r
                } catch (SQLException e) {\r
                        logger.error("SQLException:" +  e);\r
@@ -268,14 +358,16 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
        }\r
 \r
        \r
+       \r
 \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)\r
         */\r
        public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {\r
+               if (state.isReferenceSecondPath()){\r
+                       return doPartitionSecondPath(partitioner, state);\r
+               }\r
                boolean success = true;\r
-//             MapWrapper<Reference> referenceStore= new MapWrapper<Reference>(null);\r
-//             MapWrapper<Reference> nomRefStore= new MapWrapper<Reference>(null);\r
 \r
                Map<Integer, Reference> nomRefToSave = new HashMap<Integer, Reference>();\r
                Map<Integer, Reference> biblioRefToSave = new HashMap<Integer, Reference>();\r
@@ -286,18 +378,12 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                BerlinModelImportConfigurator config = state.getConfig();\r
                \r
                try {\r
-//                     //get data from database\r
-//                             //strQueryBase += " AND Reference.refId = 1933 " ; //7000000\r
-//                     \r
-//                     int j = 0;\r
-//                     Iterator<ResultSet> resultSetListIterator =  resultSetList.listIterator();\r
-//                     //for each resultsetlist\r
-//                     while (resultSetListIterator.hasNext()){\r
+\r
                                int i = 0;\r
                                RefCounter refCounter  = new RefCounter();\r
                                \r
-//                             ResultSet rs = resultSetListIterator.next();\r
                                ResultSet rs = partitioner.getResultSet();\r
+\r
                                //for each resultset\r
                                while (rs.next()){\r
                                        if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("References handled: " + (i-1) + " in round -" );}\r
@@ -321,7 +407,7 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                                getReferenceService().save(nomRefToSave.values());\r
                                logger.info("Save bibliographical references (" + refCounter.referenceCount +")");\r
                                getReferenceService().save(biblioRefToSave.values());\r
-//                             j++;\r
+\r
 //                     }//end resultSetList    \r
 \r
                        logger.info("end makeReferences ..." + getSuccessString(success));;\r
@@ -334,6 +420,72 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
 \r
 \r
 \r
+       private boolean doPartitionSecondPath(ResultSetPartitioner partitioner, BerlinModelImportState state) {\r
+               boolean success = true;\r
+\r
+               Map<Integer, Reference> nomRefToSave = new HashMap<Integer, Reference>();\r
+               Map<Integer, Reference> biblioRefToSave = new HashMap<Integer, Reference>();\r
+               \r
+               Map<String, Reference> relatedNomReferences = partitioner.getObjectMap(NOM_REFERENCE_NAMESPACE);\r
+               Map<String, Reference> relatedBiblioReferences = partitioner.getObjectMap(BIBLIO_REFERENCE_NAMESPACE);\r
+               \r
+               try {\r
+                               int i = 0;\r
+                               RefCounter refCounter  = new RefCounter();\r
+                       \r
+                               ResultSet rs = partitioner.getResultSet();\r
+                               //for each resultset\r
+                               while (rs.next()){\r
+                                       if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("References handled: " + (i-1) + " in round -" );}\r
+                               \r
+                                       Integer refId = rs.getInt("refId");\r
+                                       \r
+                                       Reference<?> thisNomRef = getReferenceOnlyFromMaps(relatedNomReferences, relatedBiblioReferences, String.valueOf(refId));\r
+                                       Reference<?> thisBiblioRef = getReferenceOnlyFromMaps(relatedNomReferences, relatedBiblioReferences, String.valueOf(refId));\r
+                                       \r
+                                       Reference<?> inReference = relatedNomReferences.get("inRefFk");\r
+                                       if (thisNomRef != null){\r
+                                               thisNomRef.setInReference(inReference);\r
+                                               nomRefToSave.put(refId, thisNomRef);\r
+                                       }\r
+                                       if (thisBiblioRef != null){\r
+                                               thisBiblioRef.setInReference(inReference);\r
+                                               biblioRefToSave.put(refId, thisBiblioRef);\r
+                                       }\r
+                                       \r
+                                       \r
+//                                     success &= makeSingleReferenceRecord(rs, state, partitioner, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences, refCounter);\r
+                               } // end resultSet\r
+                                                               \r
+                               //for the concept reference a fixed uuid may be needed -> change uuid\r
+                               Integer sourceSecId = (Integer) state.getConfig().getSourceSecId();\r
+                               Reference<?> sec = biblioRefToSave.get(sourceSecId);\r
+                               if (sec == null){\r
+                                       sec = nomRefToSave.get(sourceSecId);    \r
+                               }\r
+                               if (sec != null){\r
+                                       sec.setUuid(state.getConfig().getSecUuid());\r
+                                       logger.info("SecUuid changed to: " + state.getConfig().getSecUuid());\r
+                               }\r
+                               \r
+                               //save and store in map\r
+                               logger.info("Save nomenclatural references (" + refCounter.nomRefCount + ")");\r
+                               getReferenceService().save(nomRefToSave.values());\r
+                               logger.info("Save bibliographical references (" + refCounter.referenceCount +")");\r
+                               getReferenceService().save(biblioRefToSave.values());\r
+                               \r
+//                     }//end resultSetList    \r
+\r
+                       logger.info("end makeReferences ..." + getSuccessString(success));;\r
+                       return success;\r
+               } catch (SQLException e) {\r
+                       logger.error("SQLException:" +  e);\r
+                       return false;\r
+               }\r
+       }\r
+\r
+\r
+       \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)\r
         */\r
@@ -351,6 +503,8 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                        while (rs.next()){\r
                                handleForeignKey(rs, teamIdSet, "NomAuthorTeamFk");\r
                                handleForeignKey(rs, referenceIdSet, "InRefFk");\r
+                               //TODO only needed in second path but state not available here to check if state is second path\r
+                               handleForeignKey(rs, referenceIdSet, "refId");\r
                        }\r
                        \r
                        //team map\r
@@ -601,7 +755,9 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                if (inRefFk != null){\r
                        if (inRefCategoryFk == REF_JOURNAL){\r
                                int inRefFkInt = (Integer)inRefFk;\r
-                               if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
+                               if (true){\r
+                                       //changed for first/second path implementation, if this is successful the following code can be deleted\r
+                               }else if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
                                        Reference<?> inJournal = getReferenceFromMaps(inRefFkInt, nomRefToSave, relatedNomReferences);\r
                                        if (inJournal == null){\r
                                                inJournal = getReferenceFromMaps(inRefFkInt, biblioRefToSave, relatedBiblioReferences);\r
@@ -639,14 +795,14 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                \r
                if (inRefCategoryFk == null){\r
                        //null -> error\r
-                       logger.warn("Part-Of-Other-Title has not inRefCategoryFk! RefId = " + refId + ". ReferenceType set to Generic.");\r
+                       logger.warn("Part-Of-Other-Title has no inRefCategoryFk! RefId = " + refId + ". ReferenceType set to Generic.");\r
                        result = makeUnknown(valueMap);\r
                }else if (inRefCategoryFk == REF_BOOK){\r
                        //BookSection\r
                        IBookSection bookSection = ReferenceFactory.newBookSection();\r
-                       result = (Reference)bookSection;\r
-                       if (inRefFk != null){\r
-                               int inRefFkInt = (Integer)inRefFk;\r
+                       result = (Reference<?>)bookSection;\r
+                       if (inRefFk != null && false){   //&& false added for first/second path implementation, following code can be deleted or moved if this is successful\r
+                               int inRefFkInt = (Integer) inRefFk;\r
                                if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
                                        Reference<?> inBook = getReferenceFromMaps(inRefFkInt, nomRefToSave, relatedNomReferences);\r
                                        if (inBook == null){\r
@@ -714,14 +870,14 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
 \r
        private Reference<?> makeWebSite(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'Website'");}\r
-               Reference webPage = ReferenceFactory.newWebPage();\r
+               Reference<?> webPage = ReferenceFactory.newWebPage();\r
                makeStandardMapper(valueMap, webPage); //placePublished, publisher\r
                return webPage;\r
        }\r
        \r
        private Reference<?> makeUnknown(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'Unknown'");}\r
-               Reference generic = ReferenceFactory.newGeneric();\r
+               Reference<?> generic = ReferenceFactory.newGeneric();\r
 //             generic.setSeries(series);\r
                makeStandardMapper(valueMap, generic); //pages, placePublished, publisher, series, volume\r
                return generic;\r
@@ -729,7 +885,7 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
 \r
        private Reference<?> makeInformal(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'Informal'");}\r
-               Reference generic = ReferenceFactory.newGeneric();\r
+               Reference<?> generic = ReferenceFactory.newGeneric();\r
 //             informal.setSeries(series);\r
                makeStandardMapper(valueMap, generic);//editor, pages, placePublished, publisher, series, volume\r
                String informal = (String)valueMap.get("InformalRefCategory".toLowerCase());\r
@@ -768,7 +924,7 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                                Map<String, Reference> relatedBiblioReferences, \r
                                Map<String, Reference> relatedNomReferences){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'Book'");}\r
-               Reference book = ReferenceFactory.newBook();\r
+               Reference<?> book = ReferenceFactory.newBook();\r
                Integer refId = (Integer)valueMap.get("refId".toLowerCase());\r
                \r
                //Set bookAttributes = new String[]{"edition", "isbn", "pages","publicationTown","publisher","volume"};\r
@@ -792,7 +948,7 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                }\r
                Object inRefFk = valueMap.get("inRefFk".toLowerCase());\r
                //Series (as Reference)\r
-               if (inRefFk != null){\r
+               if (inRefFk != null && false){  //&&false added for first/second path implementation, following code may be removed if this is successful\r
                        int inRefFkInt = (Integer)inRefFk;\r
                        if (existsInMapOrToSave(inRefFkInt, biblioRefToSave, nomRefToSave, relatedBiblioReferences, relatedNomReferences)){\r
                                Reference<?> inSeries = getReferenceFromMaps(inRefFkInt, nomRefToSave, relatedNomReferences);\r
@@ -838,7 +994,7 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
                        int inRefFkInt,\r
                        Map<Integer, Reference> refToSaveMap,\r
                        Map<String, Reference> relatedRefMap) {\r
-               Reference result = null;\r
+               Reference<?> result = null;\r
                result = refToSaveMap.get(inRefFkInt);\r
                if (result == null){\r
                        result = relatedRefMap.get(String.valueOf(inRefFkInt));\r
@@ -848,21 +1004,21 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
 \r
        private Reference<?> makePrintSeries(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'PrintSeries'");}\r
-               Reference printSeries = ReferenceFactory.newPrintSeries();\r
+               Reference<?> printSeries = ReferenceFactory.newPrintSeries();\r
                makeStandardMapper(valueMap, printSeries, null);\r
                return printSeries;\r
        }\r
        \r
        private Reference<?> makeProceedings(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'Proceedings'");}\r
-               Reference proceedings = ReferenceFactory.newProceedings();\r
+               Reference<?> proceedings = ReferenceFactory.newProceedings();\r
                makeStandardMapper(valueMap, proceedings, null);        \r
                return proceedings;\r
        }\r
 \r
        private Reference<?> makeThesis(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'Thesis'");}\r
-               Reference thesis = ReferenceFactory.newThesis();\r
+               Reference<?> thesis = ReferenceFactory.newThesis();\r
                makeStandardMapper(valueMap, thesis, null);     \r
                return thesis;\r
        }\r
@@ -871,7 +1027,7 @@ public class BerlinModelReferenceImport extends BerlinModelImportBase {
        private Reference<?> makeJournalVolume(Map<String, Object> valueMap){\r
                if (logger.isDebugEnabled()){logger.debug("RefType 'JournalVolume'");}\r
                //Proceedings proceedings = Proceedings.NewInstance();\r
-               Reference journalVolume = ReferenceFactory.newGeneric();\r
+               Reference<?> journalVolume = ReferenceFactory.newGeneric();\r
                makeStandardMapper(valueMap, journalVolume, null);      \r
                logger.warn("Journal volumes not yet implemented. Generic created instead but with errors");\r
                return journalVolume;\r