View Javadoc

1   /**
2   * Copyright (C) 2009 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.tcsxml.in;
11  
12  import java.util.List;
13  import java.util.Map;
14  
15  import org.apache.log4j.Logger;
16  import org.jdom.Element;
17  import org.jdom.Namespace;
18  import org.springframework.stereotype.Component;
19  
20  import eu.etaxonomy.cdm.api.service.IReferenceService;
21  import eu.etaxonomy.cdm.common.DoubleResult;
22  import eu.etaxonomy.cdm.common.XmlHelp;
23  import eu.etaxonomy.cdm.io.common.ICdmIO;
24  import eu.etaxonomy.cdm.io.common.IImportConfigurator;
25  import eu.etaxonomy.cdm.io.common.ImportHelper;
26  import eu.etaxonomy.cdm.io.common.MapWrapper;
27  import eu.etaxonomy.cdm.io.tcsrdf.TcsRdfImportState;
28  import eu.etaxonomy.cdm.model.common.CdmBase;
29  import eu.etaxonomy.cdm.model.reference.IGeneric;
30  import eu.etaxonomy.cdm.model.reference.ReferenceBase;
31  import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
32  
33  /**
34   * @author a.mueller
35   *
36   */
37  @Component
38  public class TcsXmlPublicationsImport extends TcsXmlImportBase implements ICdmIO<TcsXmlImportState> {
39  	private static final Logger logger = Logger.getLogger(TcsXmlPublicationsImport.class);
40  
41  	private static int modCount = 1000;
42  	
43  	public TcsXmlPublicationsImport(){
44  		super();
45  	}
46  	
47  	@Override
48  	public boolean doCheck(TcsXmlImportState state){
49  		boolean result = true;
50  		result &= checkArticlesWithoutJournal(state.getConfig());
51  		//result &= checkPartOfJournal(config);
52  		
53  		return result;
54  	}
55  		
56  	private static boolean checkArticlesWithoutJournal(IImportConfigurator bmiConfig){
57  		try {
58  			boolean result = true;
59  			//TODO
60  			//				result = firstRow = false;
61  //			}
62  //			
63  			return result;
64  		} catch (Exception e) {
65  			e.printStackTrace();
66  			return false;
67  		}
68  	}
69  	
70  
71  	
72  	@Override
73  	public boolean doInvoke(TcsXmlImportState state){
74  		
75  		logger.info("start make Publications ...");
76  		boolean success = true;
77  		String childName;
78  		boolean obligatory;
79  	
80  		MapWrapper<ReferenceBase> referenceMap = (MapWrapper<ReferenceBase>)state.getStore(ICdmIO.REFERENCE_STORE);
81  		IReferenceService referenceService = getReferenceService();
82  		
83  		TcsXmlImportConfigurator config = state.getConfig();
84  		Element elDataSet = getDataSetElement(config);
85  		Namespace tcsNamespace = config.getTcsXmlNamespace();
86  		
87  		DoubleResult<Element, Boolean> doubleResult;
88  		childName = "Publications";
89  		obligatory = false;
90  		doubleResult = XmlHelp.getSingleChildElement(elDataSet, childName, tcsNamespace, obligatory);
91  		success &= doubleResult.getSecondResult();
92  		Element elPublications = doubleResult.getFirstResult();
93  		
94  		String tcsElementName = "Publication";
95  		String idNamespace = "Publication";
96  		List<Element> elPublicationList = elPublications.getChildren(tcsElementName, tcsNamespace);
97  		
98  		int i = 0;
99  		//for each taxonName
100 		ReferenceFactory refFactory = ReferenceFactory.newInstance();
101 		for (Element elPublication : elPublicationList){
102 			if ((++i % modCount) == 0){ logger.info("publications handled: " + (i-1));}
103 			
104 			//create TaxonName element
105 			String strId = elPublication.getAttributeValue("id");
106 			
107 			childName = "Simple";
108 			obligatory = true;
109 			doubleResult = XmlHelp.getSingleChildElement(elPublication, childName, tcsNamespace, obligatory);
110 			success &= doubleResult.getSecondResult();
111 			Element elSimple = doubleResult.getFirstResult();
112 
113 			String simple = elSimple.getTextNormalize();
114 			
115 			ReferenceBase reference = refFactory.newGeneric();
116 			reference.setTitleCache(simple, true);
117 
118 			childName = "PublicationDetailed";
119 			obligatory = false;
120 			doubleResult =  XmlHelp.getSingleChildElement(elPublication, childName, tcsNamespace, obligatory);
121 			success &= doubleResult.getSecondResult();
122 			Element elPublicationDetailed = doubleResult.getFirstResult();
123 
124 			success &= config.getPlaceholderClass().makePublicationDetailed(config, elPublicationDetailed, reference);
125 			ImportHelper.setOriginalSource(reference, config.getSourceReference(), strId, idNamespace);
126 			
127 			referenceMap.put(strId, reference);
128 			
129 			
130 		}
131 //		//save and store in map
132 //		logger.info("Save nomenclatural references (" + nomRefCount + ")");
133 //		referenceService.saveReferenceAll(nomRefMap.objects());
134 		logger.info("Save bibliographical references (" + i +")");
135 		referenceService.save(referenceMap.objects());
136 
137 		logger.info("end make publications ...");
138 		return success;
139 	}
140 	
141 	/* (non-Javadoc)
142 	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
143 	 */
144 	protected boolean isIgnore(TcsXmlImportState state){
145 		return (state.getConfig().getDoReferences() == IImportConfigurator.DO_REFERENCES.NONE);
146 	}
147 	
148 }