new source SQLServer2008 added
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / tcsrdf / TcsRdfTaxonNameRelationsImport.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.io.tcsrdf;
11
12 import java.util.HashSet;
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.springframework.stereotype.Component;
21
22 import eu.etaxonomy.cdm.api.service.INameService;
23 import eu.etaxonomy.cdm.io.common.ICdmIO;
24 import eu.etaxonomy.cdm.io.common.MapWrapper;
25 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
26 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
27
28 /**
29 * @author a.mueller
30 * @created 29.05.2008
31 * @version 1.0
32 */
33 @Component
34 public class TcsRdfTaxonNameRelationsImport extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {
35 private static final Logger logger = Logger.getLogger(TcsRdfTaxonNameRelationsImport.class);
36
37 private static int modCount = 5000;
38
39 public TcsRdfTaxonNameRelationsImport(){
40 super();
41 }
42
43 @Override
44 public boolean doCheck(TcsRdfImportState state){
45 boolean result = true;
46 logger.warn("Checking for TaxonNameRelations not yet implemented");
47 //result &= checkArticlesWithoutJournal(tcsConfig);
48 //result &= checkPartOfJournal(tcsConfig);
49
50 return result;
51 }
52
53 @Override
54 public boolean doInvoke(TcsRdfImportState state){
55
56 MapWrapper<TaxonNameBase> taxonNameMap = (MapWrapper<TaxonNameBase>)state.getStore(ICdmIO.TAXONNAME_STORE);
57 MapWrapper<ReferenceBase> referenceMap = (MapWrapper<ReferenceBase>)state.getStore(ICdmIO.REFERENCE_STORE);
58
59 String tcsElementName;
60 Namespace tcsNamespace;
61 String cdmAttrName;
62 String value;
63
64 Set<TaxonNameBase> nameStore = new HashSet<TaxonNameBase>();
65 TcsRdfImportConfigurator config = state.getConfig();
66 Element source = config.getSourceRoot();
67
68 logger.info("start makeNameRelationships ...");
69 INameService nameService = getNameService();
70
71 // <tn:hasBasionym rdf:resource="palm_tn_14530"/>
72
73 Element root = config.getSourceRoot();
74 boolean success =true;
75
76 Namespace rdfNamespace = config.getRdfNamespace();
77 Namespace taxonNameNamespace = config.getTnNamespace();
78
79 List<Element> elTaxonNames = root.getChildren("TaxonName", taxonNameNamespace);
80
81 int i = 0;
82 int nameRelCount = 0;
83 //for each taxonName
84 for (Element elTaxonName : elTaxonNames){
85
86 TaxonNameBase fromName = null;
87 if ((++i % modCount) == 0){ logger.info("Names handled: " + (i-1));}
88
89 //Basionyms
90 tcsElementName = "hasBasionym";
91 tcsNamespace = taxonNameNamespace;
92 List<Element> elBasionymList = elTaxonName.getChildren(tcsElementName, tcsNamespace);
93
94 for (Element elBasionym: elBasionymList){
95 nameRelCount++;
96 logger.debug("BASIONYM "+ nameRelCount);
97 tcsElementName = "resource";
98 tcsNamespace = rdfNamespace;
99 Attribute attrResource = elBasionym.getAttribute(tcsElementName, tcsNamespace);
100 if (attrResource == null){
101 logger.warn("Basionym rdf:resource is missing ! Basionym not set!");
102 continue;
103 }
104 String basionymId = attrResource.getValue();
105 TaxonNameBase basionym = taxonNameMap.get(basionymId);
106 if (basionym == null){
107 logger.warn("Basionym name ("+basionymId+") not found in Map! Basionym not set!");
108 continue;
109 }
110 if (fromName == null){
111 Attribute about = elTaxonName.getAttribute("about", rdfNamespace);
112 if (about != null){
113 fromName = taxonNameMap.get(about.getValue() );
114 }
115 if (fromName == null){
116 logger.warn("From name ("+about+") not found in Map! Basionym not set!");
117 continue;
118 }
119 }
120 String ruleConcidered = null; //TODO
121 String microCitation = null; //TODO;
122 ReferenceBase citation = null; //TODO;
123 fromName.addBasionym(basionym, citation, microCitation, ruleConcidered);
124 nameStore.add(fromName);
125
126 }
127 }// end Basionyms
128
129 //Other Relations
130 //TODO
131
132 logger.info(nameRelCount + " nameRelations handled");
133 nameService.save(nameStore);
134 logger.info("end makeNameRelationships ...");
135 return success;
136 }
137
138 /* (non-Javadoc)
139 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
140 */
141 protected boolean isIgnore(TcsRdfImportState state){
142 return ! state.getConfig().isDoRelNames();
143 }
144
145 }