--- /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.app.viennaImport;\r
+\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
+import eu.etaxonomy.cdm.app.berlinModelImport.AccountStore;\r
+import eu.etaxonomy.cdm.app.berlinModelImport.BerlinModelSources;\r
+import eu.etaxonomy.cdm.app.berlinModelImport.CdmDestinations;\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
+import eu.etaxonomy.cdm.io.source.Source;\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.common.Annotation;\r
+import eu.etaxonomy.cdm.model.common.OriginalSource;\r
+import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;\r
+import eu.etaxonomy.cdm.model.media.ImageFile;\r
+import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
+import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;\r
+import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
+import eu.etaxonomy.cdm.model.reference.Database;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;\r
+\r
+/**\r
+ * @author AM\r
+ * @created 08.05.2008\r
+ * @version 1.0\r
+ */\r
+public class ViennaActivator {\r
+ private static final Logger logger = Logger.getLogger(ViennaActivator.class);\r
+ \r
+ static final Source berlinModelSource = ViennaActivator.VIENNA();\r
+ \r
+ \r
+ public static Source VIENNA(){\r
+ // Vienna Asteraceae\r
+ String dbms = "ODBC";\r
+ String strServer = "AsteraceaeViennaAccess";\r
+ String strDB = "AsteraceaeViennaAccess";\r
+ String userName = "webUser";\r
+ return makeSource(dbms, strServer, strDB, -1, userName, null);\r
+ }\r
+ \r
+ public boolean invoke(){\r
+ boolean result = true;\r
+ boolean withCdm = false;\r
+ berlinModelSource.setQuery("SELECT * FROM vienna"); // WHERE ID1 <> 1\r
+ CdmApplicationController app = null;\r
+ \r
+ \r
+ try {\r
+ if (withCdm){\r
+ app = CdmApplicationController.NewInstance(CdmDestinations.cdm_edit_cichorieae());\r
+ }else{\r
+ //app = CdmApplicationController.NewInstance(DbSchemaValidation.VALIDATE);\r
+ }\r
+ } catch (Exception e1) {\r
+ e1.printStackTrace();\r
+ result = false;\r
+ return result;\r
+ }\r
+ \r
+ \r
+ ResultSet rs = berlinModelSource.getResultSet();\r
+ try {\r
+ while (rs.next()){\r
+ String uriPath = "http://131.130.131.9/database/img/imgBrowser.php?ID=";\r
+ int id = rs.getInt("ID");\r
+ String strId = String.valueOf(id);\r
+ String catalogNumber = rs.getString("catalogueNumber");\r
+ String strTaxonName = rs.getString("TaxonName");\r
+ String annotation = rs.getString("Annotation");\r
+ String typeInformation = rs.getString("TypeInformation");\r
+ String typifiedBy = rs.getString("TypifiedBy");\r
+ String family = rs.getString("Family");\r
+ String strActor = rs.getString("Actor");\r
+ String timePeriod = rs.getString("TimePeriod");\r
+ String collectingArea = rs.getString("CollectingArea");\r
+ String locality = rs.getString("Locality");\r
+ String assigned = rs.getString("assigned");\r
+ String history = rs.getString("history");\r
+ \r
+ if (! family.equals("Asteraceae")){\r
+ logger.warn("Family not Asteracea: ID= " + strId);\r
+ }\r
+ \r
+ ReferenceBase sec = Database.NewInstance();\r
+ sec.setTitleCache("Vienna Asteraceae Images");\r
+ \r
+ TaxonNameBase taxonName = (BotanicalName)NonViralNameParserImpl.NewInstance().parseFullName(strTaxonName);\r
+ if (withCdm){\r
+ List<TaxonNameBase> names = app.getNameService().getNamesByName(strTaxonName);\r
+ if (names.size() == 0){\r
+ logger.warn("Name not found: " + strTaxonName);\r
+ }else{\r
+ if (names.size() > 1){\r
+ logger.warn("More then 1 name found: " + strTaxonName);\r
+ }\r
+ taxonName = names.get(0);\r
+ }\r
+ }\r
+ Taxon taxon = Taxon.NewInstance(taxonName, sec);\r
+ \r
+ logger.info("Create new specimen ...");\r
+ Specimen specimen = Specimen.NewInstance();\r
+ specimen.setCatalogNumber(catalogNumber);\r
+ specimen.setStoredUnder(taxonName); //??\r
+ //TODO\r
+ //specimen.setCollection(collection);\r
+ specimen.addAnnotation(Annotation.NewDefaultLanguageInstance(annotation));\r
+ specimen.addDetermination(getDetermination(taxon, strActor));\r
+ specimen.addMedia(getMedia(uriPath, strId));\r
+ \r
+ //Original ID\r
+ specimen.addSource(OriginalSource.NewInstance(strId));\r
+ \r
+ \r
+ }\r
+ } catch (SQLException e) {\r
+ logger.warn("Error when reading record!!");\r
+ e.printStackTrace();\r
+ result = false;\r
+ }\r
+ return result;\r
+ }\r
+ \r
+ private Media getMedia(String uriPath, String id){\r
+ //"http://131.130.131.9/database/img/imgBrowser.php?ID=50599";\r
+ String uri = uriPath + id;\r
+ if (CdmUtils.urlExists(uri, false)){\r
+ String suffix = "jpg";\r
+ String mimeType = "image/jpg";\r
+ Media media = ImageFile.NewMediaInstance(null, null, uri, mimeType, suffix, null, null, null);\r
+ return media;\r
+ }else{\r
+ logger.warn("URI does not exist: " + uri);\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ private DeterminationEvent getDetermination(Taxon taxon, String actor){\r
+ logger.info("Create determination event");\r
+ DeterminationEvent determinationEvent = DeterminationEvent.NewInstance();\r
+ determinationEvent.setTaxon(taxon);\r
+ Person person = Person.NewTitledInstance(actor);\r
+ determinationEvent.setActor(person);\r
+ return determinationEvent;\r
+ }\r
+ \r
+ \r
+ \r
+ /**\r
+ * @param args\r
+ */\r
+ public static void main(String[] args) {\r
+ ViennaActivator viennaAct = new ViennaActivator();\r
+ viennaAct.invoke();\r
+ }\r
+ \r
+ \r
+ /**\r
+ * Initialises source\r
+ * @return true, if connection established\r
+ */\r
+ private static Source makeSource(String dbms, String strServer, String strDB, int port, String userName, String pwd ){\r
+ //establish connection\r
+ Source source = null;\r
+ AccountStore accounts = new AccountStore();\r
+ boolean doStore = false;\r
+ try {\r
+ source = new Source(dbms, strServer, strDB);\r
+ source.setPort(port);\r
+ \r
+ if (pwd == null){\r
+ pwd = accounts.getPassword(dbms, strServer, userName);\r
+ if(pwd == null){\r
+ doStore = true;\r
+ pwd = CdmUtils.readInputLine("Please insert password for " + CdmUtils.Nz(userName) + ": ");\r
+ } else {\r
+ logger.info("using stored password for "+CdmUtils.Nz(userName));\r
+ }\r
+ }\r
+ source.setUserAndPwd(userName, pwd);\r
+ // on success store userName, pwd in property file\r
+ if(doStore){\r
+ accounts.setPassword(dbms, strServer, userName, pwd);\r
+ //logger.info("password stored in "+accounts.accountsFile);\r
+ }\r
+ } catch (Exception e) {\r
+ if(doStore){\r
+ accounts.removePassword(dbms, strServer, userName);\r
+ //logger.info("password removed from "+accounts.accountsFile);\r
+ }\r
+ logger.error(e);\r
+ }\r
+ // write pwd to account store\r
+ return source;\r
+ }\r
+}\r