--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.polytomouskey;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.unitils.dbunit.annotation.DataSet;
+
+import eu.etaxonomy.cdm.api.cache.CachedCommonServiceImpl;
+import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.Credit;
+import eu.etaxonomy.cdm.model.common.Extension;
+import eu.etaxonomy.cdm.model.common.IdentifiableSource;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.cdm.model.description.KeyStatement;
+import eu.etaxonomy.cdm.model.description.PolytomousKey;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.cdm.model.media.Rights;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+
+/**
+ * @author cmathew
+ * @date 7 Oct 2014
+ *
+ */
+@DataSet
+public class PolytomousKeyTest extends BaseRemotingTest {
+
+ private static final Logger logger = Logger.getLogger(PolytomousKeyTest.class);
+
+ UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66");
+ UUID taxon1Uuid = UUID.fromString("2b336df7-29e8-4f79-985f-66502739d22f");
+
+
+ IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService();
+ ICommonService commonService = getRemoteApplicationController().getCommonService();
+ ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
+
+ Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
+
+ @BeforeClass
+ public static void initializePolytomousKeyTest() {
+ logger.setLevel(Level.INFO);
+ CDMServer.getInstance().setKeepServerRunning(true);
+
+ initializeController("default", "127.0.0.1", 8080, "", NomenclaturalCode.ICNAFP);
+ }
+
+ @Test
+ public void readAllPolytomousKeys() {
+ List<PolytomousKey> pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null);
+ for(PolytomousKey pKey : pKeys) {
+ logger.info("Polytomous Key : " + pKey.getTitleCache());
+ }
+ }
+
+
+ @Test
+ //@DataSet("PolytomousKeyTest.readPolytmousKeyData.xml")
+ public void readPolytmousKeyData() {
+ PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ Set<Taxon> taxonomicScope = pKey.getTaxonomicScope();
+ Iterator<Taxon> tsItr = taxonomicScope.iterator();
+ Taxon taxon = tsItr.next();
+ logger.info("taxonomic scope : " + taxon.getTitleCache());
+ Assert.assertEquals(taxon.getTitleCache(), "Achillea cretica L. sec. Cyprus");
+ taxon = tsItr.next();
+ logger.info("taxonomic scope : " + taxon.getTitleCache());
+ Assert.assertEquals(taxon.getTitleCache(), "Achillea sec. Cyprus");
+ Assert.assertEquals(tsItr.hasNext(), false);
+
+ List<Credit> credits = pKey.getCredits();
+ AgentBase agent = credits.get(0).getAgent();
+ Assert.assertEquals(agent.getId(),4809);
+ Assert.assertEquals(agent.getTitleCache(),"R. A. Graham");
+ Assert.assertEquals(credits.get(0).getText(),"Credits Text Test");
+
+ Set<Extension> exts = pKey.getExtensions();
+ Iterator<Extension> extItr = exts.iterator();
+ Extension ext = extItr.next();
+ Assert.assertEquals(ext.getValue(), "http://test.com");
+
+ Set<Rights> rights = pKey.getRights();
+ Iterator<Rights> rightsItr = rights.iterator();
+ Rights right = rightsItr.next();
+ Assert.assertEquals(right.getText(),"Rights Text Test");
+
+ Set<IdentifiableSource> sources = pKey.getSources();
+ Iterator<IdentifiableSource> sourcesItr = sources.iterator();
+ IdentifiableSource source = sourcesItr.next();
+ Assert.assertEquals(source.getId(), 23710);
+ source = sourcesItr.next();
+ Assert.assertEquals(source.getId(), 23711);
+
+ // TO DO : Added tests for Annotations , Markers
+ }
+
+ @Test
+ public void readPolytomousKeyDataFromNodes() {
+ PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ PolytomousKeyNode rootNode = pKey.getRoot();
+
+
+ Assert.assertEquals(rootNode.getId(), 2750);
+
+ Assert.assertEquals(rootNode.getChildAt(0).getId(), 2751);
+ Assert.assertEquals(rootNode.getChildAt(0).getParent().getId(), rootNode.getId());
+ Assert.assertEquals(rootNode.getKey().getId(), pKey.getId());
+ Integer sortIndex = (Integer)getFieldValueViaReflection(rootNode.getChildAt(0), "sortIndex");
+ Assert.assertEquals(sortIndex, new Integer(0));
+ String statement = "Capitula without ligulate ray-florets; leaves entire or subentire";
+ Assert.assertEquals(rootNode.getChildAt(0).getStatement().getLabelText(english), statement);
+
+ Assert.assertEquals(rootNode.getChildAt(1).getId(), 2753);
+ Assert.assertEquals(rootNode.getChildAt(1).getParent().getId(), rootNode.getId());
+ Assert.assertEquals(rootNode.getChildAt(1).getKey().getId(), pKey.getId());
+ sortIndex = (Integer)getFieldValueViaReflection(rootNode.getChildAt(1), "sortIndex");
+ Assert.assertEquals(sortIndex, new Integer(1));
+ statement = "Capitula with ligulate ray-florets; leaves pinnatisect";
+ Assert.assertEquals(rootNode.getChildAt(1).getStatement().getLabelText(english), statement);
+
+ Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getId(), 2754);
+ Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getParent().getId(), rootNode.getChildAt(1).getId());
+ Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getKey().getId(), pKey.getId());
+ sortIndex = (Integer)getFieldValueViaReflection(rootNode.getChildAt(1).getChildAt(0), "sortIndex");
+ Assert.assertEquals(sortIndex, new Integer(0));
+ statement = "Ray-florets yellow";
+ Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getStatement().getLabelText(english), statement);
+ Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getChildAt(0).getTaxon().getTitleCache(), "Achillea arabica Kotschy sec. Cyprus");
+ }
+
+ @Test
+ public void savePolytomousKeyNodeData() {
+ PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ PolytomousKeyNode pkeynode = pkey.getRoot();
+ String newQuestion = "New Question";
+ String newStatement = "New Statement";
+
+ Assert.assertEquals("Question 1",pkeynode.getQuestion().getLabel().get(english).getText());
+ for(PolytomousKeyNode node : pkeynode.getChildren()) {
+
+ node.setQuestion(null);
+ node.setStatement(null);
+ }
+ //FIXME: Add tests for feature after fixing problem
+
+ //Feature feature = pkeynode.getFeature();
+ //Assert.assertEquals(feature.getTitleCache(),"Systematics");
+ //pkeynode.setFeature(null);
+
+ Assert.assertEquals(pkeynode.getChildAt(0).getModifyingText().get(english).getText(),"Modifying Text 1a");
+ String modifyingText = "Modifying Text 1a updated";
+
+ //pkeynode.getChildAt(0).putModifyingText(english, modifyingText);
+
+ Assert.assertEquals(pkeynode.getChildAt(0).getSubkey().getId(),751);
+ Assert.assertEquals(pkeynode.getChildAt(0).getSubkey().getTitleCache(),"Asphodeline");
+ Assert.assertNull(pkeynode.getChildAt(1).getTaxon());
+ Taxon taxon = CdmBase.deproxy(taxonService.find(taxon1Uuid),Taxon.class);
+ pkeynode.getChildAt(1).setTaxon(taxon);
+
+ polytomousKeyService.merge(pkey);
+
+ pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ pkeynode = pkey.getRoot();
+ for(PolytomousKeyNode node : pkeynode.getChildren()) {
+ Assert.assertNull(node.getQuestion());
+ node.setQuestion(KeyStatement.NewInstance(english,newQuestion));
+ Assert.assertNull(node.getStatement());
+ node.setStatement(KeyStatement.NewInstance(english,newStatement));
+ }
+ //Assert.assertNull(pkeynode.getFeature());
+ //pkeynode.setFeature(feature);
+
+ //Assert.assertEquals(pkeynode.getChildAt(0).getModifyingText().get(english).getText(),modifyingText);
+ Assert.assertEquals(pkeynode.getChildAt(1).getTaxon(), taxon);
+
+ polytomousKeyService.merge(pkey);
+
+ pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ pkeynode = pkey.getRoot();
+ for(PolytomousKeyNode node : pkeynode.getChildren()) {
+ Assert.assertNotNull(node.getQuestion());
+ Map<Language, LanguageString> label = node.getQuestion().getLabel();
+ Assert.assertEquals(newQuestion, label.get(english).getText());
+ Assert.assertNotNull(node.getStatement());
+ Assert.assertEquals(newStatement, node.getStatement().getLabel(english).getText());
+ }
+ //Assert.assertEquals(pkeynode.getFeature().getId(), feature.getId());
+
+ }
+
+ @Test
+ public void savePolytomousKeyNodeDataWithSameSubKey() {
+ //CachedCommonServiceImpl.setCacheEnabled(false);
+ PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ PolytomousKeyNode pkeynode = pkey.getRoot();
+
+ PolytomousKey subkey1 = pkeynode.getChildAt(0).getSubkey();
+ String subkey1title = subkey1.getTitleCache();
+ subkey1.setTitleCache(subkey1title + "test", true);
+
+
+ PolytomousKey subkey2 = pkeynode.getChildAt(1).getChildAt(0).getSubkey();
+ String subkey2title = subkey2.getTitleCache();
+ subkey2.setTitleCache(subkey2title + "test", true);
+
+ Assert.assertNotSame(subkey1, subkey2);
+
+
+ polytomousKeyService.merge(pkey);
+ }
+
+ @Test
+ public void savePolytomousKeyNodeDataWithSameSubKeyUsingService() {
+ CachedCommonServiceImpl.setCacheEnabled(false);
+ PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ PolytomousKeyNode pkeynode = pkey.getRoot();
+
+ PersistentCollection children = (PersistentCollection) pkeynode.getChildren();
+ PolytomousKeyNode childNode0 = (PolytomousKeyNode)commonService.get(children, 0);
+ PolytomousKey subkey1 = CdmBase.deproxy(childNode0.getSubkey(),PolytomousKey.class);
+ String subkey1title = subkey1.getTitleCache();
+ subkey1.setTitleCache(subkey1title + "test", true);
+
+ PolytomousKeyNode childNode1 = (PolytomousKeyNode)commonService.get(children, 1);
+ PolytomousKey subkey2 = CdmBase.deproxy(childNode1.getSubkey(),PolytomousKey.class);
+ String subkey2title = subkey2.getTitleCache();
+ subkey2.setTitleCache(subkey2title + "test", true);
+
+ Assert.assertNotSame(subkey1, subkey2);
+
+ polytomousKeyService.merge(pkey);
+ }
+
+
+ @Test
+ public void savePolytomousKeyNodeDataWithSameLanguageInLabel() {
+ PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+ PolytomousKeyNode pkeynode = pkey.getRoot();
+
+ Map<Language, LanguageString> label1 = pkeynode.getQuestion().getLabel();
+ label1.size();
+ //Language lang1 = label1.get(english).getLanguage();
+ //String title1 = lang1.getTitleCache();
+
+ Map<Language, LanguageString> label2 = pkeynode.getChildAt(0).getStatement().getLabel();
+ label2.size();
+ //Language lang2 = label2.get(english).getLanguage();
+ //String title2 = lang2.getTitleCache();
+
+ polytomousKeyService.merge(pkey);
+ }
+
+
+}