Modified: 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/PreferencesTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/PreferencesTest.java?rev=1755764&r1=1755763&r2=1755764&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/PreferencesTest.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/PreferencesTest.java
 Wed Aug 10 15:00:40 2016
@@ -23,7 +23,6 @@ package org.apache.qpid.server.model.tes
 import static 
org.apache.qpid.server.model.preferences.PreferenceTestHelper.awaitPreferenceFuture;
 import static org.mockito.Mockito.mock;
 
-import java.security.Principal;
 import java.security.PrivilegedAction;
 import java.util.Arrays;
 import java.util.Collection;
@@ -43,7 +42,6 @@ import org.apache.qpid.server.configurat
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Model;
-import org.apache.qpid.server.model.preferences.GenericPrincipal;
 import org.apache.qpid.server.model.preferences.Preference;
 import org.apache.qpid.server.model.preferences.PreferenceFactory;
 import org.apache.qpid.server.model.preferences.PreferenceTestHelper;
@@ -90,7 +88,7 @@ public class PreferencesTest extends Qpi
 
     public void testSimpleRoundTrip()
     {
-        final Preference p = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-TestPropType",
@@ -99,22 +97,15 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        Subject.doAs(_testSubject, new PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                Set<Preference> preferences = Collections.singleton(p);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-                assertEquals("roundtrip failed", preferences, 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences()));
-                return null;
-            }
-        });
+
+        updateOrAppendAs(_testSubject, p);
+        assertPreferences(_testSubject, p);
     }
 
-    public void testProhibitNewPreferenceWithContradictingOwner()
+    public void testOverrideContradictingOwner()
     {
-        final Preference p = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
+        final Preference p = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -124,30 +115,16 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(TestPrincipalUtils.createTestSubject(TEST_USERNAME2), new 
PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                Set<Preference> preferences = Collections.singleton(p);
-                try
-                {
-                    
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-                    fail("Saving of preferences owned by somebody else should 
not be allowed");
-                }
-                catch (IllegalArgumentException e)
-                {
-                    // PASS
-                }
-                return null;
-            }
-        });
+        updateOrAppendAs(testSubject2, p);
+        assertPreferences(testSubject2, p);
+
+        assertPreferences(_testSubject);
     }
 
     public void testGetOnlyOwnedPreferences()
     {
         final Preference testUserPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         "X-testType",
@@ -160,7 +137,7 @@ public class PreferencesTest extends Qpi
         updateOrAppendAs(_testSubject, testUserPreference);
 
         final Preference testUser2Preference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         "X-testType",
@@ -170,25 +147,16 @@ public class PreferencesTest extends Qpi
                         null,
                         Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(TestPrincipalUtils.createTestSubject(TEST_USERNAME2), new 
PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                Set<Preference> preferences = 
Collections.singleton(testUser2Preference);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(testUser2Preference)));
-                Set<Preference> p2s = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected preferences for subject 2", 
preferences, p2s);
-                return null;
-            }
-        });
+        Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
+        updateOrAppendAs(testSubject2, testUser2Preference);
 
-        assertSinglePreference(_testSubject, testUserPreference);
+        assertPreferences(testSubject2, testUser2Preference);
+        assertPreferences(_testSubject, testUserPreference);
     }
 
     public void testUpdate()
     {
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -198,7 +166,7 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 p1.getId(),
                 "X-testType",
@@ -208,29 +176,15 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(_testSubject, new PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p1)));
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p2)));
+        updateOrAppendAs(_testSubject, p1);
+        updateOrAppendAs(_testSubject, p2);
 
-                Set<Preference> preferences = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 1, 
preferences.size());
-                Preference newPreference = preferences.iterator().next();
-                assertEquals("Unexpected preference id", p2.getId(), 
newPreference.getId());
-                assertEquals("Unexpected preference type", p2.getType(), 
newPreference.getType());
-                assertEquals("Unexpected preference name", p2.getName(), 
newPreference.getName());
-                assertEquals("Unexpected preference description", 
p2.getDescription(), newPreference.getDescription());
-                return null;
-            }
-        });
+        assertPreferences(_testSubject, p2);
     }
 
     public void testProhibitTypeChange()
     {
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -239,7 +193,10 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+
+        updateOrAppendAs(_testSubject, p1);
+
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 p1.getId(),
                 "X-differentTestType",
@@ -248,29 +205,21 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        Subject.doAs(_testSubject, new PrivilegedAction<Void>()
+
+        try
         {
-            @Override
-            public Void run()
-            {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p1)));
-                try
-                {
-                    
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p2)));
-                    fail("Type change should not be allowed");
-                }
-                catch (IllegalArgumentException e)
-                {
-                    // pass
-                }
-                return null;
-            }
-        });
+            updateOrAppendAs(_testSubject, p2);
+            fail("Type change should not be allowed");
+        }
+        catch (IllegalArgumentException e)
+        {
+            // pass
+        }
     }
 
     public void testProhibitDuplicateNamesOfSameType()
     {
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -279,7 +228,10 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+
+        updateOrAppendAs(_testSubject, p1);
+
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -289,30 +241,20 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(_testSubject, new PrivilegedAction<Void>()
+        try
         {
-            @Override
-            public Void run()
-            {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p1)));
-
-                try
-                {
-                    
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p2)));
-                    fail("Property with same name and same type should not be 
allowed");
-                }
-                catch (IllegalArgumentException e)
-                {
-                    // pass
-                }
-                return null;
-            }
-        });
+            updateOrAppendAs(_testSubject, p2);
+            fail("Property with same name and same type should not be 
allowed");
+        }
+        catch (IllegalArgumentException e)
+        {
+            // pass
+        }
     }
 
     public void testProhibitDuplicateNamesOfSameTypeInSameUpdate()
     {
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -321,7 +263,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -330,26 +272,16 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        Subject.doAs(_testSubject, new PrivilegedAction<Void>()
+
+        try
         {
-            @Override
-            public Void run()
-            {
-                Set<Preference> preferences = new HashSet<>();
-                preferences.add(p1);
-                preferences.add(p2);
-                try
-                {
-                    
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-                    fail("Property with same name and same type should not be 
allowed");
-                }
-                catch (IllegalArgumentException e)
-                {
-                    // pass
-                }
-                return null;
-            }
-        });
+            updateOrAppendAs(_testSubject, p1, p2);
+            fail("Property with same name and same type should not be 
allowed");
+        }
+        catch (IllegalArgumentException e)
+        {
+            // pass
+        }
     }
 
     public void testProhibitPreferenceStealing() throws Exception
@@ -366,7 +298,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 
Collections.singleton(TestPrincipalUtils.getTestPrincipalSerialization(testGroupName)),
                 Collections.<String,Object>emptyMap());
-        final Preference originalPreference = 
PreferenceFactory.recover(_testObject, preferenceAttributes);
+        final Preference originalPreference = 
PreferenceFactory.fromAttributes(_testObject, preferenceAttributes);
         updateOrAppendAs(user1Subject, originalPreference);
 
 
@@ -386,7 +318,7 @@ public class PreferencesTest extends Qpi
 
                 try
                 {
-                    
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Arrays.asList(PreferenceFactory.recover(_testObject,
 replacementAttributes))));
+                    
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Arrays.asList(PreferenceFactory.fromAttributes(_testObject,
 replacementAttributes))));
                     fail("The stealing of a preference must be prohibited");
                 }
                 catch (IllegalArgumentException e)
@@ -398,7 +330,7 @@ public class PreferencesTest extends Qpi
             }
         });
 
-        assertSinglePreference(user1Subject, originalPreference);
+        assertPreferences(user1Subject, originalPreference);
     }
 
     public void testProhibitDuplicateId() throws Exception
@@ -406,7 +338,7 @@ public class PreferencesTest extends Qpi
         final String prefType = "X-testType";
         final String prefName = "prop1";
         final Preference testUserPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         prefType,
@@ -420,7 +352,7 @@ public class PreferencesTest extends Qpi
 
         Subject user2Subject = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
         final Preference testUserPreference2 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         testUserPreference.getId(),
                         prefType,
@@ -501,7 +433,7 @@ public class PreferencesTest extends Qpi
         Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
 
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         preferenceType,
@@ -512,7 +444,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         updateOrAppendAs(testSubject2, unaffectedPreference);
 
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 preferenceType,
@@ -521,7 +453,10 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+
+        updateOrAppendAs(_testSubject, p1);
+
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 preferenceType,
@@ -536,24 +471,18 @@ public class PreferencesTest extends Qpi
             @Override
             public Void run()
             {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p1)));
                 
awaitPreferenceFuture(_testObject.getUserPreferences().replace(Collections.singleton(p2)));
-
-                Collection<Preference> retrievedPreferences =
-                        
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 1, 
retrievedPreferences.size());
-                assertEquals("Unexpected preference", p2, 
retrievedPreferences.iterator().next());
-
                 return null;
             }
         });
 
-        assertSinglePreference(testSubject2, unaffectedPreference);
+        assertPreferences(_testSubject, p2);
+        assertPreferences(testSubject2, unaffectedPreference);
     }
 
     public void testDeleteAll() throws Exception
     {
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-type-1",
@@ -562,7 +491,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-type-2",
@@ -590,7 +519,7 @@ public class PreferencesTest extends Qpi
     {
         final String deleteType = "X-type-1";
         final Preference deletePreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -601,7 +530,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         String unaffectedType = "X-type-2";
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         unaffectedType,
@@ -618,14 +547,10 @@ public class PreferencesTest extends Qpi
             public Void run()
             {
                 
awaitPreferenceFuture(_testObject.getUserPreferences().delete(deleteType, null, 
null));
-                Set<Preference> result = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 1, 
result.size());
-                assertEquals("Unexpected preference Id",
-                             unaffectedPreference.getId(),
-                             result.iterator().next().getId());
                 return null;
             }
         });
+        assertPreferences(_testSubject, unaffectedPreference);
     }
 
     public void testDeleteByTypeAndName() throws Exception
@@ -633,7 +558,7 @@ public class PreferencesTest extends Qpi
         final String deleteType = "X-type-1";
         final String deletePropertyName = "propName";
         final Preference deletePreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -643,7 +568,7 @@ public class PreferencesTest extends Qpi
                         null,
                         Collections.<String, Object>emptyMap()));
         final Preference unaffectedPreference1 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -654,7 +579,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         String unaffectedType = "X-type-2";
         final Preference unaffectedPreference2 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         unaffectedType,
@@ -671,25 +596,17 @@ public class PreferencesTest extends Qpi
             public Void run()
             {
                 
awaitPreferenceFuture(_testObject.getUserPreferences().delete(deleteType, 
deletePropertyName, null));
-                Set<Preference> result = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 2, 
result.size());
-                Set<UUID> ids = new HashSet<>(result.size());
-                for (Preference p : result)
-                {
-                    ids.add(p.getId());
-                }
-                assertTrue(String.format("unaffectedPreference1 unexpectedly 
deleted"), ids.contains(unaffectedPreference1.getId()));
-                assertTrue(String.format("unaffectedPreference2 unexpectedly 
deleted"), ids.contains(unaffectedPreference2.getId()));
                 return null;
             }
         });
+        assertPreferences(_testSubject, unaffectedPreference1, 
unaffectedPreference2);
     }
 
     public void testDeleteById() throws Exception
     {
         final String deleteType = "X-type-1";
         final Preference deletePreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -699,7 +616,7 @@ public class PreferencesTest extends Qpi
                         null,
                         Collections.<String, Object>emptyMap()));
         final Preference unaffectedPreference1 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -710,7 +627,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         String unaffectedType = "X-type-2";
         final Preference unaffectedPreference2 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         unaffectedType,
@@ -727,25 +644,17 @@ public class PreferencesTest extends Qpi
             public Void run()
             {
                 
awaitPreferenceFuture(_testObject.getUserPreferences().delete(null, null, 
deletePreference.getId()));
-                Set<Preference> result = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 2, 
result.size());
-                Set<UUID> ids = new HashSet<>(result.size());
-                for (Preference p : result)
-                {
-                    ids.add(p.getId());
-                }
-                assertTrue(String.format("unaffectedPreference1 unexpectedly 
deleted"), ids.contains(unaffectedPreference1.getId()));
-                assertTrue(String.format("unaffectedPreference2 unexpectedly 
deleted"), ids.contains(unaffectedPreference2.getId()));
                 return null;
             }
         });
+        assertPreferences(_testSubject, unaffectedPreference1, 
unaffectedPreference2);
     }
 
     public void testDeleteByTypeAndId() throws Exception
     {
         final String deleteType = "X-type-1";
         final Preference deletePreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -755,7 +664,7 @@ public class PreferencesTest extends Qpi
                         null,
                         Collections.<String, Object>emptyMap()));
         final Preference unaffectedPreference1 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -766,7 +675,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         String unaffectedType = "X-type-2";
         final Preference unaffectedPreference2 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         unaffectedType,
@@ -783,18 +692,10 @@ public class PreferencesTest extends Qpi
             public Void run()
             {
                 
awaitPreferenceFuture(_testObject.getUserPreferences().delete(deleteType, null, 
deletePreference.getId()));
-                Set<Preference> result = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 2, 
result.size());
-                Set<UUID> ids = new HashSet<>(result.size());
-                for (Preference p : result)
-                {
-                    ids.add(p.getId());
-                }
-                assertTrue(String.format("unaffectedPreference1 unexpectedly 
deleted"), ids.contains(unaffectedPreference1.getId()));
-                assertTrue(String.format("unaffectedPreference2 unexpectedly 
deleted"), ids.contains(unaffectedPreference2.getId()));
                 return null;
             }
         });
+        assertPreferences(_testSubject, unaffectedPreference1, 
unaffectedPreference2);
     }
 
     public void testDeleteByTypeAndNameAndId() throws Exception
@@ -802,7 +703,7 @@ public class PreferencesTest extends Qpi
         final String deleteType = "X-type-1";
         final String deletePropertyName = "propName";
         final Preference deletePreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -812,7 +713,7 @@ public class PreferencesTest extends Qpi
                         null,
                         Collections.<String, Object>emptyMap()));
         final Preference unaffectedPreference1 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         deleteType,
@@ -823,7 +724,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         String unaffectedType = "X-type-2";
         final Preference unaffectedPreference2 =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         unaffectedType,
@@ -840,18 +741,10 @@ public class PreferencesTest extends Qpi
             public Void run()
             {
                 
awaitPreferenceFuture(_testObject.getUserPreferences().delete(deleteType, 
deletePropertyName, deletePreference.getId()));
-                Set<Preference> result = 
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 2, 
result.size());
-                Set<UUID> ids = new HashSet<>(result.size());
-                for (Preference p : result)
-                {
-                    ids.add(p.getId());
-                }
-                assertTrue(String.format("unaffectedPreference1 unexpectedly 
deleted"), ids.contains(unaffectedPreference1.getId()));
-                assertTrue(String.format("unaffectedPreference2 unexpectedly 
deleted"), ids.contains(unaffectedPreference2.getId()));
                 return null;
             }
         });
+        assertPreferences(_testSubject, unaffectedPreference1, 
unaffectedPreference2);
     }
 
     public void testDeleteByNameWithoutType() throws Exception
@@ -880,7 +773,7 @@ public class PreferencesTest extends Qpi
         final String preferenceType = "X-testType";
         Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         preferenceType,
@@ -891,7 +784,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         updateOrAppendAs(testSubject2, unaffectedPreference);
 
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 preferenceType,
@@ -900,24 +793,20 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
+        updateOrAppendAs(_testSubject, p1);
 
         Subject.doAs(_testSubject, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p1)));
                 
awaitPreferenceFuture(_testObject.getUserPreferences().replace(Collections.<Preference>emptySet()));
-
-                Collection<Preference> retrievedPreferences =
-                        
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 0, 
retrievedPreferences.size());
-
                 return null;
             }
         });
 
-        assertSinglePreference(testSubject2, unaffectedPreference);
+        assertPreferences(_testSubject);
+        assertPreferences(testSubject2, unaffectedPreference);
     }
 
     public void testDeleteViaReplaceByType()
@@ -927,7 +816,7 @@ public class PreferencesTest extends Qpi
         Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
 
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         preferenceType,
@@ -938,7 +827,7 @@ public class PreferencesTest extends Qpi
                         Collections.<String, Object>emptyMap()));
         updateOrAppendAs(testSubject2, unaffectedPreference);
 
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 preferenceType,
@@ -947,7 +836,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 unaffectedPreferenceType,
@@ -957,27 +846,19 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
+        updateOrAppendAs(_testSubject, p1, p2);
         Subject.doAs(_testSubject, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-                Set<Preference> preferences = new HashSet<>();
-                preferences.add(p1);
-                preferences.add(p2);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-
                 
awaitPreferenceFuture(_testObject.getUserPreferences().replaceByType(preferenceType,
 Collections.<Preference>emptySet()));
-
-                Collection<Preference> retrievedPreferences =
-                        
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 1, 
retrievedPreferences.size());
-                assertTrue("Unexpected preference", 
retrievedPreferences.contains(p2));
                 return null;
             }
         });
 
-        assertSinglePreference(testSubject2, unaffectedPreference);
+        assertPreferences(_testSubject, p2);
+        assertPreferences(testSubject2, unaffectedPreference);
     }
 
     public void testDeleteViaReplaceByTypeAndName()
@@ -986,7 +867,7 @@ public class PreferencesTest extends Qpi
         Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
 
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         preferenceType,
@@ -998,7 +879,7 @@ public class PreferencesTest extends Qpi
 
         updateOrAppendAs(testSubject2, unaffectedPreference);
 
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 preferenceType,
@@ -1008,7 +889,7 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 preferenceType,
@@ -1017,29 +898,20 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
+        updateOrAppendAs(_testSubject, p1, p2);
 
         Subject.doAs(_testSubject, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-                Set<Preference> preferences = new HashSet<>();
-                preferences.add(p1);
-                preferences.add(p2);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-
                 
awaitPreferenceFuture(_testObject.getUserPreferences().replaceByTypeAndName(preferenceType,
 "propName", null));
-
-                Collection<Preference> retrievedPreferences =
-                        
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 1, 
retrievedPreferences.size());
-                assertTrue("Unexpected preference", 
retrievedPreferences.contains(p2));
-
                 return null;
             }
         });
 
-        assertSinglePreference(testSubject2, unaffectedPreference);
+        assertPreferences(_testSubject, p2);
+        assertPreferences(testSubject2, unaffectedPreference);
     }
 
     public void testReplaceByType()
@@ -1048,7 +920,7 @@ public class PreferencesTest extends Qpi
         final String unaffectedType = "X-unaffectedType";
         Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         replaceType,
@@ -1060,7 +932,7 @@ public class PreferencesTest extends Qpi
 
         updateOrAppendAs(testSubject2, unaffectedPreference);
 
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 replaceType,
@@ -1069,7 +941,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 unaffectedType,
@@ -1078,7 +950,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p3 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p3 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 replaceType,
@@ -1087,29 +959,20 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
+        updateOrAppendAs(_testSubject, p1, p2);
+
         Subject.doAs(_testSubject, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-                Set<Preference> preferences = new HashSet<>();
-                preferences.add(p1);
-                preferences.add(p2);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-
-                preferences = Collections.singleton(p3);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().replaceByType(replaceType,
 preferences));
-
-                Set<Preference> retrievedPreferences =
-                        
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 2, 
retrievedPreferences.size());
-                assertTrue("Preference of different type was replaced", 
retrievedPreferences.contains(p2));
-                assertTrue("Preference was not replaced", 
retrievedPreferences.contains(p3));
+                
awaitPreferenceFuture(_testObject.getUserPreferences().replaceByType(replaceType,
 Collections.singleton(p3)));
                 return null;
             }
         });
 
-        assertSinglePreference(testSubject2, unaffectedPreference);
+        assertPreferences(_testSubject, p2, p3);
+        assertPreferences(testSubject2, unaffectedPreference);
     }
 
     public void testReplaceByTypeAndName()
@@ -1118,7 +981,7 @@ public class PreferencesTest extends Qpi
         final String unaffectedType = "X-unaffectedType";
         Subject testSubject2 = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
         final Preference unaffectedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         replaceType,
@@ -1130,7 +993,7 @@ public class PreferencesTest extends Qpi
 
         updateOrAppendAs(testSubject2, unaffectedPreference);
 
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 replaceType,
@@ -1139,7 +1002,7 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
-        final Preference p1b = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1b = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 replaceType,
@@ -1149,7 +1012,7 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        final Preference p2 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p2 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 unaffectedType,
@@ -1159,7 +1022,7 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        final Preference p3 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p3 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 replaceType,
@@ -1168,80 +1031,52 @@ public class PreferencesTest extends Qpi
                 TEST_PRINCIPAL_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
+        updateOrAppendAs(_testSubject, p1, p1b, p2);
 
         Subject.doAs(_testSubject, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-                Set<Preference> preferences = new HashSet<>();
-                preferences.add(p1);
-                preferences.add(p1b);
-                preferences.add(p2);
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(preferences));
-
                 
awaitPreferenceFuture(_testObject.getUserPreferences().replaceByTypeAndName(replaceType,
 "propName", p3));
-
-                Set<Preference> retrievedPreferences =
-                        
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 3, 
retrievedPreferences.size());
-                assertTrue("Preference of different name was replaced", 
retrievedPreferences.contains(p1b));
-                assertTrue("Preference of different type was replaced", 
retrievedPreferences.contains(p2));
-                assertTrue("Preference was not replaced", 
retrievedPreferences.contains(p3));
                 return null;
             }
         });
 
-        assertSinglePreference(testSubject2, unaffectedPreference);
+        assertPreferences(_testSubject, p1b, p2, p3);
+        assertPreferences(testSubject2, unaffectedPreference);
     }
 
     public void testGetVisiblePreferences()
     {
-        final Principal testPrincipal = 
_testSubject.getPrincipals().iterator().next();
+        final String testGroupName = "testGroup";
 
-        Subject peerSubject = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
-        final Preference sharedPreference = 
PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        Subject sharer = TestPrincipalUtils.createTestSubject(TEST_USERNAME2, 
testGroupName);
+        Subject nonSharer = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME, testGroupName);
+
+        final Preference sharedPreference = 
PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
                 "propName1",
-                "shared with colleague testUser",
+                "shared with group",
                 TEST_PRINCIPAL2_SERIALIZATION,
-                Collections.singleton(TEST_PRINCIPAL_SERIALIZATION),
+                
Collections.singleton(TestPrincipalUtils.getTestPrincipalSerialization(testGroupName)),
                 Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(peerSubject, new PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(sharedPreference)));
-                return null;
-            }
-        });
-
-        Subject anotherSubject = 
TestPrincipalUtils.createTestSubject("anotherUser");
-        final Preference notSharedPreference = 
PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference notSharedPreference = 
PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
                 "propName2",
                 null,
-                
TestPrincipalUtils.getTestPrincipalSerialization("anotherUser"),
+                TEST_PRINCIPAL2_SERIALIZATION,
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(anotherSubject, new PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(notSharedPreference)));
-                return null;
-            }
-        });
+        updateOrAppendAs(sharer, sharedPreference, notSharedPreference);
 
-        final Preference p = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference nonSharersPrivatePref = 
PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -1251,22 +1086,25 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
 
-        Subject.doAs(_testSubject, new PrivilegedAction<Void>()
+        updateOrAppendAs(nonSharer, nonSharersPrivatePref);
+
+        Subject.doAs(nonSharer, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(p)));
-
                 Set<Preference> retrievedPreferences =
                         
awaitPreferenceFuture(_testObject.getUserPreferences().getVisiblePreferences());
                 assertEquals("Unexpected number of preferences", 2, 
retrievedPreferences.size());
-                assertTrue("Preference of my peer did not exist in visible 
set",
-                           retrievedPreferences.contains(sharedPreference));
-                assertTrue("My preference did not exist in visible set", 
retrievedPreferences.contains(p));
-                assertFalse("Preference of the other user unexpectedly exists 
in visible set",
-                            
retrievedPreferences.contains(notSharedPreference));
+
+                Set<UUID> visibleIds = new 
HashSet<>(retrievedPreferences.size());
+                for (Preference preference : retrievedPreferences)
+                {
+                    visibleIds.add(preference.getId());
+                }
+                assertTrue("Owned preference not visible", 
visibleIds.contains(nonSharersPrivatePref.getId()));
+                assertTrue("Shared preference not visible", 
visibleIds.contains(sharedPreference.getId()));
+
                 return null;
             }
         });
@@ -1278,7 +1116,7 @@ public class PreferencesTest extends Qpi
         Subject testSubjectWithGroup = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME, testGroupName);
 
         final Preference sharedPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         "X-testType",
@@ -1288,19 +1126,11 @@ public class PreferencesTest extends Qpi
                         
Collections.singleton(TestPrincipalUtils.getTestPrincipalSerialization(testGroupName)),
                         Collections.<String, Object>emptyMap()));
 
-        Subject peerSubject = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2);
-        Subject.doAs(peerSubject, new PrivilegedAction<Void>()
-        {
-            @Override
-            public Void run()
-            {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(sharedPreference)));
-                return null;
-            }
-        });
+        Subject peerSubject = 
TestPrincipalUtils.createTestSubject(TEST_USERNAME2, testGroupName);
+        updateOrAppendAs(peerSubject, sharedPreference);
 
         final Preference testUserPreference =
-                PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                         null,
                         null,
                         "X-testType",
@@ -1309,14 +1139,13 @@ public class PreferencesTest extends Qpi
                         TEST_PRINCIPAL_SERIALIZATION,
                         null,
                         Collections.<String, Object>emptyMap()));
+        updateOrAppendAs(testSubjectWithGroup, testUserPreference);
 
         Subject.doAs(testSubjectWithGroup, new PrivilegedAction<Void>()
         {
             @Override
             public Void run()
             {
-                
awaitPreferenceFuture(_testObject.getUserPreferences().updateOrAppend(Collections.singleton(testUserPreference)));
-
                 Set<Preference> retrievedPreferences =
                         
awaitPreferenceFuture(_testObject.getUserPreferences().getVisiblePreferences());
                 assertEquals("Unexpected number of preferences", 2, 
retrievedPreferences.size());
@@ -1331,9 +1160,9 @@ public class PreferencesTest extends Qpi
 
     public void testLastUpdatedDate() throws Exception
     {
-        Date before = new Date();
+        Date beforeUpdate = new Date();
         Thread.sleep(1);
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -1343,19 +1172,44 @@ public class PreferencesTest extends Qpi
                 null,
                 Collections.<String, Object>emptyMap()));
         Thread.sleep(1);
-        Date after = new Date();
+        Date afterUpdate = new Date();
         Date lastUpdatedDate = p1.getLastUpdatedDate();
-        assertTrue(String.format("Creation date is too early. Expected : after 
%s  Found : %s",
-                                 before,
+        assertTrue(String.format("LastUpdated date is too early. Expected : 
after %s  Found : %s",
+                                 beforeUpdate,
                                  lastUpdatedDate),
-                   before.before(lastUpdatedDate));
-        assertTrue(String.format("Creation date is too late. Expected : after 
%s  Found : %s", after, lastUpdatedDate),
-                   after.after(lastUpdatedDate));
+                   beforeUpdate.before(lastUpdatedDate));
+        assertTrue(String.format("LastUpdated date is too late. Expected : 
before %s  Found : %s", afterUpdate, lastUpdatedDate),
+                   afterUpdate.after(lastUpdatedDate));
+    }
+
+
+    public void testCreatedDate() throws Exception
+    {
+        Date beforeCreation = new Date();
+        Thread.sleep(1);
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+                null,
+                null,
+                "X-testType",
+                "propName1",
+                null,
+                TEST_PRINCIPAL_SERIALIZATION,
+                null,
+                Collections.<String, Object>emptyMap()));
+        Thread.sleep(1);
+        Date afterCreation = new Date();
+        Date createdDate = p1.getCreatedDate();
+        assertTrue(String.format("Creation date is too early. Expected : after 
%s  Found : %s",
+                                 beforeCreation,
+                                 createdDate),
+                   beforeCreation.before(createdDate));
+        assertTrue(String.format("Creation date is too late. Expected : before 
%s  Found : %s", afterCreation, createdDate),
+                   afterCreation.after(createdDate));
     }
 
     public void testLastUpdatedDateIsImmutable() throws Exception
     {
-        final Preference p1 = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
+        final Preference p1 = PreferenceFactory.fromAttributes(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
                 null,
                 null,
                 "X-testType",
@@ -1370,39 +1224,6 @@ public class PreferencesTest extends Qpi
         assertTrue("Creation date is not immutable.", 
lastUpdatedDate2.getTime() != 0);
     }
 
-    public void testGetAttributes() throws Exception
-    {
-        final Map<String, Object> prefValueMap = Collections.<String, 
Object>singletonMap("myprefkey", "myprefvalue");
-        final UUID uuid = UUID.randomUUID();
-        final String type = "X-PREF1";
-        final String name = "myprefname";
-        final String description = "myprefdescription";
-        final Set<String> visibilitySet = Collections.emptySet();
-        Preference p = PreferenceFactory.recover(_testObject, 
PreferenceTestHelper.createPreferenceAttributes(
-                null,
-                uuid,
-                type,
-                name,
-                description,
-                TEST_PRINCIPAL_SERIALIZATION,
-                visibilitySet,
-                prefValueMap));
-        assertNotNull("Creation failed", p);
-        Date lastUpdatedDate = p.getLastUpdatedDate();
-
-        Map<String, Object> expectedAttributes = new HashMap<>();
-        expectedAttributes.put("id", uuid);
-        expectedAttributes.put("type", type);
-        expectedAttributes.put("name", name);
-        expectedAttributes.put("description", description);
-        expectedAttributes.put("owner", new 
GenericPrincipal(TEST_PRINCIPAL_SERIALIZATION));
-        expectedAttributes.put("associatedObject", _testObject.getId());
-        expectedAttributes.put("visibilityList", visibilitySet);
-        expectedAttributes.put("lastUpdatedDate", lastUpdatedDate);
-        expectedAttributes.put("value", prefValueMap);
-        assertEquals("Unexpected preference attributes", expectedAttributes, 
p.getAttributes());
-    }
-
     private void updateOrAppendAs(final Subject testSubject, final 
Preference... testUserPreference)
     {
         Subject.doAs(testSubject, new PrivilegedAction<Void>()
@@ -1416,7 +1237,7 @@ public class PreferencesTest extends Qpi
         });
     }
 
-    private void assertSinglePreference(final Subject subject, final 
Preference preference)
+    private void assertPreferences(final Subject subject, final Preference... 
expectedPreferences)
     {
         Subject.doAs(subject, new PrivilegedAction<Void>()
         {
@@ -1425,8 +1246,20 @@ public class PreferencesTest extends Qpi
             {
                 Collection<Preference> retrievedPreferences =
                         
awaitPreferenceFuture(_testObject.getUserPreferences().getPreferences());
-                assertEquals("Unexpected number of preferences", 1, 
retrievedPreferences.size());
-                assertEquals("Unexpected preference", preference, 
retrievedPreferences.iterator().next());
+                assertEquals("Unexpected number of preferences", 
expectedPreferences.length, retrievedPreferences.size());
+                Map<UUID, Preference> retrievedPreferencesMap = new 
HashMap<>(retrievedPreferences.size());
+                for (Preference retrievedPreference : retrievedPreferences)
+                {
+                    retrievedPreferencesMap.put(retrievedPreference.getId(), 
retrievedPreference);
+                }
+                for (Preference expectedPreference : expectedPreferences)
+                {
+                    Preference retrievedPreference = 
retrievedPreferencesMap.get(expectedPreference.getId());
+                    assertNotNull("Expected id '" + expectedPreference.getId() 
+ "' not found", retrievedPreference);
+                    assertEquals("Unexpected name", 
expectedPreference.getName(), retrievedPreference.getName());
+                    assertEquals("Unexpected type", 
expectedPreference.getType(), retrievedPreference.getType());
+                    assertEquals("Unexpected description", 
expectedPreference.getDescription(), retrievedPreference.getDescription());
+                }
                 return null;
             }
         });

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandler.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandler.java?rev=1755764&r1=1755763&r2=1755764&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandler.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandler.java
 Wed Aug 10 15:00:40 2016
@@ -112,11 +112,7 @@ public class RestUserPreferenceHandler
             ensureAttributeMatches(providedAttributes, "name", name);
             ensureAttributeMatches(providedAttributes, "type", type);
 
-            UUID providedUuid = getProvidedUuid(providedAttributes);
-
-            Preference preference = PreferenceFactory.create(target, 
providedAttributes);
-
-            ensureValidVisibilityList(preference.getVisibilityList());
+            Preference preference = PreferenceFactory.fromAttributes(target, 
providedAttributes);
 
             awaitFuture(userPreferences.replaceByTypeAndName(type, name , 
preference));
         }
@@ -332,9 +328,7 @@ public class RestUserPreferenceHandler
 
                 ensureAttributeMatches(preferenceAttributes, "type", type);
 
-                Preference preference = PreferenceFactory.create(target, 
preferenceAttributes);
-
-                ensureValidVisibilityList(preference.getVisibilityList());
+                Preference preference = 
PreferenceFactory.fromAttributes(target, preferenceAttributes);
 
                 replacementPreferences.add(preference);
             }
@@ -358,9 +352,7 @@ public class RestUserPreferenceHandler
 
             ensureAttributeMatches(preferenceAttributes, "type", type);
 
-            Preference preference = PreferenceFactory.create(target, 
preferenceAttributes);
-
-            ensureValidVisibilityList(preference.getVisibilityList());
+            Preference preference = PreferenceFactory.fromAttributes(target, 
preferenceAttributes);
 
             replacementPreferences.add(preference);
         }
@@ -377,44 +369,6 @@ public class RestUserPreferenceHandler
         return (ids == null ? null : UUID.fromString(ids.get(0)));
     }
 
-    private UUID getProvidedUuid(final Map<String, Object> providedObjectMap)
-    {
-        String providedId = getProvidedAttributeAsString(providedObjectMap, 
"id");
-        try
-        {
-            return providedId != null ? UUID.fromString(providedId) : null;
-        }
-        catch (IllegalArgumentException iae)
-        {
-            throw new IllegalArgumentException(String.format("Invalid UUID 
('%s') found in payload", providedId), iae);
-        }
-    }
-
-    private void ensureValidVisibilityList(final Collection<Principal> 
visibilityList)
-    {
-        Subject currentSubject = 
Subject.getSubject(AccessController.getContext());
-        if (currentSubject == null)
-        {
-            throw new SecurityException("Current thread does not have a user");
-        }
-
-        HashSet<String> principalNames = new 
HashSet<>(currentSubject.getPrincipals().size());
-        for (Principal principal : currentSubject.getPrincipals())
-        {
-            principalNames.add(principal.getName());
-        }
-
-        for (Principal visibilityPrincipal : visibilityList)
-        {
-            if (!principalNames.contains(visibilityPrincipal.getName()))
-            {
-                String errorMessage = String.format("Invalid visibilityList, 
this user does not hold principal '%s'",
-                                                    visibilityPrincipal);
-                throw new IllegalArgumentException(errorMessage);
-            }
-        }
-    }
-
     private void ensureAttributeMatches(final Map<String, Object> 
preferenceAttributes,
                                         final String attributeName,
                                         final String expectedValue)

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js?rev=1755764&r1=1755763&r2=1755764&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
 Wed Aug 10 15:00:40 2016
@@ -646,8 +646,8 @@ define(["dojo/_base/lang",
 
         Management.prototype.savePreference = function(parentObject, 
preference)
         {
-           var url =  this.buildPreferenceUrl(parentObject, preference.type, 
preference.name);
-           return this.put({url: url}, preference);
+           var url =  this.buildPreferenceUrl(parentObject, preference.type);
+           return this.post({url: url}, [preference]);
         };
 
         Management.prototype.savePreferences = function(parentObject, 
preferences)

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandlerTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandlerTest.java?rev=1755764&r1=1755763&r2=1755764&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandlerTest.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/RestUserPreferenceHandlerTest.java
 Wed Aug 10 15:00:40 2016
@@ -532,7 +532,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      
Collections.singleton(MYGROUP_SERIALIZATION),
                                      Collections.<String, Object>emptyMap());
-                             Preference preference = 
PreferenceFactory.create(_configuredObject, prefAttributes);
+                             Preference preference = 
PreferenceFactory.fromAttributes(_configuredObject, prefAttributes);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(Collections.singleton(preference)));
 
                              Map<String, List<Map<String, Object>>> 
typeToPreferenceListMap =
@@ -566,20 +566,20 @@ public class RestUserPreferenceHandlerTe
                                      type,
                                      "testpref",
                                      null,
-                                     MYUSER,
+                                     MYUSER_SERIALIZATION,
                                      null,
                                      Collections.<String, Object>emptyMap());
-                             Preference p1 = 
PreferenceFactory.create(_configuredObject, pref1Attributes);
+                             Preference p1 = 
PreferenceFactory.fromAttributes(_configuredObject, pref1Attributes);
                              Map<String, Object> pref2Attributes = 
createPreferenceAttributes(
                                      null,
                                      null,
                                      type,
                                      "testpref2",
                                      null,
-                                     MYUSER,
+                                     MYUSER_SERIALIZATION,
                                      null,
                                      Collections.<String, Object>emptyMap());
-                             Preference p2 = 
PreferenceFactory.create(_configuredObject, pref2Attributes);
+                             Preference p2 = 
PreferenceFactory.fromAttributes(_configuredObject, pref2Attributes);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(Arrays.asList(p1, p2)));
                              UUID id = p1.getId();
 
@@ -618,20 +618,20 @@ public class RestUserPreferenceHandlerTe
                                      type,
                                      "testpref",
                                      null,
-                                     MYUSER,
+                                     MYUSER_SERIALIZATION,
                                      null,
                                      Collections.<String, Object>emptyMap());
-                             Preference p1 = 
PreferenceFactory.create(_configuredObject, pref1Attributes);
+                             Preference p1 = 
PreferenceFactory.fromAttributes(_configuredObject, pref1Attributes);
                              Map<String, Object> pref2Attributes = 
createPreferenceAttributes(
                                      null,
                                      null,
                                      type,
                                      "testpref2",
                                      null,
-                                     MYUSER,
+                                     MYUSER_SERIALIZATION,
                                      null,
                                      Collections.<String, Object>emptyMap());
-                             Preference p2 = 
PreferenceFactory.create(_configuredObject, pref2Attributes);
+                             Preference p2 = 
PreferenceFactory.fromAttributes(_configuredObject, pref2Attributes);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(Arrays.asList(p1, p2)));
                              UUID id = p1.getId();
 
@@ -716,7 +716,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      
Collections.singleton(MYGROUP_SERIALIZATION),
                                      Collections.<String, Object>emptyMap());
-                             Preference p1 = 
PreferenceFactory.create(_configuredObject, pref1Attributes);
+                             Preference p1 = 
PreferenceFactory.fromAttributes(_configuredObject, pref1Attributes);
                              preferences.add(p1);
                              Map<String, Object> pref2Attributes = 
createPreferenceAttributes(
                                      null,
@@ -727,7 +727,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      Collections.<String>emptySet(),
                                      Collections.<String, Object>emptyMap());
-                             Preference p2 = 
PreferenceFactory.create(_configuredObject, pref2Attributes);
+                             Preference p2 = 
PreferenceFactory.fromAttributes(_configuredObject, pref2Attributes);
                              preferences.add(p2);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(preferences));
                              return null;
@@ -789,7 +789,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      
Collections.singleton(MYGROUP_SERIALIZATION),
                                      Collections.<String, Object>emptyMap());
-                             Preference p1 = 
PreferenceFactory.create(_configuredObject, pref1Attributes);
+                             Preference p1 = 
PreferenceFactory.fromAttributes(_configuredObject, pref1Attributes);
                              preferences.add(p1);
                              Map<String, Object> pref2Attributes = 
createPreferenceAttributes(
                                      null,
@@ -800,7 +800,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      Collections.<String>emptySet(),
                                      Collections.<String, Object>emptyMap());
-                             Preference p2 = 
PreferenceFactory.create(_configuredObject, pref2Attributes);
+                             Preference p2 = 
PreferenceFactory.fromAttributes(_configuredObject, pref2Attributes);
                              preferences.add(p2);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(preferences));
                              return null;
@@ -859,7 +859,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      
Collections.singleton(MYGROUP_SERIALIZATION),
                                      Collections.<String, Object>emptyMap());
-                             Preference p1 = 
PreferenceFactory.create(_configuredObject, pref1Attributes);
+                             Preference p1 = 
PreferenceFactory.fromAttributes(_configuredObject, pref1Attributes);
                              preferences.add(p1);
                              Map<String, Object> pref2Attributes = 
createPreferenceAttributes(
                                      null,
@@ -870,7 +870,7 @@ public class RestUserPreferenceHandlerTe
                                      MYUSER_SERIALIZATION,
                                      Collections.<String>emptySet(),
                                      Collections.<String, Object>emptyMap());
-                             Preference p2 = 
PreferenceFactory.create(_configuredObject, pref2Attributes);
+                             Preference p2 = 
PreferenceFactory.fromAttributes(_configuredObject, pref2Attributes);
                              preferences.add(p2);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(preferences));
                              return null;
@@ -914,10 +914,10 @@ public class RestUserPreferenceHandlerTe
                                      preferenceType,
                                      preferenceName,
                                      null,
-                                     MYUSER,
+                                     MYUSER_SERIALIZATION,
                                      null,
                                      Collections.<String, Object>emptyMap());
-                             Preference preference = 
PreferenceFactory.create(_configuredObject,
+                             Preference preference = 
PreferenceFactory.fromAttributes(_configuredObject,
                                                                               
preferenceAttributes);
                              
awaitPreferenceFuture(_userPreferences.updateOrAppend(Collections.singleton(preference)));
                              Set<Preference> retrievedPreferences = 
awaitPreferenceFuture(_userPreferences.getPreferences());



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to