From 2caedd4f0d87d720033de3a69c7c8d35634956fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20M=C3=BCller?= Date: Sun, 22 Oct 2017 17:51:30 +0200 Subject: [PATCH] add uuid list as return type for CdmPreference.getValue --- .../cdm/model/metadata/CdmPreference.java | 41 +++++++++++++++++++ .../cdm/model/metadata/CdmPreferenceTest.java | 41 ++++++++++++++++++- .../cdm/api/service/IPreferenceService.java | 7 ++-- 3 files changed, 85 insertions(+), 4 deletions(-) diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/metadata/CdmPreference.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/metadata/CdmPreference.java index 7695f6fdc1..a83e1504f6 100644 --- a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/metadata/CdmPreference.java +++ b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/metadata/CdmPreference.java @@ -9,12 +9,17 @@ package eu.etaxonomy.cdm.model.metadata; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.EmbeddedId; import javax.persistence.Entity; +import org.apache.commons.lang3.StringUtils; + /** * This class may hold all prefrences data for a CDM database. @@ -191,18 +196,54 @@ public final class CdmPreference implements Serializable { } + /** + * @return the subject of the preference + */ public String getSubject() { return key.subject; } + /** + * @return the predicate of the preference + */ public String getPredicate() { return key.predicate; } + /** + * @return the value of the preference + */ public String getValue() { return value; } + /** + * Returns the {@link #getValue() value} as {@link UUID} List. + * Throws an exception if the value can not be parsed as UUID list. + * @return + * @throws IllegalArgumentException + */ + public List getValueUuidList() throws IllegalArgumentException { + List result = new ArrayList<>(); + if (StringUtils.isBlank(value)){ + return result; + } + String[] splits = getValue().split("[,;]"); + for (String split : splits ){ + try { + if (StringUtils.isBlank(split)){ + continue; //neglect trailing separators + } + UUID uuid = UUID.fromString(split.trim()); + result.add(uuid); + } catch (IllegalArgumentException e) { + throw e; + } + } + return result; + } + + // // we try to avoid setting of values // public void setValue(String value) { diff --git a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/metadata/CdmPreferenceTest.java b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/metadata/CdmPreferenceTest.java index 7b2b96e931..bb5b38b7f2 100644 --- a/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/metadata/CdmPreferenceTest.java +++ b/cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/metadata/CdmPreferenceTest.java @@ -8,6 +8,9 @@ */ package eu.etaxonomy.cdm.model.metadata; +import java.util.List; +import java.util.UUID; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -20,7 +23,6 @@ import org.junit.Test; public class CdmPreferenceTest { private String subject; - private String subject2; private String predicate; private String value; @@ -130,7 +132,44 @@ public class CdmPreferenceTest { } catch (Exception e) { //ok } + } + @Test + public void testGetValueUuidList() { + //null + CdmPreference prefs = new CdmPreference(subject, predicate, null); + List list = prefs.getValueUuidList(); + Assert.assertTrue(list.isEmpty()); + //empty + prefs = new CdmPreference(subject, predicate, " "); + list = prefs.getValueUuidList(); + Assert.assertTrue(list.isEmpty()); + //singleUuid + prefs = new CdmPreference(subject, predicate, "1ef35078-fb4a-451d-a15a-127235245358"); + list = prefs.getValueUuidList(); + Assert.assertEquals(1, list.size()); + Assert.assertEquals(UUID.fromString("1ef35078-fb4a-451d-a15a-127235245358"), list.get(0)); + //mulitple uuids and varying separators + prefs = new CdmPreference(subject, predicate, "1ef35078-fb4a-451d-a15a-127235245358,a1184db8-e476-4410-b085-d8844ada47e8;43b2cd7d-401b-4565-853f-88ae1c43c55a"); + list = prefs.getValueUuidList(); + Assert.assertEquals(3, list.size()); + Assert.assertEquals(UUID.fromString("1ef35078-fb4a-451d-a15a-127235245358"), list.get(0)); + Assert.assertEquals(UUID.fromString("43b2cd7d-401b-4565-853f-88ae1c43c55a"), list.get(2)); + //trailing and preceding separators and whitespaces + prefs = new CdmPreference(subject, predicate, " ; 1ef35078-fb4a-451d-a15a-127235245358 , a1184db8-e476-4410-b085-d8844ada47e8;43b2cd7d-401b-4565-853f-88ae1c43c55a , "); + list = prefs.getValueUuidList(); + Assert.assertEquals(3, list.size()); + Assert.assertEquals(UUID.fromString("1ef35078-fb4a-451d-a15a-127235245358"), list.get(0)); + Assert.assertEquals(UUID.fromString("43b2cd7d-401b-4565-853f-88ae1c43c55a"), list.get(2)); + //non uuids + prefs = new CdmPreference(subject, predicate, "xxx 1ef35078-fb4a-451d-a15a-127235245358"); + try { + list = prefs.getValueUuidList(); + Assert.fail("Parsing non UUIDs must throw exception"); + } catch (IllegalArgumentException e) { + //correct + } } + } diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IPreferenceService.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IPreferenceService.java index e4bdb93453..84adfbdc14 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IPreferenceService.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IPreferenceService.java @@ -14,6 +14,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.metadata.CdmPreference; import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey; import eu.etaxonomy.cdm.model.metadata.PreferencePredicate; +import eu.etaxonomy.cdm.model.metadata.PreferenceSubject; import eu.etaxonomy.cdm.model.taxon.TaxonNode; /** @@ -47,8 +48,8 @@ public interface IPreferenceService { /** * Retrieve all matching values for the given preference key. - * @param subject - * @param predicate + * @param subject the {@link PreferenceSubject} represented as string + * @param predicate the predicate to retrieve * @return */ public List list(String subject, String predicate); @@ -56,7 +57,7 @@ public interface IPreferenceService { /** * Retrieve the best matching value for the given preference key. - * @param key + * @param key the key defining the data to retrieve * @return */ public CdmPreference find(PrefKey key); -- 2.34.1