Project

General

Profile

Download (5.71 KB) Statistics
| Branch: | Revision:
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.redlist.bfnXml.in;
11

    
12
import java.util.Arrays;
13
import java.util.List;
14

    
15
import org.apache.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.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;
27
/**
28
 *
29
 * @author a.oppermann
30
 * @date 04.07.2013
31
 *
32
 */
33
@Component
34
public class BfnXmlImportMetaData extends BfnXmlImportBase implements ICdmIO<BfnXmlImportState> {
35

    
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;
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
			TimePeriod parsedTimePeriod = TimePeriodParser.parseString(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
}
(5-5/9)