Project

General

Profile

Download (4.59 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.io.operation;
2

    
3
import java.util.List;
4

    
5
import org.apache.log4j.Logger;
6
import org.springframework.stereotype.Component;
7

    
8
import eu.etaxonomy.cdm.io.common.DefaultImportState;
9
import eu.etaxonomy.cdm.io.operation.config.CacheUpdaterConfigurator;
10
import eu.etaxonomy.cdm.model.agent.AgentBase;
11
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
12
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
13
import eu.etaxonomy.cdm.model.common.TermVocabulary;
14
import eu.etaxonomy.cdm.model.description.DescriptionBase;
15
import eu.etaxonomy.cdm.model.description.FeatureTree;
16
import eu.etaxonomy.cdm.model.media.Media;
17
import eu.etaxonomy.cdm.model.molecular.Sequence;
18
import eu.etaxonomy.cdm.model.name.TaxonName;
19
import eu.etaxonomy.cdm.model.occurrence.Collection;
20
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
21
import eu.etaxonomy.cdm.model.reference.Reference;
22
import eu.etaxonomy.cdm.model.taxon.Classification;
23
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
24
import eu.etaxonomy.cdm.strategy.cache.taxon.TaxonBaseShortSecCacheStrategy;
25

    
26
@Component
27
public class CacheUpdaterWithNewCacheStrategy extends CacheUpdater {
28
	private static final Logger logger = Logger.getLogger(CacheUpdaterWithNewCacheStrategy.class);
29

    
30
	@Override
31
	protected void doInvoke(DefaultImportState<CacheUpdaterConfigurator> state) {
32
		CacheUpdaterConfigurator config = state.getConfig();
33

    
34
		//handle class list
35
		handleClassList(config.getClassList());
36

    
37
		return;
38
	}
39

    
40
	private boolean handleClassList(List<Class<? extends IdentifiableEntity>> classList) {
41
		boolean result = true;
42
		for (Class<? extends IdentifiableEntity> clazz : classList){
43
			//WE need to separate classes , because hibernate
44
			//returns multiple values for service.count() for e.g. IdentifableEntity.class
45
			//which leads to an exception
46
			result &= this.handleSingleTableClass(clazz);
47
		}
48
		return result;
49
	}
50

    
51

    
52
	private boolean handleSingleTableClass(Class<? extends IdentifiableEntity> clazz) {
53
		logger.warn("Updating class " + clazz.getSimpleName() + " ...");
54
		try {
55
			//TermBase
56
			if (DefinedTermBase.class.isAssignableFrom(clazz)){
57
				getTermService().updateTitleCache((Class) clazz, null, null, null);
58
			}else if (FeatureTree.class.isAssignableFrom(clazz)){
59
				getFeatureTreeService().updateTitleCache((Class) clazz, null, null, null);
60
			}else if (TermVocabulary.class.isAssignableFrom(clazz)){
61
				getVocabularyService().updateTitleCache((Class) clazz, null, null, null);
62
			}
63
			//DescriptionBase
64
			else if (DescriptionBase.class.isAssignableFrom(clazz)){
65
				getDescriptionService().updateTitleCache((Class) clazz, null, null, null);
66
			}
67
			//Media
68
			else if (Media.class.isAssignableFrom(clazz)){
69
				getMediaService().updateTitleCache((Class) clazz, null, null, null);
70
			}//TaxonBase
71
			else if (TaxonBase.class.isAssignableFrom(clazz)){
72
				TaxonBaseShortSecCacheStrategy<TaxonBase> cacheStrategy = new TaxonBaseShortSecCacheStrategy<TaxonBase>();
73
				getTaxonService().updateTitleCache((Class) clazz, null,cacheStrategy , null);
74
			}
75
			//IdentifiableMediaEntity
76
			else if (AgentBase.class.isAssignableFrom(clazz)){
77
				getAgentService().updateTitleCache((Class) clazz, null, null, null);
78
			}else if (Collection.class.isAssignableFrom(clazz)){
79
				getCollectionService().updateTitleCache((Class) clazz, null, null, null);
80
			}else if (Reference.class.isAssignableFrom(clazz)){
81
				getReferenceService().updateTitleCache((Class) clazz, null, null, null);
82
			}else if (SpecimenOrObservationBase.class.isAssignableFrom(clazz)){
83
				getOccurrenceService().updateTitleCache((Class) clazz, null, null, null);
84
			}
85
			//Sequence
86
			else if (Sequence.class.isAssignableFrom(clazz)){
87
				//TODO misuse TaxonServic for sequence update, use sequence service when it exists
88
				getTaxonService().updateTitleCache((Class) clazz, null, null, null);
89
			}
90
			//TaxonName
91
			else if (TaxonName.class.isAssignableFrom(clazz)){
92
				getNameService().updateTitleCache((Class) clazz, null, null, null);
93
			}
94
			//Classification
95
			else if (Classification.class.isAssignableFrom(clazz)){
96
				getClassificationService().updateTitleCache((Class) clazz, null, null, null);
97
			}
98
			//unknown class
99
			else {
100
				String warning = "Unknown identifable entity subclass + " + clazz == null ? "null" : clazz.getName();
101
				logger.error(warning);
102
				return false;
103
				//getTaxonService().updateTitleCache((Class) clazz);
104
			}
105
			return true;
106
		} catch (Exception e) {
107
			String warning = "Exception occurred when trying to update class + " + clazz == null ? "null" : clazz.getName();
108
			warning += " Exception was: " + e.getMessage();
109
			logger.error(warning);
110
			e.printStackTrace();
111
			return false;
112
		}
113
	}
114

    
115
}
(2-2/5)