*/
package eu.etaxonomy.taxeditor.remoting;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
+import org.hibernate.collection.internal.AbstractPersistentCollection;
import org.hibernate.collection.spi.PersistentCollection;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.unitils.UnitilsJUnit4;
import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.description.TextData;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.Classification;
import eu.etaxonomy.cdm.model.taxon.Taxon;
*/
public class RemotePersistentCollectionTest extends RemoteApplicationConfigurationTest {
private static final Logger logger = Logger.getLogger(RemotePersistentCollectionTest.class);
-
-
+
private static IClassificationService classificationService;
@BeforeClass
classificationService= applicationController.getClassificationService();
}
-
/**
- * Test class which checks remoting for persistent lists.
+ * Test method which checks remoting for persistent lists.
*
*/
@Test
@Test
public void persistentMapTest() {
-
+ List<TaxonNode> taxonNodes = classificationService.getAllNodes();
+ // calling iterator will initialise the collection
+ Iterator<TaxonNode> taxonNodesItr = taxonNodes.iterator();
+ while(taxonNodesItr.hasNext()) {
+ TaxonNode taxonNode = taxonNodesItr.next();
+ Taxon taxon = taxonNode.getTaxon();
+
+ if(taxon != null) {
+ Set<TaxonDescription> descriptions = taxon.getDescriptions();
+ Iterator<TaxonDescription> descriptionsItr = descriptions.iterator();
+ while(descriptionsItr.hasNext()) {
+ TaxonDescription desc = descriptionsItr.next();
+ if(desc != null) {
+ for (DescriptionElementBase element : desc.getElements()){
+ if (element.isInstanceOf(TextData.class)){
+ // usually a call to 'get' collections should not initialise the collection,
+ // but the 'getMultilanguageText' call internally calls readSize on the collection
+ // which triggers the initialisation
+ Map<Language, LanguageString> multilanguagetextMap = ((TextData)element).getMultilanguageText();
+ boolean init = AbstractPersistentCollection.isInitialized(multilanguagetextMap);
+ Assert.assertTrue(init);
+
+ if(!multilanguagetextMap.isEmpty()) {
+ // found a map whcih we can test!
+ logger.info("Found Non-empty multilanguagetextMap");
+ boolean empty = applicationController.getCommonService().isEmpty((PersistentCollection)multilanguagetextMap);
+ Assert.assertFalse(empty);
+ // test retrieval of key set, which should already by initialised
+ Set<Language> langKeySet = multilanguagetextMap.keySet();
+ Iterator<Language> langKeySetItr = langKeySet.iterator();
+ while(langKeySetItr.hasNext()) {
+ Language key = langKeySetItr.next();
+ // testing 'containsKey' on locally initialised collection
+ boolean localContainsKey = multilanguagetextMap.containsKey(key);
+ Assert.assertTrue(localContainsKey);
+ // testing 'containsKey' on remotely initialised collection
+ boolean remoteContainsKey =
+ applicationController.getCommonService().containsKey((PersistentCollection)multilanguagetextMap, key);
+ Assert.assertTrue(remoteContainsKey);
+
+ LanguageString value = multilanguagetextMap.get(key);
+ // testing 'containsValue' on locally initialised collection
+ boolean localContainsValue = multilanguagetextMap.containsValue(value);
+ Assert.assertTrue(localContainsValue);
+ // testing 'containsValue' on remotely initialised collection
+ boolean remoteContainsValue =
+ applicationController.getCommonService().containsValue((PersistentCollection)multilanguagetextMap, value);
+ Assert.assertTrue(remoteContainsValue);
+
+ }
+ return;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
}