You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ie...@apache.org on 2008/11/05 03:26:55 UTC

svn commit: r711494 - in /incubator/shindig/trunk/java/social-api/src: main/java/org/apache/shindig/social/core/model/ main/java/org/apache/shindig/social/core/util/xstream/ main/java/org/apache/shindig/social/opensocial/model/ test/resources/org/apach...

Author: ieb
Date: Tue Nov  4 18:26:54 2008
New Revision: 711494

URL: http://svn.apache.org/viewvc?rev=711494&view=rev
Log:
SHINDIG-562

    Updates to the schema to match the reality of the person class.
    The use of xs:sequence in the schema, which is required to achieve implicit collections in XSD is having
    some undesired side effects, as it requires that the elements are serialized precisely in order. There
    may be a better way of expressing this in XSD with type inheritance, but at the moment, I cant think of
    a suitable structure.

Modified:
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/model/PersonImpl.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/InterfaceClassMapper.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/XStream081Configuration.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Person.java
    incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd
    incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/model/PersonImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/model/PersonImpl.java?rev=711494&r1=711493&r2=711494&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/model/PersonImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/model/PersonImpl.java Tue Nov  4 18:26:54 2008
@@ -41,14 +41,14 @@
   private List<String> activities;
   private List<Address> addresses;
   private Integer age;
+  private Date birthday;
   private BodyType bodyType;
   private List<String> books;
   private List<String> cars;
   private String children;
   private Address currentLocation;
-  private Date birthday;
-  private Enum<Enum.Drinker> drinker;
   private String displayName;
+  private Enum<Enum.Drinker> drinker;
   private List<ListField> emails;
   private String ethnicity;
   private String fashion;
@@ -63,7 +63,6 @@
   private List<String> interests;
   private String jobInterests;
   private List<String> languagesSpoken;
-  private Date updated;
   private String livingArrangement;
   private List<Enum<Enum.LookingFor>> lookingFor;
   private List<String> movies;
@@ -92,6 +91,7 @@
   private List<String> turnOffs;
   private List<String> turnOns;
   private List<String> tvShows;
+  private Date updated;
   private List<Url> urls;
 
   // Note: Not in the opensocial js person object directly

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/InterfaceClassMapper.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/InterfaceClassMapper.java?rev=711494&r1=711493&r2=711494&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/InterfaceClassMapper.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/InterfaceClassMapper.java Tue Nov  4 18:26:54 2008
@@ -22,6 +22,8 @@
 import com.thoughtworks.xstream.mapper.Mapper;
 import com.thoughtworks.xstream.mapper.MapperWrapper;
 
+import org.apache.shindig.social.opensocial.model.Person;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -339,4 +341,6 @@
     return super.getImplicitCollectionDefForFieldName(itemType, fieldName);
   }
 
+
+  
 }

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/XStream081Configuration.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/XStream081Configuration.java?rev=711494&r1=711493&r2=711494&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/XStream081Configuration.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/xstream/XStream081Configuration.java Tue Nov  4 18:26:54 2008
@@ -19,14 +19,21 @@
 
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.extended.ISO8601DateConverter;
+import com.thoughtworks.xstream.converters.extended.ISO8601GregorianCalendarConverter;
+import com.thoughtworks.xstream.converters.extended.ISO8601SqlTimestampConverter;
 import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
 import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
+import com.thoughtworks.xstream.mapper.FieldAliasingMapper;
 import com.thoughtworks.xstream.mapper.Mapper;
 
+import org.apache.shindig.social.core.model.EnumImpl;
+import org.apache.shindig.social.core.model.UrlImpl;
 import org.apache.shindig.social.opensocial.model.Account;
 import org.apache.shindig.social.opensocial.model.Activity;
 import org.apache.shindig.social.opensocial.model.Address;
 import org.apache.shindig.social.opensocial.model.BodyType;
+import org.apache.shindig.social.opensocial.model.Enum;
 import org.apache.shindig.social.opensocial.model.ListField;
 import org.apache.shindig.social.opensocial.model.MediaItem;
 import org.apache.shindig.social.opensocial.model.Message;
@@ -34,6 +41,7 @@
 import org.apache.shindig.social.opensocial.model.Organization;
 import org.apache.shindig.social.opensocial.model.Person;
 import org.apache.shindig.social.opensocial.model.Url;
+import org.apache.shindig.social.opensocial.model.Enum.Drinker;
 import org.apache.shindig.social.opensocial.spi.DataCollection;
 import org.apache.shindig.social.opensocial.spi.RestfulCollection;
 
@@ -236,6 +244,8 @@
         Organization.class, "organizations"));
     defaultItemFieldMappings.add(new ItemFieldMapping(Person.class, "urls",
         Url.class, "urls"));
+    defaultItemFieldMappings.add(new ItemFieldMapping(Person.class, "lookingFor",
+        EnumImpl.class, "lookingFor"));
     
     
     defaultItemFieldMappings.add(new ItemFieldMapping(Activity.class, "mediaItems",
@@ -308,7 +318,8 @@
    */
   public InterfaceClassMapper getMapper(ConverterSet c, Mapper dmapper,
       WriterStack writerStack) {
-    return new InterfaceClassMapper(writerStack, dmapper,
+    FieldAliasingMapper emapper = new FieldAliasingMapper(dmapper);
+    return new InterfaceClassMapper(writerStack, emapper,
         getElementMappingList(c), getListElementMappingList(c),
         getItemFieldMappings(c), getOmitMap(c), getElementClassMap(c));
   }
@@ -327,7 +338,11 @@
     for (Converter converter : getConverters(mapper, c)) {
       xstream.registerConverter(converter);
     }
-
+    xstream.registerConverter(new ISO8601DateConverter());
+    xstream.registerConverter(new ISO8601GregorianCalendarConverter());
+    xstream.registerConverter(new ISO8601SqlTimestampConverter());
+    // these really need to be on interface.
+    xstream.aliasField("key", EnumImpl.class, "value");
     xstream.setMode(XStream.NO_REFERENCES);
     return xstream;
   }

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Person.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Person.java?rev=711494&r1=711493&r2=711494&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Person.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Person.java Tue Nov  4 18:26:54 2008
@@ -326,6 +326,22 @@
   void setAge(Integer age);
 
   /**
+   * Get the person's date of birth, specified as a {@link Date} object. Container support for this
+   * field is OPTIONAL.
+   *
+   * @return the person's data of birth
+   */
+  Date getBirthday();
+
+  /**
+   * Set the person's date of birth, specified as a {@link Date} object. Container support for this
+   * field is OPTIONAL.
+   *
+   * @param birthday the person's data of birth
+   */
+  void setBirthday(Date birthday);
+  
+  /**
    * Get the person's body characteristics, specified as an BodyType. Container support for this
    * field is OPTIONAL.
    *
@@ -405,21 +421,6 @@
    */
   void setCurrentLocation(Address currentLocation);
 
-  /**
-   * Get the person's date of birth, specified as a {@link Date} object. Container support for this
-   * field is OPTIONAL.
-   *
-   * @return the person's data of birth
-   */
-  Date getBirthday();
-
-  /**
-   * Set the person's date of birth, specified as a {@link Date} object. Container support for this
-   * field is OPTIONAL.
-   *
-   * @param birthday the person's data of birth
-   */
-  void setBirthday(Date birthday);
 
   /**
    * Get the person's drinking status, specified as an {@link Enum} with the enum's key referencing

Modified: incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd?rev=711494&r1=711493&r2=711494&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd (original)
+++ incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd Tue Nov  4 18:26:54 2008
@@ -76,9 +76,10 @@
   <xs:complexType name="Person">
     <xs:sequence>
       <xs:element minOccurs="0" name="aboutMe" type="xs:string" />
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="addresses" type="tns:Address" />
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="activities" type="xs:string" />
       <xs:element minOccurs="0" name="accounts" type="tns:Account"/>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="activities" type="xs:string" />
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="addresses" type="tns:Address" />
+      <xs:element minOccurs="0" name="age" type="xs:string"/>
       <xs:element minOccurs="0" name="anniversary" type="xs:dateTime" />
       <xs:element minOccurs="0" name="birthday" type="xs:dateTime" />
       <xs:element minOccurs="0" name="bodyType" type="tns:BodyType" />
@@ -104,15 +105,16 @@
       <xs:element minOccurs="0" name="jobInterests" type="xs:string" />
       <xs:element minOccurs="0" maxOccurs="unbounded" name="languagesSpoken" type="xs:string" />
       <xs:element minOccurs="0" name="livingArrangement" type="xs:string" />
-      <xs:element minOccurs="0" name="lookingFor" type="xs:string" />
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="lookingFor" type="tns:LookingFor" />
       <xs:element minOccurs="0" maxOccurs="unbounded" name="movies" type="xs:string" />
       <xs:element minOccurs="0" maxOccurs="unbounded" name="music" type="xs:string" />
       <xs:element minOccurs="0" name="name" type="tns:Name" />
+      <xs:element minOccurs="0" name="networkPresence" type="tns:NetworkPresence" />
       <xs:element minOccurs="0" name="nickname" type="xs:string" />
       <xs:element minOccurs="0" maxOccurs="unbounded" name="organizations" type="tns:Organization" />
       <xs:element minOccurs="0" name="pets" type="xs:string" />
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="photos" type="tns:PluralPersonField" />
       <xs:element minOccurs="0" maxOccurs="unbounded" name="phoneNumbers" type="tns:PluralPersonField" />
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="photos" type="tns:PluralPersonField" />
       <xs:element minOccurs="0" name="politicalViews" type="xs:string" />
       <xs:element minOccurs="0" name="preferredUsername" type="xs:string" />
       <xs:element minOccurs="0" name="profileSong" type="tns:Url" />
@@ -194,16 +196,22 @@
     </xs:all>
   </xs:complexType> 
   
+  
   <xs:complexType name="Organization">
     <xs:all>
+      <xs:element minOccurs="0" name="address" type="tns:Address" />
       <xs:element minOccurs="0" name="department" type="xs:string" />
       <xs:element minOccurs="0" name="description" type="xs:string" />
       <xs:element minOccurs="0" name="endDate" type="xs:dateTime" />
-      <xs:element minOccurs="0" name="location" type="tns:Address" />
       <xs:element minOccurs="0" name="name" type="xs:string" />
       <xs:element minOccurs="0" name="startDate" type="xs:dateTime" />
       <xs:element minOccurs="0" name="type" type="xs:string" />
       <xs:element minOccurs="0" name="title" type="xs:string" />
+      <xs:element minOccurs="0" name="field" type="xs:string" />
+      <xs:element minOccurs="0" name="subField" type="xs:string" />
+      <xs:element minOccurs="0" name="webpage" type="xs:string" />
+      <xs:element minOccurs="0" name="salary" type="xs:string" />
+   
     </xs:all>
   </xs:complexType>
   <xs:complexType name="Name">
@@ -212,6 +220,7 @@
       <xs:element minOccurs="0" name="familyName" type="xs:string" />
       <xs:element minOccurs="0" name="givenName" type="xs:string" />
       <xs:element minOccurs="0" name="honorificPrefix" type="xs:string" />
+      <xs:element minOccurs="0" name="honorificSuffix" type="xs:string" />
       <xs:element minOccurs="0" name="formatted" type="xs:string" />
     </xs:all>
   </xs:complexType>
@@ -242,7 +251,7 @@
   
   <xs:complexType name="Drinker">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:DrinkerType" />
     </xs:all>
   </xs:complexType>
@@ -262,7 +271,7 @@
   
   <xs:complexType name="Presence">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:PresenceType" />
     </xs:all>
   </xs:complexType>
@@ -280,7 +289,7 @@
   
   <xs:complexType name="Smoker">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:SmokerType" />
     </xs:all>
   </xs:complexType>
@@ -299,7 +308,7 @@
   
   <xs:complexType name="CreateActivityPriority">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:CreateActivityPriorityType" />
     </xs:all>
   </xs:complexType>
@@ -312,7 +321,7 @@
   
   <xs:complexType name="EscapeType">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:EscapeTypeType" />
     </xs:all>
   </xs:complexType>
@@ -335,7 +344,7 @@
   </xs:complexType>
   <xs:complexType name="MessageType">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:MessageTypeType" />
     </xs:all>
   </xs:complexType>
@@ -352,7 +361,7 @@
   
   <xs:complexType name="Environment">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:EnvironmentType" />
     </xs:all>
   </xs:complexType>
@@ -380,7 +389,7 @@
   
   <xs:complexType name="LookingFor">
     <xs:all>
-      <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
       <xs:element minOccurs="0" name="key" type="tns:LookingForType" />
     </xs:all>
   </xs:complexType>
@@ -394,6 +403,22 @@
       <xs:enumeration value="RELATIONSHIP" />
     </xs:restriction>
   </xs:simpleType>
+  <xs:complexType name="NetworkPresence">
+    <xs:all>
+      <xs:element minOccurs="0" name="displayValue" type="xs:string" />
+      <xs:element minOccurs="0" name="key" type="tns:NetworkPresenceType" />
+    </xs:all>
+  </xs:complexType>
+  <xs:simpleType name="NetworkPresenceType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="AWAY" />
+      <xs:enumeration value="CHAT" />
+      <xs:enumeration value="DND" />
+      <xs:enumeration value="OFFLINE" />
+      <xs:enumeration value="ONLINE" />
+      <xs:enumeration value="XA" />
+    </xs:restriction>
+  </xs:simpleType>
   
   <xs:complexType name="PluralPersonField">
     <xs:all>

Modified: incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml?rev=711494&r1=711493&r2=711494&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml (original)
+++ incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml Tue Nov  4 18:26:54 2008
@@ -3,13 +3,13 @@
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://ns.opensocial.org/2008/opensocial classpath:opensocial.xsd">
   <aboutMe></aboutMe>
-  <activities>Activity1</activities>
   <accounts>
     <domain>Domain</domain>
     <primary>true</primary>
     <userid>useid</userid>
     <username>username</username>
   </accounts>
+  <activities>Activity1</activities>
   <anniversary>2001-10-26T21:32:52</anniversary>
   <birthday>2001-10-26T21:32:52</birthday>
   <bodyType></bodyType>
@@ -42,8 +42,8 @@
   <nickname></nickname>
   <organizations></organizations>
   <pets></pets>
-  <photos></photos>
   <phoneNumbers></phoneNumbers>
+  <photos></photos>
   <politicalViews></politicalViews>
   <preferredUsername></preferredUsername>
   <profileSong></profileSong>