Project

General

Profile

Download (7.14 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
package eu.etaxonomy.cdm.io.tcsrdf;
10

    
11
import java.util.ArrayList;
12
import java.util.Iterator;
13
import java.util.List;
14
import java.util.Set;
15

    
16
import org.apache.log4j.Logger;
17
import org.jdom.Attribute;
18
import org.jdom.Element;
19
import org.jdom.Namespace;
20
import org.jdom.filter.ElementFilter;
21
import org.jdom.filter.Filter;
22
import org.springframework.stereotype.Component;
23

    
24
import com.hp.hpl.jena.rdf.model.Model;
25

    
26
import eu.etaxonomy.cdm.api.service.ITaxonService;
27
import eu.etaxonomy.cdm.common.XmlHelp;
28
import eu.etaxonomy.cdm.io.common.ICdmIO;
29
import eu.etaxonomy.cdm.io.common.ImportHelper;
30
import eu.etaxonomy.cdm.io.common.MapWrapper;
31
import eu.etaxonomy.cdm.io.common.TdwgAreaProvider;
32
import eu.etaxonomy.cdm.model.common.OriginalSourceType;
33
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
34
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
35
import eu.etaxonomy.cdm.model.description.Distribution;
36
import eu.etaxonomy.cdm.model.description.Feature;
37
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
38
import eu.etaxonomy.cdm.model.description.PresenceTerm;
39
import eu.etaxonomy.cdm.model.description.TaxonDescription;
40
import eu.etaxonomy.cdm.model.location.NamedArea;
41
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
42
import eu.etaxonomy.cdm.model.reference.Reference;
43
import eu.etaxonomy.cdm.model.taxon.Synonym;
44
import eu.etaxonomy.cdm.model.taxon.Taxon;
45
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
46

    
47
/**
48
 * @author a.mueller
49
 * @created 29.05.2008
50
 * @version 1.0
51
 */
52
@Component
53
public class TcsRdfTaxonImport  extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {
54
	private static final Logger logger = Logger.getLogger(TcsRdfTaxonImport.class);
55

    
56
	private static int modCount = 30000;
57
	
58
	public TcsRdfTaxonImport(){
59
		super();
60
	}
61
	
62
	
63
	@Override
64
	public boolean doCheck(TcsRdfImportState state){
65
		boolean result = true;
66
		logger.warn("Checking for Taxa not yet implemented");
67
		//result &= checkArticlesWithoutJournal(bmiConfig);
68
		//result &= checkPartOfJournal(bmiConfig);
69
		
70
		return result;
71
	}
72
	
73
	protected static CdmSingleAttributeRDFMapperBase[] standardMappers = new CdmSingleAttributeRDFMapperBase[]{
74
//		new CdmTextElementMapper("genusPart", "genusOrUninomial")
75
	
76
	};
77

    
78
	
79
	protected static CdmSingleAttributeRDFMapperBase[] operationalMappers = new CdmSingleAttributeRDFMapperBase[]{
80
		 new CdmUnclearMapper("hasName")
81
		,new CdmUnclearMapper("hasName")
82
		, new CdmUnclearMapper("accordingTo")
83
		, new CdmUnclearMapper("hasRelationship")
84
		, new CdmUnclearMapper("code", nsTgeo)	
85
	};
86
	
87
	protected static CdmSingleAttributeRDFMapperBase[] unclearMappers = new CdmSingleAttributeRDFMapperBase[]{
88
		new CdmUnclearMapper("primary")
89
		, new CdmUnclearMapper("note", nsTcom)	
90
		, new CdmUnclearMapper("taxonStatus", nsTpalm)
91
		
92
		, new CdmUnclearMapper("TaxonName", nsTn)	
93
		, new CdmUnclearMapper("dateOfEntry", nsTpalm)	
94
	};
95
	
96
	
97
	
98
	@Override
99
	protected void doInvoke(TcsRdfImportState state){
100
		
101
		MapWrapper<TaxonBase> taxonMap = (MapWrapper<TaxonBase>)state.getStore(ICdmIO.TAXON_STORE);
102
		MapWrapper<TaxonNameBase> taxonNameMap = (MapWrapper<TaxonNameBase>)state.getStore(ICdmIO.TAXONNAME_STORE);
103
		MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE);
104
		MapWrapper<Reference> nomRefMap = (MapWrapper<Reference>)state.getStore(ICdmIO.NOMREF_STORE);
105
		
106
		String xmlElementName;
107
		String xmlAttributeName;
108
		String elementNamespace;
109
		String attributeNamespace;
110
		
111
		logger.info("start makeTaxa ...");
112
		
113
		TcsRdfImportConfigurator config = state.getConfig();
114
		Model root = config.getSourceRoot();
115
		
116
		String rdfNamespace = config.getRdfNamespaceURIString();
117
		
118
		String idNamespace = "TaxonConcept";
119
		xmlElementName = "TaxonConcept";
120
		elementNamespace = config.getTcNamespaceURIString();
121
		
122
		return;
123
	}
124
	
125
	
126
	/**
127
	 * @param rdfNamespace 
128
	 * @param elTaxonConcept 
129
	 * @return
130
	 */
131
	private boolean isSynonym(Element elTaxonConcept, Namespace tpalmNamespace) {
132
		if (elTaxonConcept == null || ! "TaxonConcept".equalsIgnoreCase(elTaxonConcept.getName()) ){
133
			return false;
134
		}
135
		Element status = elTaxonConcept.getChild("taxonStatus", tpalmNamespace);
136
		if (status == null){
137
			return false;
138
		}else{
139
			String statusText = status.getTextNormalize();
140
			if ("S".equalsIgnoreCase(statusText)){
141
				return true;
142
			}else if ("A".equalsIgnoreCase(statusText)){
143
				return false;
144
			}else if ("C".equalsIgnoreCase(statusText)){
145
				return false;
146
			}else if ("V".equalsIgnoreCase(statusText)){
147
				return false;
148
			}else if ("O".equalsIgnoreCase(statusText)){
149
				return false;
150
			}else if ("U".equalsIgnoreCase(statusText)){
151
				return false;
152
			}else{
153
				logger.warn("Unknown taxon status: " +  statusText);
154
				return false;
155
			}
156
		}
157
	}
158

    
159

    
160
	private boolean hasIsSynonymRelation(Element elTaxonConcept, Namespace rdfNamespace){
161
		boolean result = false;
162
		if (elTaxonConcept == null || ! "TaxonConcept".equalsIgnoreCase(elTaxonConcept.getName()) ){
163
			return false;
164
		}
165
		
166
		String elName = "relationshipCategory";
167
		Filter filter = new ElementFilter(elName, elTaxonConcept.getNamespace());
168
		Iterator<Element> relationshipCategories = elTaxonConcept.getDescendants(filter);
169
		while (relationshipCategories.hasNext()){
170
			Element relationshipCategory = relationshipCategories.next();
171
			Attribute resource = relationshipCategory.getAttribute("resource", rdfNamespace);
172
			String isSynonymFor = "http://rs.tdwg.org/ontology/voc/TaxonConcept#IsSynonymFor";
173
			if (resource != null && isSynonymFor.equalsIgnoreCase(resource.getValue()) ){
174
				return true;
175
			}
176
		}
177
		return result;
178
	}
179
	
180
	private List<DescriptionElementBase> makeGeo(Element elConcept, Namespace geoNamespace, Namespace rdfNamespace){
181
		List<DescriptionElementBase> result = new ArrayList<DescriptionElementBase>();
182
		String xmlElementName = "code";
183
		List<Element> elGeos = elConcept.getChildren(xmlElementName, geoNamespace);
184

    
185
		int i = 0;
186
		//for each geoTag
187
		for (Element elGeo : elGeos){
188
			//if ((i++ % modCount) == 0){ logger.info("Geocodes handled: " + (i-1));}
189
			
190
			String strGeoRegion = elGeo.getAttributeValue("resource", rdfNamespace);
191
			strGeoRegion = strGeoRegion.replace("http://rs.tdwg.org/ontology/voc/GeographicRegion#", "");
192
			NamedArea namedArea = TdwgAreaProvider.getAreaByTdwgAbbreviation(strGeoRegion);
193
			PresenceAbsenceTermBase<?> status = PresenceTerm.PRESENT();
194
			DescriptionElementBase distribution = Distribution.NewInstance(namedArea, status);
195
			distribution.setFeature(Feature.DISTRIBUTION());
196
			//System.out.println(namedArea);
197
			
198
			result.add(distribution);
199
		}
200
		return result;
201
	}
202
	
203
	/* (non-Javadoc)
204
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
205
	 */
206
	protected boolean isIgnore(TcsRdfImportState state){
207
		return ! state.getConfig().isDoTaxa();
208
	}
209

    
210

    
211
}
(10-10/14)