Project

General

Profile

Download (6.77 KB) Statistics
| Branch: | Tag: | 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.common;
11

    
12
import java.util.HashMap;
13
import java.util.Map;
14

    
15
import org.apache.log4j.Logger;
16
import org.springframework.beans.BeansException;
17
import org.springframework.context.ApplicationContext;
18
import org.springframework.context.ApplicationContextAware;
19
import org.springframework.stereotype.Component;
20

    
21
import eu.etaxonomy.cdm.api.service.IService;
22
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
23
import eu.etaxonomy.cdm.model.agent.Person;
24
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
27
import eu.etaxonomy.cdm.model.occurrence.Specimen;
28
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
29
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
30

    
31
/**
32
 * @author a.mueller
33
 * @created 20.06.2008
34
 * @version 1.0
35
 */
36

    
37
@Component("defaultImport")
38
public class CdmApplicationAwareDefaultImport<T extends IImportConfigurator> implements ICdmImporter<T>, ApplicationContextAware {
39
	private static final Logger logger = Logger.getLogger(CdmApplicationAwareDefaultImport.class);
40

    
41
	protected ApplicationContext applicationContext;
42
	
43
	/* (non-Javadoc)
44
	 * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
45
	 */
46
	public void setApplicationContext(ApplicationContext applicationContext)
47
			throws BeansException {
48
		this.applicationContext = applicationContext;
49
	}
50

    
51

    
52
	//Constants
53
	final boolean OBLIGATORY = true; 
54
	final boolean FACULTATIVE = false; 
55
	final int modCount = 1000;
56

    
57
	IService<CdmBase> service = null;
58
	
59
	//different type of stores that are used by the known imports
60
	Map<String, MapWrapper<? extends CdmBase>> stores = new HashMap<String, MapWrapper<? extends CdmBase>>();
61

    
62
	public CdmApplicationAwareDefaultImport(){
63
		
64
		
65
		stores.put(ICdmIO.PERSON_STORE, new MapWrapper<Person>(service));
66
		stores.put(ICdmIO.TEAM_STORE, new MapWrapper<TeamOrPersonBase<?>>(service));
67
		stores.put(ICdmIO.REFERENCE_STORE, new MapWrapper<ReferenceBase>(service));
68
		stores.put(ICdmIO.NOMREF_STORE, new MapWrapper<ReferenceBase>(service));
69
		stores.put(ICdmIO.NOMREF_DETAIL_STORE, new MapWrapper<ReferenceBase>(service));
70
		stores.put(ICdmIO.REF_DETAIL_STORE, new MapWrapper<ReferenceBase>(service));
71
		stores.put(ICdmIO.TAXONNAME_STORE, new MapWrapper<TaxonNameBase<?,?>>(service));
72
		stores.put(ICdmIO.TAXON_STORE, new MapWrapper<TaxonBase>(service));
73
		stores.put(ICdmIO.SPECIMEN_STORE, new MapWrapper<Specimen>(service));
74
	}
75
	
76
	public boolean invoke(IImportConfigurator config){
77
		if (config.getCheck().equals(IImportConfigurator.CHECK.CHECK_ONLY)){
78
			return doCheck(config);
79
		}else if (config.getCheck().equals(IImportConfigurator.CHECK.CHECK_AND_IMPORT)){
80
			doCheck(config);
81
			return doImport(config);
82
		}else if (config.getCheck().equals(IImportConfigurator.CHECK.IMPORT_WITHOUT_CHECK)){
83
			return doImport(config);
84
		}else{
85
			logger.error("Unknown CHECK type");
86
			return false;
87
		}
88
	}
89
	
90
	
91
	@SuppressWarnings("unchecked")
92
	protected <S extends IImportConfigurator> boolean doCheck(S  config){
93
		boolean result = true;
94
		System.out.println("Start checking Source ("+ config.getSourceNameString() + ") ...");
95
		
96
		//check
97
		if (config == null){
98
			logger.warn("CdmImportConfiguration is null");
99
			return false;
100
		}else if (! config.isValid()){
101
			logger.warn("CdmImportConfiguration is not valid");
102
			return false;
103
		}
104
		
105
		ImportStateBase state = config.getNewState();
106
		state.initialize(config);
107
		
108
		//do check for each class
109
		for (Class<ICdmIO> ioClass: config.getIoClassList()){
110
			try {
111
				String ioBeanName = getComponentBeanName(ioClass);
112
				ICdmIO cdmIo = (ICdmIO)applicationContext.getBean(ioBeanName, ICdmIO.class);
113
				if (cdmIo != null){
114
					result &= cdmIo.check(state);
115
				}else{
116
					logger.error("cdmIO was null");
117
					result = false;
118
				}
119
			} catch (Exception e) {
120
					logger.error(e);
121
					e.printStackTrace();
122
					result = false;
123
			}
124
		}
125
		
126
		//return
127
		System.out.println("End checking Source ("+ config.getSourceNameString() + ") for import to Cdm");
128
		return result;
129

    
130
	}
131
	
132
	
133
	/**
134
	 * Executes the whole 
135
	 */
136
	protected <S extends IImportConfigurator>  boolean doImport(S config){
137
		boolean result = true;
138
		//validate
139
		if (config == null){
140
			logger.warn("Configuration is null");
141
			return false;
142
		}else if (! config.isValid()){
143
			logger.warn("Configuration is not valid");
144
			return false;
145
		}
146
				
147
		ReferenceBase sourceReference = config.getSourceReference();
148
		logger.info("Start import from Source '"+ config.getSourceNameString() + "' to destination '" + config.getDestinationNameString() + "'");
149
		
150
		ImportStateBase state = config.getNewState();
151
		state.initialize(config);
152

    
153
		
154
		//do invoke for each class
155
		for (Class<ICdmIO> ioClass: config.getIoClassList()){
156
			try {
157
				String ioBeanName = getComponentBeanName(ioClass);
158
				ICdmIO cdmIo = (ICdmIO)applicationContext.getBean(ioBeanName, ICdmIO.class);
159
				if (cdmIo != null){
160
//					result &= cdmIo.invoke(config, stores);
161
					state.setCurrentIO(cdmIo);
162
					result &= cdmIo.invoke(state);
163
				}else{
164
					logger.error("cdmIO was null");
165
					result = false;
166
				}
167
			} catch (Exception e) {
168
					logger.error(e);
169
					e.printStackTrace();
170
					result = false;
171
			}
172
		}
173
		
174
		//do invoke for each class
175
//		for (String ioBean: config.getIoBeans()){
176
//			try {
177
//				ICdmIO<S> cdmIo = (ICdmIO<S>)applicationContext.getBean(ioBean, ICdmIO.class);
178
//				if (cdmIo != null){
179
//					result &= cdmIo.invoke(config, stores);
180
//				}else{
181
//					logger.error("cdmIO was null");
182
//					result = false;
183
//				}
184
//			} catch (Exception e) {
185
//					logger.error(e);
186
//					e.printStackTrace();
187
//					result = false;
188
//			}
189
//			
190
//		}
191
		
192
		
193
		logger.info("End import from source '" + config.getSourceNameString() 
194
				+ "' to destination '" + config.getDestinationNameString() + "'"+
195
				(result? "(successful)":"(with errors)")) ;
196
		return result;
197
	}
198
	
199
	private String getComponentBeanName(Class<ICdmIO> ioClass){
200
		Component component = ioClass.getAnnotation(Component.class);
201
		if (component == null){
202
			throw new IllegalArgumentException("Class " + ioClass.getName() + " is missing a @Component annotation." );
203
		}
204
		String ioBean = component.value();
205
		if ("".equals(ioBean)){
206
			ioBean = ioClass.getSimpleName();
207
			ioBean = ioBean.substring(0, 1).toLowerCase() + ioBean.substring(1); //make camelcase
208
		}
209
		return ioBean;
210
	}
211
	
212
}
(2-2/42)