e64f8bc1d01f26ac4c43f9b74bcf5790828605c0
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / taxeditor / service / RemoteInvocationTermCacher.java
1 package eu.etaxonomy.taxeditor.service;
2
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Set;
8
9 import org.apache.log4j.Logger;
10 import org.springframework.remoting.support.RemoteInvocation;
11 import org.springframework.remoting.support.RemoteInvocationResult;
12
13 import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
14 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
15 import eu.etaxonomy.cdm.model.term.TermType;
16
17
18 public class RemoteInvocationTermCacher implements IRemoteInvocationTermCacher {
19
20 private static final Logger logger = Logger.getLogger(RemoteInvocationTermCacher.class);
21
22 private static Map<TermType, RemoteInvocationResult> termTypeMap = new HashMap<>();
23
24 private static CdmServiceCacher cdmServiceCacher;
25
26 public static void setDefaultCacher(CdmServiceCacher csc) {
27 cdmServiceCacher = csc;
28 }
29
30 @Override
31 public void cacheTerms(RemoteInvocation ri, RemoteInvocationResult rir) {
32 if(cdmServiceCacher != null) {
33 if(ri.getMethodName().equals("listByTermType")) {
34 if(ri.getArguments()[1] == null) {
35 Set<DefinedTermBase<?>> terms = new HashSet<>();
36 if(rir.getValue() != null) {
37 terms.addAll((List<DefinedTermBase<?>>)rir.getValue());
38
39 for(DefinedTermBase<?> term : terms) {
40 cdmServiceCacher.load(term);
41 }
42 termTypeMap.put((TermType)ri.getArguments()[0], rir);
43 }
44 }
45 }
46 } else {
47 logger.info("Default CdmServiceCacher is null. Cannot cache terms");
48 }
49 }
50
51 @Override
52 public RemoteInvocationResult termsFromCache(RemoteInvocation ri) {
53 return termTypeMap.get(ri.getArguments()[0]);
54 }
55 }