You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2011/11/28 04:20:57 UTC

svn commit: r1206966 - in /incubator/rave/trunk: rave-components/rave-commons/src/main/java/org/apache/rave/util/ rave-components/rave-core/src/main/java/org/apache/rave/portal/model/ rave-components/rave-core/src/main/java/org/apache/rave/portal/model...

Author: mfranklin
Date: Mon Nov 28 03:20:56 2011
New Revision: 1206966

URL: http://svn.apache.org/viewvc?rev=1206966&view=rev
Log:
Modified all non-joined properties in FieldRestrictingPerson to use new core person model (Supports RAVE-347)

Added:
    incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java
Modified:
    incubator/rave/trunk/rave-components/rave-commons/src/main/java/org/apache/rave/util/CollectionUtils.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/util/ModelUtils.java
    incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java

Modified: incubator/rave/trunk/rave-components/rave-commons/src/main/java/org/apache/rave/util/CollectionUtils.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-commons/src/main/java/org/apache/rave/util/CollectionUtils.java?rev=1206966&r1=1206965&r2=1206966&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-commons/src/main/java/org/apache/rave/util/CollectionUtils.java (original)
+++ incubator/rave/trunk/rave-components/rave-commons/src/main/java/org/apache/rave/util/CollectionUtils.java Mon Nov 28 03:20:56 2011
@@ -133,4 +133,21 @@ public class CollectionUtils {
             }
         }
     }
+
+    /**
+     * Gets a single value from a list
+     * @param list the list to get the value from
+     * @param <T> class of objects in the list
+     * @return the 0th element if the list has only 1 value, null if the list is empty or an exception if there is more than one element
+     */
+    public static <T> T getSingleValue(List<T> list) {
+        switch (list.size()) {
+            case 0:
+                return null;
+            case 1:
+                return list.get(0);
+            default:
+                throw new IllegalArgumentException("Expected 0 or 1 items in the collection but found " + list.size());
+        }
+    }
 }
\ No newline at end of file

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java?rev=1206966&r1=1206965&r2=1206966&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java Mon Nov 28 03:20:56 2011
@@ -258,7 +258,7 @@ public class Person implements BasicEnti
         this.mappedProperties = mappedProperties;
     }
 
-    private static Map<String, List<PersonProperty>> createPropertyMap(List<PersonProperty> properties) {
+    protected static Map<String, List<PersonProperty>> createPropertyMap(List<PersonProperty> properties) {
         Map<String, List<PersonProperty>> map = new HashMap<String, List<PersonProperty>>();
         for(PersonProperty property : properties) {
             List<PersonProperty> propertyList;

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java?rev=1206966&r1=1206965&r2=1206966&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java Mon Nov 28 03:20:56 2011
@@ -4,6 +4,10 @@ import org.apache.rave.persistence.Basic
 
 import javax.persistence.*;
 
+/**
+ * A generic extension model for the {@link Person} that allows implementers to
+ * add fields to the Person not initially envisioned
+ */
 @Entity
 @Table(name = "person_property")
 public class PersonProperty implements BasicEntity {
@@ -15,22 +19,53 @@ public class PersonProperty implements B
             valueColumnName = "SEQ_COUNT", pkColumnValue = "person_property", allocationSize = 1, initialValue = 1)
     private Long entityId;
 
+    /**
+     * The property type (IM, PhoneNumber, etc)
+     */
     @Basic
     @Column(name = "type")
     private String type;
 
+    /**
+     * The value of the field
+     */
     @Basic
     @Column(name = "value")
     private String value;
 
+    /**
+     * The distinguishing qualifier (Home, Work, etc)
+     */
     @Basic
     @Column(name = "qualifier")
     private String qualifier;
 
+    /**
+     * Extended information related to the value
+     */
+    @Basic
+    @Column(name = "extended_value")
+    private String extendedValue;
+
+    /**
+     * Determines whether or not the property is the designated primary for the type
+     */
     @Basic
     @Column(name = "primary_value")
     private Boolean primary;
 
+    public PersonProperty() {
+    }
+
+    public PersonProperty(Long entityId, String type, String value, String extendedValue, String qualifier, Boolean primary) {
+        this.entityId = entityId;
+        this.type = type;
+        this.value = value;
+        this.qualifier = qualifier;
+        this.primary = primary;
+        this.extendedValue = extendedValue;
+    }
+
     public Long getEntityId() {
         return entityId;
     }
@@ -70,4 +105,12 @@ public class PersonProperty implements B
     public void setPrimary(Boolean primary) {
         this.primary = primary;
     }
+
+    public String getExtendedValue() {
+        return extendedValue;
+    }
+
+    public void setExtendedValue(String extendedValue) {
+        this.extendedValue = extendedValue;
+    }
 }
\ No newline at end of file

Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/util/ModelUtils.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/util/ModelUtils.java?rev=1206966&r1=1206965&r2=1206966&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/util/ModelUtils.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/util/ModelUtils.java Mon Nov 28 03:20:56 2011
@@ -27,6 +27,16 @@ public class ModelUtils {
 
     private ModelUtils(){}
 
+    /**
+     * Represents the format used when converting {@link java.util.Date} objects to string representations for persistence
+     *
+     * ISO-8601 Compliant
+     *
+     * YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+0100)
+     */
+
+    public static final String STANDARD_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
+
     public static void normalizeRegionWidgetPreferences(long regionWidgetId, List<RegionWidgetPreference> preferences) {
         for (RegionWidgetPreference preference : preferences) {
             normalizeRegionWidgetPreference(regionWidgetId, preference);
@@ -36,4 +46,4 @@ public class ModelUtils {
     public static void normalizeRegionWidgetPreference(long regionWidgetId, RegionWidgetPreference regionWidgetPreference) {
         regionWidgetPreference.setRegionWidgetId(regionWidgetId);
     }
-}
\ No newline at end of file
+}

Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java?rev=1206966&r1=1206965&r2=1206966&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java Mon Nov 28 03:20:56 2011
@@ -20,12 +20,19 @@
 package org.apache.rave.opensocial.service.impl;
 
 import org.apache.rave.exception.NotSupportedException;
+import org.apache.rave.portal.model.PersonProperty;
+import org.apache.rave.portal.model.util.ModelUtils;
 import org.apache.rave.util.CollectionUtils;
 import org.apache.shindig.protocol.model.Enum;
 import org.apache.shindig.protocol.model.EnumImpl;
+import org.apache.shindig.social.core.model.BodyTypeImpl;
+import org.apache.shindig.social.core.model.ListFieldImpl;
+import org.apache.shindig.social.core.model.UrlImpl;
 import org.apache.shindig.social.opensocial.model.*;
 
 import java.io.Serializable;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -50,14 +57,15 @@ public class FieldRestrictingPerson impl
         this.fields = fields;
     }
 
+    //REQUIRED FIELD
     @Override
     public String getDisplayName() {
-        return displayField(Field.DISPLAY_NAME) ? internal.getDisplayName() : null;
+        return internal.getDisplayName();
     }
 
     @Override
     public void setDisplayName(String displayName) {
-        internal.setDisplayName(displayName);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -67,7 +75,7 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setAboutMe(String aboutMe) {
-        internal.setAboutMe(aboutMe);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -88,7 +96,7 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setActivities(List<String> activities) {
-
+        throw new NotSupportedException();
     }
 
     @Override
@@ -104,14 +112,13 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Integer getAge() {
-        //return displayField(Field.AGE) ? internal.getAge() : null;
-
-        return null;
+        String value = getSingleValueFromProperties(Field.AGE);
+        return value == null ? null : Integer.parseInt(value);
     }
 
     @Override
     public void setAge(Integer age) {
-       // internal.setAge(age);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -126,8 +133,8 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Date getBirthday() {
-        //return displayField(Field.BIRTHDAY) ? internal.getBirthday() : null;
-        return null;
+        String value = getSingleValueFromProperties(Field.BIRTHDAY);
+        return value == null ? null : tryParseDate(value);
     }
 
     @Override
@@ -137,8 +144,17 @@ public class FieldRestrictingPerson impl
 
     @Override
     public BodyType getBodyType() {
-        //return displayField(Field.BODY_TYPE) ? internal.getBodyType() : null;
-        return null;
+        BodyType type = null;
+        if(displayField(Field.BODY_TYPE)) {
+            Map<String,String> map = mapValuesByQualifier(getFromProperties(Field.BODY_TYPE));
+            type = new BodyTypeImpl();
+            type.setBuild(map.get("build"));
+            type.setEyeColor(map.get("eyeColor"));
+            type.setHairColor(map.get("hairColor"));
+            type.setHeight(map.containsKey("height") ? Float.parseFloat(map.get("height")) : null);
+            type.setWeight(map.containsKey("weight") ? Float.parseFloat(map.get("weight")) : null);
+        }
+        return type;
     }
 
     @Override
@@ -168,13 +184,12 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getChildren() {
-        //return displayField(Field.CHILDREN) ? internal.getChildren() : null;
-        return null;
+        return getSingleValueFromProperties(Field.CHILDREN);
     }
 
     @Override
     public void setChildren(String children) {
-        //internal.setChildren(children);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -190,18 +205,28 @@ public class FieldRestrictingPerson impl
 
     @Override
     public org.apache.shindig.protocol.model.Enum<Drinker> getDrinker() {
-        //return displayField(Field.DRINKER) ? new EnumImpl<Drinker>(Drinker.valueOf(internal.getDrinker())) : null;
-        return null;
+        String value = getSingleValueFromProperties(Field.DRINKER);
+        return value == null ? null : new EnumImpl<Drinker>(Drinker.valueOf(value));
     }
 
     @Override
     public void setDrinker(org.apache.shindig.protocol.model.Enum<Drinker> newDrinker) {
-        //internal.setDrinker(newDrinker.getValue().toString());
+        throw new NotSupportedException();
     }
 
     @Override
     public List<ListField> getEmails() {
-        return getListFromProperties(Field.EMAILS);
+        List<ListField> fields = getListFromProperties(Field.EMAILS);
+        //Override primary value as we will set a new primary with the registered address
+        for(ListField field : fields) {
+            field.setPrimary(false);
+        }
+        //Set the e-mail used to register with Rave as the "primary" address
+        ListFieldImpl listField = new ListFieldImpl("Registered", internal.getEmail());
+        listField.setPrimary(true);
+        fields.add(listField);
+
+        return fields;
     }
 
     @Override
@@ -211,24 +236,22 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getEthnicity() {
-        //return displayField(Field.ETHNICITY) ? internal.getEthnicity() : null;
-        return null;
+        return getSingleValueFromProperties(Field.ETHNICITY);
     }
 
     @Override
     public void setEthnicity(String ethnicity) {
-        //internal.setEthnicity(ethnicity);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getFashion() {
-        //return displayField(Field.FASHION) ? internal.getFashion() : null;
-        return null;
+        return getSingleValueFromProperties(Field.FASHION);
     }
 
     @Override
     public void setFashion(String fashion) {
-        //internal.setFashion(fashion);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -243,24 +266,23 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Gender getGender() {
-        //return displayField(Field.GENDER) ? internal.getGender() : null;
-        return null;
+        String value = getSingleValueFromProperties(Field.GENDER);
+        return value == null ? null : Gender.valueOf(value);
     }
 
     @Override
     public void setGender(Gender newGender) {
-        //internal.setGender(newGender);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getHappiestWhen() {
-        //return displayField(Field.HAPPIEST_WHEN) ? internal.getHappiestWhen() : null;
-        return null;
+        return getSingleValueFromProperties(Field.HAPPIEST_WHEN);
     }
 
     @Override
     public void setHappiestWhen(String happiestWhen) {
-        //internal.setHappiestWhen(happiestWhen);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -285,18 +307,18 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getHumor() {
-        //return displayField(Field.HUMOR) ? internal.getHumor() : null;
-        return null;
+        return getSingleValueFromProperties(Field.HUMOR);
     }
 
     @Override
     public void setHumor(String humor) {
-        //internal.setHumor(humor);
+        throw new NotSupportedException();
     }
 
+    //REQUIRED FIELD
     @Override
     public String getId() {
-        return displayField(Field.ID) ? internal.getEntityId().toString() : null;
+        return internal.getEntityId().toString();
     }
 
     @Override
@@ -326,13 +348,12 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getJobInterests() {
-        //return displayField(Field.JOB_INTERESTS) ? internal.getJobInterests() : null;
-        return null;
+        return getSingleValueFromProperties(Field.JOB_INTERESTS);
     }
 
     @Override
     public void setJobInterests(String jobInterests) {
-        //internal.setJobInterests(jobInterests);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -347,24 +368,23 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Date getUpdated() {
-        //return internal.getLastUpdated();
-        return null;
+        String value = getSingleValueFromProperties(Field.LAST_UPDATED);
+        return value == null ? null : tryParseDate(value);
     }
 
     @Override
     public void setUpdated(Date updated) {
-        //internal.setLastUpdated(updated);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getLivingArrangement() {
-        //return displayField(Field.LIVING_ARRANGEMENT) ? internal.getLivingArrangement() : null;
-        return null;
+        return getSingleValueFromProperties(Field.LIVING_ARRANGEMENT);
     }
 
     @Override
     public void setLivingArrangement(String livingArrangement) {
-        //internal.setLivingArrangement(livingArrangement);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -410,24 +430,23 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Enum<NetworkPresence> getNetworkPresence() {
-        //return displayField(Field.NETWORKPRESENCE) ? new EnumImpl<NetworkPresence>(NetworkPresence.valueOf(internal.getNetworkPresence())) : null;
-        return null;
+        String value = getSingleValueFromProperties(Field.NETWORKPRESENCE);
+        return value == null ? null : new EnumImpl<NetworkPresence>(NetworkPresence.valueOf(value));
     }
 
     @Override
     public void setNetworkPresence(Enum<NetworkPresence> networkPresence) {
-        //internal.setNetworkPresence(networkPresence.getValue().toString());
+        throw new NotSupportedException();
     }
 
     @Override
     public String getNickname() {
-        //return displayField(Field.NICKNAME) ? internal.getNickname() : null;
-        return null;
+        return displayField(Field.NICKNAME) ? internal.getPreferredName() : null;
     }
 
     @Override
     public void setNickname(String nickname) {
-        //internal.setNickname(nickname);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -443,13 +462,12 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getPets() {
-        //return displayField(Field.PETS) ? internal.getPets() : null;
-        return null;
+        return getSingleValueFromProperties(Field.PETS);
     }
 
     @Override
     public void setPets(String pets) {
-        //internal.setPets(pets);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -474,30 +492,28 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getPoliticalViews() {
-        //return displayField(Field.POLITICAL_VIEWS) ? internal.getPoliticalViews() : null;
-        return null;
+        return getSingleValueFromProperties(Field.POLITICAL_VIEWS);
     }
 
     @Override
     public void setPoliticalViews(String politicalViews) {
-        //internal.setPoliticalViews(politicalViews);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getPreferredUsername() {
-        //return displayField(Field.PREFERRED_USERNAME) ? internal.getPreferredUsername() : null;
-        return null;
+        return displayField(Field.PREFERRED_USERNAME) ? internal.getUsername() : null;
     }
 
     @Override
     public void setPreferredUsername(String preferredString) {
-        //internal.setPreferredUsername(preferredString);
+        throw new NotSupportedException();
     }
 
     @Override
     public Url getProfileSong() {
-        //return displayField(Field.PROFILE_SONG) ? internal.getProfileSong() : null;
-        return null;
+        PersonProperty property = CollectionUtils.getSingleValue(getFromProperties(Field.PROFILE_SONG));
+        return convertToUrl(property);
     }
 
     @Override
@@ -507,8 +523,8 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Url getProfileVideo() {
-        //return displayField(Field.PROFILE_VIDEO) ? internal.getProfileVideo() : null;
-        return null;
+        PersonProperty property = CollectionUtils.getSingleValue(getFromProperties(Field.PROFILE_VIDEO));
+        return property == null ? null :convertToUrl(property);
     }
 
     @Override
@@ -528,68 +544,63 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getRelationshipStatus() {
-        //return displayField(Field.RELATIONSHIP_STATUS) ? internal.getRelationshipStatus() : null;
-        return null;
+        return getSingleValueFromProperties(Field.RELATIONSHIP_STATUS);
     }
 
     @Override
     public void setRelationshipStatus(String relationshipStatus) {
-        //internal.setRelationshipStatus(relationshipStatus);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getReligion() {
-        //return displayField(Field.RELIGION) ? internal.getReligion() : null;
-        return null;
+        return getSingleValueFromProperties(Field.RELIGION);
     }
 
     @Override
     public void setReligion(String religion) {
-        //internal.setReligion(religion);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getRomance() {
-        //return displayField(Field.ROMANCE) ? internal.getRomance() : null;
-        return null;
+        return getSingleValueFromProperties(Field.ROMANCE);
     }
 
     @Override
     public void setRomance(String romance) {
-        //internal.setRomance(romance);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getScaredOf() {
-        //return displayField(Field.SCARED_OF) ? internal.getScaredOf() : null;
-        return null;
+        return getSingleValueFromProperties(Field.SCARED_OF);
     }
 
     @Override
     public void setScaredOf(String scaredOf) {
-        //internal.setScaredOf(scaredOf);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getSexualOrientation() {
-        //return displayField(Field.SEXUAL_ORIENTATION) ? internal.getSexualOrientation() : null;
-        return null;
+        return getSingleValueFromProperties(Field.SEXUAL_ORIENTATION);
     }
 
     @Override
     public void setSexualOrientation(String sexualOrientation) {
-        //internal.setSexualOrientation(sexualOrientation);
+        throw new NotSupportedException();
     }
 
     @Override
     public Enum<Smoker> getSmoker() {
-        //return displayField(Field.SMOKER) ? new EnumImpl<Smoker>(Smoker.valueOf(internal.getSmoker())) : null;
-        return null;
+        String value = getSingleValueFromProperties(Field.SMOKER);
+        return value == null ? null : new EnumImpl<Smoker>(Smoker.valueOf(value));
     }
 
     @Override
     public void setSmoker(Enum<Smoker> newSmoker) {
-        //internal.setSmoker(newSmoker.getValue().toString());
+        throw new NotSupportedException();
     }
 
     @Override
@@ -609,7 +620,7 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setStatus(String status) {
-        internal.setStatus(status);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -624,13 +635,13 @@ public class FieldRestrictingPerson impl
 
     @Override
     public Long getUtcOffset() {
-        //return displayField(Field.UTC_OFFSET) ? internal.getUtcOffset() : null;
-        return null;
+        String value = getSingleValueFromProperties(Field.UTC_OFFSET);
+        return value == null ? null : Long.parseLong(value);
     }
 
     @Override
     public void setUtcOffset(Long utcOffset) {
-        //internal.setUtcOffset(utcOffset);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -665,9 +676,12 @@ public class FieldRestrictingPerson impl
 
     @Override
     public List<Url> getUrls() {
-        //TODO RAVE-178:Get URLs
-        //return displayField(Field.URLS) ? internal.getUrls() : null;
-        return null;
+        List<PersonProperty> properties = getFromProperties(Field.URLS);
+        List<Url> urls = new ArrayList<Url>();
+        for(PersonProperty property : properties) {
+            urls.add(convertToUrl(property));
+        }
+        return urls;
     }
 
     @Override
@@ -682,24 +696,22 @@ public class FieldRestrictingPerson impl
 
     @Override
     public String getProfileUrl() {
-        //return displayField(Field.PROFILE_URL) ? internal.getProfileUrl() : null;
-        return null;
+        return getSingleValueFromProperties(Field.PROFILE_URL);
     }
 
     @Override
     public void setProfileUrl(String profileUrl) {
-        //internal.setProfileUrl(profileUrl);
+        throw new NotSupportedException();
     }
 
     @Override
     public String getThumbnailUrl() {
-        //return displayField(Field.THUMBNAIL_URL) ? internal.getThumbnailUrl() : null;
-        return null;
+        return getSingleValueFromProperties(Field.THUMBNAIL_URL);
     }
 
     @Override
     public void setThumbnailUrl(String thumbnailUrl) {
-        //internal.setThumbnailUrl(thumbnailUrl);
+        throw new NotSupportedException();
     }
 
     @Override
@@ -717,21 +729,37 @@ public class FieldRestrictingPerson impl
         this.isViewer = isViewer;
     }
 
+    private String getSingleValueFromProperties(Field field) {
+        List<String> values = getValuesFromProperties(field);
+        return CollectionUtils.getSingleValue(values);
+    }
+
     private boolean displayField(Field field) {
-        return fields == null || fields.isEmpty() || fields.contains(field.toString());
+        return fields != null && fields.contains(field.toString());
     }
 
-    private List<? extends ListField> getFromProperties(Field field) {
-        //return internal.getProperties().get(field.toString());
-        return null;
+    private List<PersonProperty> getFromProperties(Field field) {
+        return internal.getMappedProperties().containsKey(field.toString()) ?
+                internal.getMappedProperties().get(field.toString()) :
+                new ArrayList<PersonProperty>();
     }
 
     private List<String> getValuesFromProperties(Field field) {
-        return displayField(field) ? toValueList(getFromProperties(field)) : null;
+        return displayField(field) ? toValueList(getFromProperties(field)) : new ArrayList<String>();
     }
 
     private List<ListField> getListFromProperties(Field field) {
-        return displayField(field) ? CollectionUtils.<ListField>toBaseTypedList(getFromProperties(field)) : null;
+        return displayField(field) ? convertFromProperties(getFromProperties(field)) : new ArrayList<ListField>();
+    }
+
+    private static List<ListField> convertFromProperties(List<PersonProperty> properties) {
+        List<ListField> fieldList = new ArrayList<ListField>();
+        for(PersonProperty property: properties) {
+            ListField field = new ListFieldImpl(property.getQualifier(), property.getValue());
+            field.setPrimary(property.getPrimary());
+            fieldList.add(field);
+        }
+        return fieldList;
     }
 
     private static List<Enum<LookingFor>> getEnumsFromValues(List<String> values) {
@@ -744,11 +772,31 @@ public class FieldRestrictingPerson impl
         return looking;
     }
 
-    private static List<String> toValueList(List<? extends ListField> properties) {
+    private static Date tryParseDate(String value) {
+        try {
+            return new SimpleDateFormat(ModelUtils.STANDARD_DATE_FORMAT).parse(value);
+        } catch (ParseException e) {
+            throw new IllegalStateException("Invalid Date found:   " + value);
+        }
+    }
+
+    private static List<String> toValueList(List<PersonProperty> properties) {
         List<String> values = new ArrayList<String>();
-        for (ListField property : properties) {
+        for (PersonProperty property : properties) {
             values.add(property.getValue());
         }
         return values;
     }
+
+    private static Map<String, String> mapValuesByQualifier(List<PersonProperty> properties) {
+        Map<String, String> propertyMap = new HashMap<String, String>();
+        for(PersonProperty property : properties) {
+            propertyMap.put(property.getQualifier(), property.getValue());
+        }
+        return propertyMap;
+    }
+
+    private static Url convertToUrl(PersonProperty property) {
+        return new UrlImpl(property.getValue(), property.getExtendedValue(), property.getQualifier());
+    }
 }

Added: incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java?rev=1206966&view=auto
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java (added)
+++ incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java Mon Nov 28 03:20:56 2011
@@ -0,0 +1,639 @@
+package org.apache.rave.opensocial.service;
+
+
+import org.apache.rave.exception.NotSupportedException;
+import org.apache.rave.opensocial.service.impl.FieldRestrictingPerson;
+import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.util.ModelUtils;
+import org.apache.shindig.protocol.model.EnumImpl;
+import org.apache.shindig.social.core.model.AddressImpl;
+import org.apache.shindig.social.core.model.BodyTypeImpl;
+import org.apache.shindig.social.core.model.UrlImpl;
+import org.apache.shindig.social.opensocial.model.*;
+import org.apache.shindig.social.opensocial.model.Address;
+import org.apache.shindig.social.opensocial.model.Person;
+import org.junit.Test;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+/**
+ */
+public class FieldRestrictingPersonTest {
+
+    private static final String USERNAME = "canonical";
+    private static final String ABOUT_ME = "About Me";
+    private static final String ADDITIONAL_NAME = "AdditionalName";
+    private static final String DISPLAY_NAME = "Display Name";
+    private static final String E_MAIL_ADDRESS = "E-mail address";
+    private static final String FIRST_NAME = "User";
+    private static final String GIVEN_NAME = "Canonical";
+    private static final String PREFIX = "Prefix";
+    private static final String SUFFIX = "Suffix";
+    private static final String PREFERRED_NAME = "PreferredName";
+    private static final String STATUS = "Status";
+    private static final Integer AGE = 24;
+    private static final String BIRTHDAY_STRING = "1997-07-16T19:20:30+0100";
+    private static final Date BIRTHDAY = parseDate(BIRTHDAY_STRING);
+    private static final String BODY_BUILD = "big";
+    private static final String BODY_EYE_COLOR = "red";
+    private static final String ACTIVITY_1 = "snowboarding";
+    private static final String ACTIVITY_2 = "baseball";
+    private static final String E_MAIL_ADDRESS_2 = "ihateyou@h8r.com";
+    private static final String E_MAIL_ADDRESS_3 = "boo@yahoo.com";
+    private static final String IM_PROVIDER_1 = "aol";
+    private static final String IM_PROVIDER_2 = "skype";
+    private static final String IM_1 = "aimname";
+    private static final String IM_2 = "skypename";
+    private static final String LINK_VALUE = "linkValue";
+    private static final String LINK_TEXT = "linkText";
+
+
+    @Test
+    public void getId() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), null);
+        assertThat(p.getId(), is(equalTo("1")));
+    }
+    @Test
+    public void getDisplayName() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), null);
+        assertThat(p.getDisplayName(), is(equalTo(DISPLAY_NAME)));
+    }
+    @Test
+    public void getUsername_null() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), null);
+        assertThat(p.getPreferredUsername(), is(nullValue()));
+    }
+    @Test
+    public void getUsername_empty() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), new HashSet<String>());
+        assertThat(p.getPreferredUsername(), is(nullValue()));
+    }
+    @Test
+    public void getUsername_valid() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.PREFERRED_USERNAME));
+        assertThat(p.getPreferredUsername(), is(equalTo(USERNAME)));
+    }
+
+    @Test
+    public void getAboutMe_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.ABOUT_ME));
+        assertThat(p.getAboutMe(), is(equalTo(ABOUT_ME)));
+    }
+
+    @Test
+    public void getAboutMe_notset() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.BIRTHDAY, Person.Field.ACTIVITIES));
+        assertThat(p.getAboutMe(), is(nullValue()));
+    }
+
+    @Test
+    public void getAge_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.AGE));
+        assertThat(p.getAge(), is(equalTo(AGE)));
+    }
+
+    @Test
+    public void getAge_notset() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.BIRTHDAY, Person.Field.ACTIVITIES));
+        assertThat(p.getAge(), is(nullValue()));
+    }
+
+    @Test
+    public void getBirthday_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.BIRTHDAY));
+        assertThat(p.getBirthday(), is(equalTo(BIRTHDAY)));
+    }
+
+    @Test
+    public void getBirthday_notset() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.AGE, Person.Field.ACTIVITIES));
+        assertThat(p.getBirthday(), is(nullValue()));
+    }
+
+    @Test
+    public void getActvities_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.ACTIVITIES));
+        List<String> activities = p.getActivities();
+        assertThat(activities.size(), is(equalTo(2)));
+        assertThat(activities.contains(ACTIVITY_1), is(true));
+        assertThat(activities.contains(ACTIVITY_2), is(true));
+    }
+
+    @Test
+    public void getActivities_notset() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.AGE, Person.Field.BOOKS));
+        assertThat(p.getActivities().isEmpty(), is(true));
+    }
+    @Test
+    public void getBooks_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.BOOKS, Person.Field.ACTIVITIES));
+        assertThat(p.getBooks().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getCars_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.CARS, Person.Field.ACTIVITIES));
+        assertThat(p.getCars().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getBodyType_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.BODY_TYPE));
+        assertThat(p.getBodyType().getBuild(), is(equalTo(BODY_BUILD)));
+        assertThat(p.getBodyType().getEyeColor(), is(equalTo(BODY_EYE_COLOR)));
+    }
+
+    @Test
+    public void getBodyType_notset() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.AGE, Person.Field.ACTIVITIES));
+        assertThat(p.getBodyType(), is(nullValue()));
+    }
+
+    @Test
+    public void getChildren_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.ABOUT_ME));
+        assertThat(p.getChildren(), is(nullValue()));
+    }
+
+    @Test
+    public void getDrinker_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.DRINKER));
+        assertThat(p.getDrinker().getValue(), is(equalTo(Drinker.HEAVILY)));
+    }
+
+    @Test
+    public void getDrinker_notset() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.ABOUT_ME));
+        assertThat(p.getDrinker(), is(nullValue()));
+    }
+
+    @Test
+    public void getEmails_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.EMAILS));
+        assertThat(p.getEmails().size(), is(equalTo(3)));
+        int primaryCount = 0;
+        for(ListField field : p.getEmails()) {
+            assertThat(isValidEmailField(field), is(true));
+            primaryCount += field.getPrimary() != null && field.getPrimary() ? 1 : 0;
+        }
+        assertThat(primaryCount, is(equalTo(1)));
+    }
+
+    @Test
+    public void getEthnicity_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.ETHNICITY, Person.Field.ACTIVITIES));
+        assertThat(p.getEthnicity(), is(nullValue()));
+    }
+
+    @Test
+    public void getFashion_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.FASHION, Person.Field.ACTIVITIES));
+        assertThat(p.getFashion(), is(nullValue()));
+    }
+
+    @Test
+    public void getFood_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.FOOD, Person.Field.ACTIVITIES));
+        assertThat(p.getFood().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getGender_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.GENDER));
+        assertThat(p.getGender(), is(equalTo(Person.Gender.female)));
+    }
+
+    @Test
+    public void getHappiestWhen_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.HAPPIEST_WHEN));
+        assertThat(p.getHappiestWhen(), is(nullValue()));
+    }
+
+    @Test
+    public void getHumor_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.HUMOR));
+        assertThat(p.getHumor(), is(nullValue()));
+    }
+
+    @Test
+    public void getGender_null() {
+        org.apache.rave.portal.model.Person testPerson = getTestPerson();
+        testPerson.setProperties(new ArrayList<PersonProperty>());
+        Person p = new FieldRestrictingPerson(testPerson, getFieldSet(Person.Field.GENDER));
+        assertThat(p.getGender(), is(nullValue()));
+    }
+
+    @Test
+    public void getIms_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.IMS));
+        assertThat(p.getIms().size(), is(equalTo(2)));
+        for(ListField field : p.getIms()) {
+            if(IM_PROVIDER_1.equals(field.getType())) {
+                assertThat(field.getValue(), is(equalTo(IM_1)));
+            } else if(IM_PROVIDER_2.equals(field.getType())) {
+                assertThat(field.getValue(), is(equalTo(IM_2)));
+            } else {
+                fail();
+            }
+        }
+    }
+
+    @Test
+    public void getInterests_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.INTERESTS));
+        assertThat(p.getInterests().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getJobInterests_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.JOB_INTERESTS));
+        assertThat(p.getJobInterests(), is(nullValue()));
+    }
+
+    @Test
+    public void getLanguagesSpoken_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.LANGUAGES_SPOKEN));
+        assertThat(p.getLanguagesSpoken().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getUpdated_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.LAST_UPDATED));
+        assertThat(p.getUpdated(), is(nullValue()));
+    }
+
+    @Test
+    public void getLivingArrangement_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.LIVING_ARRANGEMENT));
+        assertThat(p.getLivingArrangement(), is(nullValue()));
+    }
+    
+    @Test
+    public void getLookingFor_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.LOOKING_FOR));
+        assertThat(p.getLookingFor().size(), is(equalTo(1)));
+    }
+    
+    @Test
+    public void getMovies_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.MOVIES));
+        assertThat(p.getMovies().isEmpty(), is(true));
+    }
+    
+    @Test
+    public void getMusic_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.MUSIC));
+        assertThat(p.getMusic().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getNetworkPresence_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.NETWORKPRESENCE));
+        assertThat(p.getNetworkPresence(), is(nullValue()));
+    }
+
+    @Test
+    public void getNickname_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.NICKNAME));
+        assertThat(p.getNickname(), is(equalTo(PREFERRED_NAME)));
+    }
+
+    @Test
+    public void getPets_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.PETS));
+        assertThat(p.getPets(), is(nullValue()));
+    }
+
+    @Test
+    public void getPhoneNumbers_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.PHONE_NUMBERS));
+        assertThat(p.getPhoneNumbers().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getPhotos_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.PHOTOS));
+        assertThat(p.getPhotos().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getPoliticalViews_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.POLITICAL_VIEWS));
+        assertThat(p.getPoliticalViews(), is(nullValue()));
+    }
+
+    @Test
+    public void getProfileSong_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.PROFILE_SONG));
+        assertThat(p.getProfileSong().getValue(), is(equalTo(LINK_VALUE)));
+        assertThat(p.getProfileSong().getLinkText(), is(equalTo(LINK_TEXT)));
+    }
+
+    @Test
+    public void getProfileVideo_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.PROFILE_VIDEO));
+        assertThat(p.getProfileVideo(), is(nullValue()));
+    }
+
+    @Test
+    public void getQuotes_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.QUOTES));
+        assertThat(p.getQuotes().isEmpty(), is(true));
+    }
+
+    @Test
+    public void getRelationshipStatus_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.RELATIONSHIP_STATUS));
+        assertThat(p.getRelationshipStatus(), is(nullValue()));
+    }
+
+    @Test
+    public void getStatus_set() {
+        Person p = new FieldRestrictingPerson(getTestPerson(), getFieldSet(Person.Field.STATUS));
+        assertThat(p.getStatus(), is(equalTo(STATUS)));
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setStatus() {
+        new FieldRestrictingPerson(null, null).setStatus(SUFFIX);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setRelationshipStatus() {
+        new FieldRestrictingPerson(null, null).setRelationshipStatus(SUFFIX);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setQuotes() {
+        new FieldRestrictingPerson(null, null).setQuotes(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setProfileVideo() {
+        new FieldRestrictingPerson(null, null).setProfileVideo(new UrlImpl());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setProfileSong() {
+        new FieldRestrictingPerson(null, null).setProfileSong(new UrlImpl());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setPoliticalViews() {
+        new FieldRestrictingPerson(null, null).setPoliticalViews(SUFFIX);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setPhotos() {
+        new FieldRestrictingPerson(null, null).setPhotos(new ArrayList<ListField>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setPhoneNumbers() {
+        new FieldRestrictingPerson(null, null).setPhoneNumbers(new ArrayList<ListField>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setPets() {
+        new FieldRestrictingPerson(null, null).setPets(PREFERRED_NAME);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setNickname() {
+        new FieldRestrictingPerson(null, null).setNickname(PREFERRED_NAME);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setNetworkPresence() {
+        new FieldRestrictingPerson(null, null).setNetworkPresence(new EnumImpl<NetworkPresence>(NetworkPresence.AWAY));
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setMusic() {
+        new FieldRestrictingPerson(null, null).setMusic(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setMovies() {
+        new FieldRestrictingPerson(null, null).setMovies(new ArrayList<String>());
+    }
+    
+    @Test(expected = NotSupportedException.class)
+    public void setLookingFor() {
+        new FieldRestrictingPerson(null, null).setLookingFor(new ArrayList<org.apache.shindig.protocol.model.Enum<LookingFor>>());
+    }
+    
+    @Test(expected = NotSupportedException.class)
+    public void setLivingArrangement() {
+        new FieldRestrictingPerson(null, null).setLivingArrangement(SUFFIX);
+    }
+    
+    @Test(expected = NotSupportedException.class)
+    public void setUpdated() {
+        new FieldRestrictingPerson(null, null).setUpdated(new Date());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setLanguagesSpoken() {
+        new FieldRestrictingPerson(null, null).setLanguagesSpoken(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setJobInterests() {
+        new FieldRestrictingPerson(null, null).setJobInterests(SUFFIX);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setInterests() {
+        new FieldRestrictingPerson(null, null).setInterests(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setIms() {
+        new FieldRestrictingPerson(null, null).setIms(new ArrayList<ListField>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setHumor() {
+        new FieldRestrictingPerson(null, null).setHumor(DISPLAY_NAME);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setDisplayName() {
+        new FieldRestrictingPerson(null, null).setDisplayName(DISPLAY_NAME);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setAboutMe() {
+        new FieldRestrictingPerson(null, null).setAboutMe(DISPLAY_NAME);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setActivities() {
+        new FieldRestrictingPerson(null, null).setActivities(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setAge() {
+        new FieldRestrictingPerson(null, null).setAge(AGE);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setAccounts() {
+        new FieldRestrictingPerson(null, null).setAccounts(new ArrayList<Account>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setAddresses() {
+        new FieldRestrictingPerson(null, null).setAddresses(new ArrayList<Address>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setBirthday() {
+        new FieldRestrictingPerson(null, null).setBirthday(new Date());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setBodyType() {
+        new FieldRestrictingPerson(null, null).setBodyType(new BodyTypeImpl());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setBooks() {
+        new FieldRestrictingPerson(null, null).setBooks(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setCars() {
+        new FieldRestrictingPerson(null, null).setCars(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setChildren() {
+        new FieldRestrictingPerson(null, null).setChildren(DISPLAY_NAME);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setCurrentLocation() {
+        new FieldRestrictingPerson(null, null).setCurrentLocation(new AddressImpl());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setDrinker() {
+        new FieldRestrictingPerson(null, null).setDrinker(new EnumImpl<Drinker>(Drinker.QUIT));
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setEthnicity() {
+        new FieldRestrictingPerson(null, null).setEthnicity(SUFFIX);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setFashion() {
+        new FieldRestrictingPerson(null, null).setFashion(SUFFIX);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setFood() {
+        new FieldRestrictingPerson(null, null).setFood(new ArrayList<String>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setEmails() {
+        new FieldRestrictingPerson(null, null).setEmails(new ArrayList<ListField>());
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setGender() {
+        new FieldRestrictingPerson(null, null).setGender(Person.Gender.male);
+    }
+
+    @Test(expected = NotSupportedException.class)
+    public void setHappiestWhen() {
+        new FieldRestrictingPerson(null, null).setHappiestWhen(SUFFIX);
+    }
+
+    private org.apache.rave.portal.model.Person getTestPerson() {
+        org.apache.rave.portal.model.Person person = new PropertyMappingPerson();
+        person.setEntityId(1L);
+        person.setUsername(USERNAME);
+        person.setAboutMe(ABOUT_ME);
+        person.setAdditionalName(ADDITIONAL_NAME);
+        person.setDisplayName(DISPLAY_NAME);
+        person.setEmail(E_MAIL_ADDRESS);
+        person.setFamilyName(FIRST_NAME);
+        person.setGivenName(GIVEN_NAME);
+        person.setHonorificPrefix(PREFIX);
+        person.setHonorificSuffix(SUFFIX);
+        person.setPreferredName(PREFERRED_NAME);
+        person.setStatus(STATUS);
+        person.setAddresses(null);
+        List<PersonProperty> properties = new ArrayList<PersonProperty>();
+        properties.add(new PersonProperty(1L, "gender", Person.Gender.female.toString(), null, "", false));
+        properties.add(new PersonProperty(1L, "drinker", Drinker.HEAVILY.toString(), null, "", false));
+        properties.add(new PersonProperty(1L, "age", AGE.toString(), null, "", false));
+        properties.add(new PersonProperty(1L, "birthday", BIRTHDAY_STRING, null, "", false));
+        properties.add(new PersonProperty(1L, "bodyType", BODY_BUILD, null, "build", false));
+        properties.add(new PersonProperty(1L, "bodyType", BODY_EYE_COLOR, null, "eyeColor", false));
+        properties.add(new PersonProperty(1L, "bodyType", "25.24", null, "height", false));
+        properties.add(new PersonProperty(1L, "ims", IM_1, null, IM_PROVIDER_1, true));
+        properties.add(new PersonProperty(1L, "ims", IM_2, null, IM_PROVIDER_2, false));
+        properties.add(new PersonProperty(1L, "emails", E_MAIL_ADDRESS_2, null, "personal", false));
+        properties.add(new PersonProperty(1L, "emails", E_MAIL_ADDRESS_3, null, "junk", true));
+        properties.add(new PersonProperty(1L, "activities", ACTIVITY_1, null, "", false));
+        properties.add(new PersonProperty(1L, "activities", ACTIVITY_2, null, "", false));
+        properties.add(new PersonProperty(1L, "profileSong", LINK_VALUE, LINK_TEXT, null, false));
+        properties.add(new PersonProperty(1L, "lookingFor", LookingFor.FRIENDS.toString(), null, null, false));
+        person.setProperties(properties);
+        return person;
+    }
+
+    private Set<String> getFieldSet(Person.Field... fields) {
+        Set<String> set = new HashSet<String>();
+        for(Person.Field field : fields) {
+            set.add(field.toString());
+        }
+        return set;
+    }
+
+    private static Date parseDate(String birthdayString) {
+        try {
+            return new SimpleDateFormat(ModelUtils.STANDARD_DATE_FORMAT).parse(birthdayString);
+        } catch (ParseException e) {
+            throw new RuntimeException("Parse Exception...",e);
+        }
+    }
+
+    private Boolean isValidEmailField(ListField field) {
+        boolean valid;
+        if(E_MAIL_ADDRESS.equals(field.getValue())) {
+            valid = "Registered".equals(field.getType());
+            valid &= field.getPrimary();
+        } else if(E_MAIL_ADDRESS_2.equals(field.getValue())) {
+            valid = "personal".equals(field.getType());
+            valid &= !field.getPrimary();
+        } else if(E_MAIL_ADDRESS_3.equals(field.getValue())) {
+            valid = "junk".equals(field.getType());
+            valid &= !field.getPrimary();
+        } else {
+            valid = false;
+        }
+        return valid;
+    }
+
+    private static class PropertyMappingPerson extends org.apache.rave.portal.model.Person {
+        @Override
+        public void setProperties(List<PersonProperty> properties) {
+            super.setProperties(properties);
+            super.setMappedProperties(createPropertyMap(properties));
+        }
+    }
+}