Project

General

Profile

Download (4.56 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

    
29
    private static final long serialVersionUID = 8720272266844232502L;
30
    private static final Logger logger = Logger.getLogger(CacheUpdaterWithNewCacheStrategy.class);
31

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

    
36
		//handle class list
37
		handleClassList(config.getClassList());
38

    
39
		return;
40
	}
41

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

    
53

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

    
117
}
(2-2/4)