2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
.redlist
.bfnXml
.in
;
12 import java
.util
.Arrays
;
13 import java
.util
.List
;
15 import org
.apache
.log4j
.Logger
;
16 import org
.jdom
.Element
;
17 import org
.springframework
.stereotype
.Component
;
18 import org
.springframework
.transaction
.TransactionStatus
;
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
.TimePeriod
;
24 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
25 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
26 import eu
.etaxonomy
.cdm
.strategy
.parser
.TimePeriodParser
;
34 public class BfnXmlImportMetaData
extends BfnXmlImportBase
implements ICdmIO
<BfnXmlImportState
> {
36 private static final long serialVersionUID
= 4180700081829559594L;
37 private static final Logger logger
= Logger
.getLogger(BfnXmlImportMetaData
.class);
38 private String sourceFileName
;
39 private String debVersion
;
40 private String timeStamp
;
42 public BfnXmlImportMetaData(){
47 public boolean doCheck(BfnXmlImportState state
){
48 boolean result
= true;
49 //TODO needs to be implemented
54 public void doInvoke(BfnXmlImportState state
){
55 logger
.info("start import MetaData...");
57 //TODO only dirty quick fix for now
58 state
.setFirstClassificationName(state
.getConfig().getClassificationName());
60 ResultWrapper
<Boolean
> success
= ResultWrapper
.NewInstance(true);
62 BfnXmlImportConfigurator config
= state
.getConfig();
64 state
.setFirstListSecRef(null);
66 Element elDataSet
= getDataSetElement(config
);
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());
74 debVersion
= elDataSet
.getAttributeValue("debversion");
75 timeStamp
= elDataSet
.getAttributeValue("timestamp");
77 Reference sourceReference
= ReferenceFactory
.newGeneric();
78 sourceReference
.setTitle(sourceFileName
);
79 TimePeriod parsedTimePeriod
= TimePeriodParser
.parseString(timeStamp
);
80 sourceReference
.setDatePublished(parsedTimePeriod
);
81 state
.setCompleteSourceRef(sourceReference
);
84 List
<?
> contentXML
= elDataSet
.getContent();
85 Element currentElement
= null;
86 for(Object object
:contentXML
){
88 if(object
instanceof Element
){
89 currentElement
= (Element
)object
;
91 if(currentElement
.getName().equalsIgnoreCase("METADATEN")){
93 TransactionStatus tx
= startTransaction();
95 @SuppressWarnings("unchecked")
96 List
<Element
> elMetaDataList
= currentElement
.getChildren();
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
);
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
);
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
);
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
);
134 logger
.warn("end import MetaData ...");
135 commitTransaction(tx
);
137 if (!success
.getValue()){
138 state
.setUnsuccessfull();
140 //FIXME: Only take the first RoteListeData Features
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
);
162 private String
retrieveFileName(String uri
) {
163 String
[] splits
= uri
.split("/");
164 return splits
[splits
.length
- 1 ];
168 protected boolean isIgnore(BfnXmlImportState state
) {
169 return ! state
.getConfig().isDoMetaData();