c0aca306ff5a8a570dc04b6793b806a3289f62b6
[taxeditor.git] / eu.etaxonomy.taxeditor.remoting / src / test / java / eu / etaxonomy / cdm / api / cache / CdmClientCachingTest.java
1 // $Id$
2 /**
3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.cdm.api.cache;
11
12 import java.io.IOException;
13 import java.util.Arrays;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Set;
18 import java.util.UUID;
19
20 import org.apache.log4j.Level;
21 import org.apache.log4j.Logger;
22 import org.hibernate.collection.spi.PersistentCollection;
23 import org.junit.Assert;
24 import org.junit.BeforeClass;
25 import org.junit.Test;
26 import org.springframework.beans.factory.annotation.Autowired;
27 import org.springframework.core.io.ClassPathResource;
28 import org.springframework.core.io.Resource;
29 import org.unitils.dbunit.annotation.DataSet;
30
31 import eu.etaxonomy.cdm.api.cache.CachedCommonServiceImpl;
32 import eu.etaxonomy.cdm.api.service.ICommonService;
33 import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
34 import eu.etaxonomy.cdm.api.service.ITaxonService;
35 import eu.etaxonomy.cdm.model.agent.AgentBase;
36 import eu.etaxonomy.cdm.model.common.CdmBase;
37 import eu.etaxonomy.cdm.model.common.Credit;
38 import eu.etaxonomy.cdm.model.common.Extension;
39 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
40 import eu.etaxonomy.cdm.model.common.Language;
41 import eu.etaxonomy.cdm.model.common.LanguageString;
42 import eu.etaxonomy.cdm.model.description.KeyStatement;
43 import eu.etaxonomy.cdm.model.description.PolytomousKey;
44 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
45 import eu.etaxonomy.cdm.model.media.Rights;
46 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
47 import eu.etaxonomy.cdm.model.taxon.Taxon;
48 import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
49 import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
50 import eu.etaxonomy.taxeditor.remoting.session.CdmEntitySessionManager;
51 import eu.etaxonomy.taxeditor.remoting.session.ISessionEventListener;
52 import eu.etaxonomy.taxeditor.remoting.session.MockSessionOwner;
53
54 /**
55 * @author cmathew
56 * @date 7 Oct 2014
57 *
58 */
59 @DataSet
60 public class CdmClientCachingTest extends BaseRemotingTest {
61
62 private static final Logger logger = Logger.getLogger(CdmClientCachingTest.class);
63
64 UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66");
65 UUID taxon1Uuid = UUID.fromString("2b336df7-29e8-4f79-985f-66502739d22f");
66
67
68 IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService();
69 ICommonService commonService = getRemoteApplicationController().getCommonService();
70 ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
71
72 CdmEntitySessionManager cdmEntitySessionManager = getRemoteApplicationController().getCdmEntitySessionManager();
73
74 Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
75
76
77
78
79 private static final List<String> PKEY_INIT_STRATEGY = Arrays.asList(new String[] {
80 "root"});
81
82 @BeforeClass
83 public static void initializePolytomousKeyTest() {
84 logger.setLevel(Level.INFO);
85 CDMServer.getInstance().setKeepServerRunning(true);
86
87 CdmModelCacher cmdmc = new CdmModelCacher();
88 cmdmc.cacheGetters();
89
90 //initializeController("default", "127.0.0.1", 8080, "", NomenclaturalCode.ICNAFP);
91 }
92
93 @Test
94 public void readAllPolytomousKeys() {
95 List<PolytomousKey> pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null);
96 for(PolytomousKey pKey : pKeys) {
97 logger.info("Polytomous Key : " + pKey.getTitleCache());
98 }
99 }
100
101 @Test
102 public void testCachifyNonRecursive() {
103 CdmTransientEntityCacher.setRecursiveEnabled(false);
104 ISessionEventListener sessionOwner = new MockSessionOwner();
105 cdmEntitySessionManager.bind(sessionOwner);
106 PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
107 cdmEntitySessionManager.add(sessionOwner, pkey);
108 CdmTransientEntityCacher cacher = cdmEntitySessionManager.getCdmTransientEntityCacher(sessionOwner);
109 Assert.assertNull(cacher.getFromCache(pkey));
110
111 }
112
113 @Test
114 public void testCachifyRecursive() {
115 CdmTransientEntityCacher.setRecursiveEnabled(false);
116 ISessionEventListener sessionOwner = new MockSessionOwner();
117 cdmEntitySessionManager.bind(sessionOwner);
118 PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_INIT_STRATEGY),PolytomousKey.class);
119 cdmEntitySessionManager.add(sessionOwner, pkey);
120 CdmTransientEntityCacher cacher = cdmEntitySessionManager.getCdmTransientEntityCacher(sessionOwner);
121 Assert.assertSame(pkey.getRoot(), cacher.getFromCache(pkey.getRoot()));
122 }
123
124 @Test
125 public void savePolytomousKeyNodeDataWithSameSubKey() {
126 //CachedCommonServiceImpl.setCacheEnabled(false);
127 ISessionEventListener sessionOwner = new MockSessionOwner();
128 cdmEntitySessionManager.bind(sessionOwner);
129 PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
130 PolytomousKeyNode pkeynode = pkey.getRoot();
131
132 PolytomousKey subkey1 = pkeynode.getChildAt(0).getSubkey();
133 String subkey1title = subkey1.getTitleCache();
134 subkey1.setTitleCache(subkey1title + "test", true);
135
136
137 PolytomousKey subkey2 = pkeynode.getChildAt(1).getChildAt(0).getSubkey();
138 String subkey2title = subkey2.getTitleCache();
139 subkey2.setTitleCache(subkey2title + "test", true);
140
141 Assert.assertSame(subkey1, subkey2);
142
143 polytomousKeyService.merge(pkey);
144 }
145
146 @Test
147 public void savePolytomousKeyNodeDataWithSameSubKeyUsingService() {
148 CachedCommonServiceImpl.setCacheEnabled(false);
149 PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
150 PolytomousKeyNode pkeynode = pkey.getRoot();
151
152 PersistentCollection children = (PersistentCollection) pkeynode.getChildren();
153 PolytomousKeyNode childNode0 = (PolytomousKeyNode)commonService.get(children, 0);
154 PolytomousKey subkey1 = CdmBase.deproxy(childNode0.getSubkey(),PolytomousKey.class);
155 String subkey1title = subkey1.getTitleCache();
156 subkey1.setTitleCache(subkey1title + "test", true);
157
158 PolytomousKeyNode childNode1 = (PolytomousKeyNode)commonService.get(children, 1);
159 PolytomousKey subkey2 = CdmBase.deproxy(childNode1.getSubkey(),PolytomousKey.class);
160 String subkey2title = subkey2.getTitleCache();
161 subkey2.setTitleCache(subkey2title + "test", true);
162
163 Assert.assertNotSame(subkey1, subkey2);
164
165 polytomousKeyService.merge(pkey);
166 }
167
168
169 @Test
170 public void savePolytomousKeyNodeDataWithSameLanguageInLabel() {
171 PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
172 PolytomousKeyNode pkeynode = pkey.getRoot();
173
174 Map<Language, LanguageString> label1 = pkeynode.getQuestion().getLabel();
175 label1.size();
176 //Language lang1 = label1.get(english).getLanguage();
177 //String title1 = lang1.getTitleCache();
178
179 Map<Language, LanguageString> label2 = pkeynode.getChildAt(0).getStatement().getLabel();
180 label2.size();
181 //Language lang2 = label2.get(english).getLanguage();
182 //String title2 = lang2.getTitleCache();
183
184 polytomousKeyService.merge(pkey);
185 }
186
187
188 }