Project

General

Profile

Download (6.16 KB) Statistics
| Branch: | Tag: | Revision:
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.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.List;
15

    
16
import org.apache.log4j.Logger;
17

    
18
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
19
import eu.etaxonomy.cdm.app.common.CdmDestinations;
20
import eu.etaxonomy.cdm.common.AccountStore;
21
import eu.etaxonomy.cdm.common.CdmUtils;
22
import eu.etaxonomy.cdm.io.common.Source;
23
import eu.etaxonomy.cdm.model.agent.Person;
24
import eu.etaxonomy.cdm.model.common.Annotation;
25
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
26
import eu.etaxonomy.cdm.model.media.ImageFile;
27
import eu.etaxonomy.cdm.model.media.Media;
28
import eu.etaxonomy.cdm.model.name.BotanicalName;
29
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
30
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
31
import eu.etaxonomy.cdm.model.occurrence.Specimen;
32
import eu.etaxonomy.cdm.model.reference.IDatabase;
33
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
34
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
35
import eu.etaxonomy.cdm.model.taxon.Taxon;
36
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
37

    
38
/**
39
 * @author AM
40
 * @created 08.05.2008
41
 * @version 1.0
42
 */
43
public class ViennaActivator {
44
	private static final Logger logger = Logger.getLogger(ViennaActivator.class);
45
	
46
	static final Source berlinModelSource = ViennaActivator.VIENNA();
47
	
48
	
49
	public static Source VIENNA(){
50
		//	Vienna Asteraceae
51
		String dbms = "ODBC";
52
		String strServer = "AsteraceaeViennaAccess";
53
		String strDB = "AsteraceaeViennaAccess";
54
		String userName = "webUser";
55
		return  makeSource(dbms, strServer, strDB, -1, userName, null);
56
	}
57
	
58
	public boolean invoke(){
59
		boolean result = true;
60
		boolean withCdm = false;
61
		berlinModelSource.setQuery("SELECT * FROM vienna"); // WHERE ID1 <> 1
62
		CdmApplicationController app = null;
63
		
64
		
65
		try {
66
			if (withCdm){
67
				app = CdmApplicationController.NewInstance(CdmDestinations.cdm_test_patricia());
68
			}else{
69
				//app = CdmApplicationController.NewInstance(DbSchemaValidation.VALIDATE);
70
			}
71
		} catch (Exception e1) {
72
			e1.printStackTrace();
73
			result = false;
74
			return result;
75
		}
76
		
77
			
78
		ResultSet rs = berlinModelSource.getResultSet();
79
		try {
80
			while (rs.next()){
81
				String uriPath = "http://131.130.131.9/database/img/imgBrowser.php?ID=";
82
				int id = rs.getInt("ID");
83
				String strId = String.valueOf(id);
84
				String catalogNumber = rs.getString("catalogueNumber");
85
				String strTaxonName = rs.getString("TaxonName");
86
				String annotation = rs.getString("Annotation");
87
				String typeInformation = rs.getString("TypeInformation");
88
				String typifiedBy = rs.getString("TypifiedBy");
89
				String family = rs.getString("Family");
90
				String strActor = rs.getString("Actor");
91
				String timePeriod = rs.getString("TimePeriod");
92
				String collectingArea = rs.getString("CollectingArea");
93
				String locality = rs.getString("Locality");
94
				String assigned = rs.getString("assigned");
95
				String history = rs.getString("history");
96
				
97
				if (! family.equals("Asteraceae")){
98
					logger.warn("Family not Asteracea: ID= " + strId);
99
				}
100
				ReferenceFactory refFactory = ReferenceFactory.newInstance();
101
				ReferenceBase sec = refFactory.newDatabase();
102
				sec.setTitleCache("Vienna Asteraceae Images", true);
103
				
104
				TaxonNameBase taxonName = (BotanicalName)NonViralNameParserImpl.NewInstance().parseFullName(strTaxonName);
105
				if (withCdm){
106
					List<TaxonNameBase> names = app.getNameService().getNamesByName(strTaxonName);
107
					if (names.size() == 0){
108
						logger.warn("Name not found: " + strTaxonName);
109
					}else{
110
						if (names.size() > 1){
111
							logger.warn("More then 1 name found: " + strTaxonName);
112
						}
113
						taxonName = names.get(0);
114
					}
115
				}
116
				Taxon taxon = Taxon.NewInstance(taxonName, sec);
117
				
118
				logger.info("Create new specimen ...");
119
				Specimen specimen = Specimen.NewInstance();
120
				specimen.setCatalogNumber(catalogNumber);
121
				specimen.setStoredUnder(taxonName);   //??
122
				//TODO
123
				//specimen.setCollection(collection);
124
				specimen.addAnnotation(Annotation.NewDefaultLanguageInstance(annotation));
125
				specimen.addDetermination(getDetermination(taxon, strActor));
126
				specimen.addMedia(getMedia(uriPath, strId));
127
				
128
				//Original ID
129
				specimen.addSource(IdentifiableSource.NewInstance(strId));
130
				
131
				
132
			}
133
		} catch (SQLException e) {
134
			logger.warn("Error when reading record!!");
135
			e.printStackTrace();
136
			result = false;
137
		}
138
		return result;
139
	}
140
	
141
	private Media getMedia(String uriPath, String id){
142
		//"http://131.130.131.9/database/img/imgBrowser.php?ID=50599";
143
		String uri = uriPath + id;
144
		if (CdmUtils.urlExists(uri, false)){
145
			String suffix = "jpg";
146
			String mimeType = "image/jpg";
147
			Media media = ImageFile.NewMediaInstance(null, null, uri, mimeType, suffix,  null, null, null);
148
			return media;
149
		}else{
150
			logger.warn("URI does not exist: " + uri);
151
			return null;
152
		}
153
	}
154
	
155
	private DeterminationEvent getDetermination(Taxon taxon, String actor){
156
		logger.info("Create determination event");
157
		DeterminationEvent determinationEvent = DeterminationEvent.NewInstance();
158
		determinationEvent.setTaxon(taxon);
159
		Person person = Person.NewTitledInstance(actor);
160
		determinationEvent.setActor(person);
161
		return determinationEvent;
162
	}
163
	
164
	
165
	
166
	/**
167
	 * @param args
168
	 */
169
	public static void main(String[] args) {
170
		ViennaActivator viennaAct = new ViennaActivator();
171
		viennaAct.invoke();
172
	}
173
	
174
	
175
	/**
176
	 * Initialises source
177
	 * @return true, if connection established
178
	 */
179
	private static Source makeSource(String dbms, String strServer, String strDB, int port, String userName, String pwd ){
180
		//establish connection
181
		pwd = AccountStore.readOrStorePassword(dbms, strServer, userName, pwd);
182
		Source source = new Source(dbms, strServer, strDB);
183
		source.setPort(port);
184
		source.setUserAndPwd(userName, pwd);
185
		return source;
186
	}
187
}
    (1-1/1)