minor
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / redlist / bfnXml / in / BfnXmlImportMetaData.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 package eu.etaxonomy.cdm.io.redlist.bfnXml.in;
10
11 import java.util.Arrays;
12 import java.util.List;
13
14 import org.apache.logging.log4j.LogManager;
15 import org.apache.logging.log4j.Logger;
16 import org.jdom.Element;
17 import org.springframework.stereotype.Component;
18 import org.springframework.transaction.TransactionStatus;
19
20 import eu.etaxonomy.cdm.common.ResultWrapper;
21 import eu.etaxonomy.cdm.io.common.ICdmIO;
22 import eu.etaxonomy.cdm.io.redlist.bfnXml.BfnXmlConstants;
23 import eu.etaxonomy.cdm.model.common.VerbatimTimePeriod;
24 import eu.etaxonomy.cdm.model.reference.Reference;
25 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
26 import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
27
28 /**
29 * @author a.oppermann
30 * @since 04.07.2013
31 */
32 @Component
33 public class BfnXmlImportMetaData extends BfnXmlImportBase implements ICdmIO<BfnXmlImportState> {
34
35 private static final long serialVersionUID = 4180700081829559594L;
36 private static final Logger logger = LogManager.getLogger();
37
38 private String sourceFileName;
39 private String debVersion;
40 private String timeStamp;
41
42 public BfnXmlImportMetaData(){
43 super();
44 }
45
46 @Override
47 public boolean doCheck(BfnXmlImportState state){
48 boolean result = true;
49 //TODO needs to be implemented
50 return result;
51 }
52
53 @Override
54 public void doInvoke(BfnXmlImportState state){
55 logger.info("start import MetaData...");
56
57 //TODO only dirty quick fix for now
58 state.setFirstClassificationName(state.getConfig().getClassificationName());
59
60 ResultWrapper<Boolean> success = ResultWrapper.NewInstance(true);
61
62 BfnXmlImportConfigurator config = state.getConfig();
63
64 state.setFirstListSecRef(null);
65
66 Element elDataSet = getDataSetElement(config);
67
68 //create complete source object
69 if(elDataSet.getName().equalsIgnoreCase(BfnXmlConstants.EL_DEB_EXPORT)){
70 sourceFileName = elDataSet.getAttributeValue("source");
71 if (sourceFileName.equals("rldb_print.xls")){
72 sourceFileName = retrieveFileName(config.getSource().toString());
73 }
74 debVersion = elDataSet.getAttributeValue("debversion");
75 timeStamp = elDataSet.getAttributeValue("timestamp");
76
77 Reference sourceReference = ReferenceFactory.newGeneric();
78 sourceReference.setTitle(sourceFileName);
79 VerbatimTimePeriod parsedTimePeriod = TimePeriodParser.parseStringVerbatim(timeStamp);
80 sourceReference.setDatePublished(parsedTimePeriod);
81 state.setCompleteSourceRef(sourceReference);
82 }
83
84 List<?> contentXML = elDataSet.getContent();
85 Element currentElement = null;
86 for(Object object:contentXML){
87
88 if(object instanceof Element){
89 currentElement = (Element)object;
90
91 if(currentElement.getName().equalsIgnoreCase("METADATEN")){
92
93 TransactionStatus tx = startTransaction();
94
95 @SuppressWarnings("unchecked")
96 List<Element> elMetaDataList = currentElement.getChildren();
97 //for each taxonName
98 for (Element elMetaData : elMetaDataList){
99 if( elMetaData.getAttributeValue(BfnXmlConstants.ATT_STANDARDNAME).equalsIgnoreCase("KurzLit_A")){
100 @SuppressWarnings("unchecked")
101 List<Element> children = elMetaData.getChildren();
102 String kurzlitA = children.get(0).getTextNormalize();
103 Reference secReference = ReferenceFactory.newGeneric();
104 secReference.setTitle(kurzlitA);
105 state.setFirstListSecRef(secReference);
106
107 }
108 else if( elMetaData.getAttributeValue(BfnXmlConstants.ATT_STANDARDNAME).equalsIgnoreCase("Klassifikation_A")){
109 @SuppressWarnings("unchecked")
110 List<Element> children = elMetaData.getChildren();
111 String klassifikation_A = children.get(0).getTextNormalize();
112 state.setFirstClassificationName(klassifikation_A);
113
114 }
115 else if( elMetaData.getAttributeValue(BfnXmlConstants.ATT_STANDARDNAME).equalsIgnoreCase("KurzLit_B")){
116 @SuppressWarnings("unchecked")
117 List<Element> children = elMetaData.getChildren();
118 String kurzlitB = children.get(0).getTextNormalize();
119 Reference secReference = ReferenceFactory.newGeneric();
120 secReference.setTitle(kurzlitB);
121 state.setSecondListSecRef(secReference);
122 }
123 else if( elMetaData.getAttributeValue(BfnXmlConstants.ATT_STANDARDNAME).equalsIgnoreCase("Klassifikation_B")){
124 @SuppressWarnings("unchecked")
125 List<Element> children = elMetaData.getChildren();
126 String classification_B = children.get(0).getTextNormalize();
127 state.setSecondClassificationName(classification_B);
128
129 }
130
131 }
132
133
134 logger.warn("end import MetaData ...");
135 commitTransaction(tx);
136
137 if (!success.getValue()){
138 state.setUnsuccessfull();
139 }
140 //FIXME: Only take the first RoteListeData Features
141
142 return;
143 }
144 }
145 }
146 if (state.getFirstListSecRef() == null){
147 //usage of sourceRefUuid is maybe not 100% correct here as we use it for sec reference
148 Reference secReference = getReferenceService().load(state.getConfig().getSourceRefUuid(), Arrays.asList("authorship.teamMembers"));
149 // Reference secReference = ReferenceFactory.newGeneric();
150 // secReference.setTitle(state.getFirstClassificationName());
151 state.setFirstListSecRef(secReference);
152 state.setCurrentSecundumRef(secReference);
153 }
154 return;
155
156 }
157
158 /**
159 * @param string
160 * @return
161 */
162 private String retrieveFileName(String uri) {
163 String[] splits = uri.split("/");
164 return splits[splits.length - 1 ];
165 }
166
167 @Override
168 protected boolean isIgnore(BfnXmlImportState state) {
169 return ! state.getConfig().isDoMetaData();
170 }
171
172 }