View Javadoc

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 }