Remove generics from Reference in cdmlib-app #5830
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / app / viennaImport / ViennaActivator.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.app.viennaImport;
11
12 import java.net.URI;
13 import java.net.URISyntaxException;
14 import java.sql.ResultSet;
15 import java.sql.SQLException;
16 import java.util.List;
17
18 import org.apache.log4j.Logger;
19
20 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
21 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
22 import eu.etaxonomy.cdm.app.common.CdmDestinations;
23 import eu.etaxonomy.cdm.common.AccountStore;
24 import eu.etaxonomy.cdm.common.CdmUtils;
25 import eu.etaxonomy.cdm.io.common.Source;
26 import eu.etaxonomy.cdm.model.agent.Person;
27 import eu.etaxonomy.cdm.model.common.Annotation;
28 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
29 import eu.etaxonomy.cdm.model.media.ImageFile;
30 import eu.etaxonomy.cdm.model.media.Media;
31 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
32 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
33 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
34 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
35 import eu.etaxonomy.cdm.model.reference.Reference;
36 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
37 import eu.etaxonomy.cdm.model.taxon.Taxon;
38 import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
39
40 /**
41 * @author AM
42 * @created 08.05.2008
43 * @version 1.0
44 */
45 public class ViennaActivator {
46 private static final Logger logger = Logger.getLogger(ViennaActivator.class);
47
48 static final Source berlinModelSource = ViennaActivator.VIENNA();
49
50
51 public static Source VIENNA(){
52 // Vienna Asteraceae
53 String dbms = "ODBC";
54 String strServer = "AsteraceaeViennaAccess";
55 String strDB = "AsteraceaeViennaAccess";
56 String userName = "webUser";
57 return makeSource(dbms, strServer, strDB, -1, userName, null);
58 }
59
60 public boolean invoke(){
61 boolean result = true;
62 boolean withCdm = false;
63 berlinModelSource.setQuery("SELECT * FROM vienna"); // WHERE ID1 <> 1
64 CdmApplicationController app = null;
65
66
67 try {
68 if (withCdm){
69 app = CdmApplicationController.NewInstance(CdmDestinations.localH2());
70 }else{
71 //app = CdmApplicationController.NewInstance(DbSchemaValidation.VALIDATE);
72 }
73 } catch (Exception e1) {
74 e1.printStackTrace();
75 result = false;
76 return result;
77 }
78
79
80 ResultSet rs = berlinModelSource.getResultSet();
81 try {
82 while (rs.next()){
83 String uriPath = "http://131.130.131.9/database/img/imgBrowser.php?ID=";
84 int id = rs.getInt("ID");
85 String strId = String.valueOf(id);
86 String catalogNumber = rs.getString("catalogueNumber");
87 String strTaxonName = rs.getString("TaxonName");
88 String annotation = rs.getString("Annotation");
89 String typeInformation = rs.getString("TypeInformation");
90 String typifiedBy = rs.getString("TypifiedBy");
91 String family = rs.getString("Family");
92 String strActor = rs.getString("Actor");
93 String timePeriod = rs.getString("TimePeriod");
94 String collectingArea = rs.getString("CollectingArea");
95 String locality = rs.getString("Locality");
96 String assigned = rs.getString("assigned");
97 String history = rs.getString("history");
98
99 if (! family.equals("Asteraceae")){
100 logger.warn("Family not Asteracea: ID= " + strId);
101 }
102 Reference sec = ReferenceFactory.newDatabase();
103 sec.setTitleCache("Vienna Asteraceae Images", true);
104
105 TaxonNameBase<?,?> taxonName = NonViralNameParserImpl.NewInstance().parseFullName(strTaxonName);
106 if (withCdm){
107 List<TaxonNameBase> names = app.getNameService().getNamesByName(strTaxonName);
108 if (names.size() == 0){
109 logger.warn("Name not found: " + strTaxonName);
110 }else{
111 if (names.size() > 1){
112 logger.warn("More then 1 name found: " + strTaxonName);
113 }
114 taxonName = names.get(0);
115 }
116 }
117 Taxon taxon = Taxon.NewInstance(taxonName, sec);
118
119 logger.info("Create new specimen ...");
120 DerivedUnit specimenx = DerivedUnit.NewPreservedSpecimenInstance();
121 DerivedUnitFacade specimen = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
122
123 specimen.setCatalogNumber(catalogNumber);
124 specimen.setStoredUnder(taxonName); //??
125 //TODO
126 //specimen.setCollection(collection);
127 specimen.addAnnotation(Annotation.NewDefaultLanguageInstance(annotation));
128 specimen.addDetermination(getDetermination(taxon, strActor));
129 specimen.addDerivedUnitMedia(getMedia(uriPath, strId));
130
131 //Original ID
132 specimen.addSource(IdentifiableSource.NewDataImportInstance(strId));
133
134
135 }
136 } catch (SQLException e) {
137 logger.warn("Error when reading record!!");
138 e.printStackTrace();
139 result = false;
140 }
141 return result;
142 }
143
144 private Media getMedia(String uriPath, String id){
145 //"http://131.130.131.9/database/img/imgBrowser.php?ID=50599";
146 String uriString = uriPath + id;
147 if (CdmUtils.urlExists(uriString, false)){
148 String suffix = "jpg";
149 String mimeType = "image/jpg";
150 URI uri = null;
151 try {
152 uri = new URI(uriString);
153 } catch (URISyntaxException e) {
154 e.printStackTrace();
155 }
156 Media media = ImageFile.NewMediaInstance(null, null, uri, mimeType, suffix, null, null, null);
157 return media;
158 }else{
159 logger.warn("URI does not exist: " + uriString);
160 return null;
161 }
162 }
163
164 private DeterminationEvent getDetermination(Taxon taxon, String actor){
165 logger.info("Create determination event");
166 DeterminationEvent determinationEvent = DeterminationEvent.NewInstance();
167 determinationEvent.setTaxon(taxon);
168 Person person = Person.NewTitledInstance(actor);
169 determinationEvent.setActor(person);
170 return determinationEvent;
171 }
172
173
174
175 /**
176 * @param args
177 */
178 public static void main(String[] args) {
179 ViennaActivator viennaAct = new ViennaActivator();
180 viennaAct.invoke();
181 }
182
183
184 /**
185 * Initialises source
186 * @return true, if connection established
187 */
188 private static Source makeSource(String dbms, String strServer, String strDB, int port, String userName, String pwd ){
189 //establish connection
190 pwd = AccountStore.readOrStorePassword(dbms, strServer, userName, pwd);
191 Source source = new Source(dbms, strServer, strDB);
192 source.setPort(port);
193 source.setUserAndPwd(userName, pwd);
194 return source;
195 }
196 }