You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/05/15 00:41:18 UTC

svn commit: r1338468 [2/2] - in /incubator/isis/trunk/framework/core: commons/src/main/java/org/apache/isis/core/commons/matchers/ metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ metamodel/src/main/java/org/apache/isis/core/metamodel/ad...

Added: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java?rev=1338468&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java (added)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java Mon May 14 22:41:16 2012
@@ -0,0 +1,218 @@
+package org.apache.isis.core.metamodel.adapter.oid;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
+/**
+* <dt>CUS:123</dt>
+* <dd>persistent root</dd>
+* <dt>!CUS:123</dt>
+* <dd>transient root</dd>
+* <dt>CUS:123#items</dt>
+* <dd>collection of persistent root</dd>
+* <dt>!CUS:123#items</dt>
+* <dd>collection of transient root</dd>
+* <dt>CUS:123#NME:2</dt>
+* <dd>aggregated object within persistent root</dd>
+* <dt>!CUS:123~NME:2</dt>
+* <dd>aggregated object within transient root</dd>
+* <dt>CUS:123~NME:2~CTY:LON</dt>
+* <dd>aggregated object within aggregated object within root</dd>
+* <dt>CUS:123~NME:2#items</dt>
+* <dd>collection of an aggregated object within root</dd>
+* <dt>CUS:123~NME:2~CTY:LON#streets</dt>
+* <dd>collection of an aggregated object within aggregated object within root</dd>
+*/
+public class OidMarshallerTest_unmarshal {
+
+    private OidMarshaller oidMarshaller;
+    
+    @Before
+    public void setUp() throws Exception {
+        oidMarshaller = new OidMarshaller();
+    }
+    
+    @Test
+    public void persistentRoot() {
+        final String oidStr = "CUS:123";
+        
+        final RootOidDefault rootOid = oidMarshaller.unmarshal(oidStr, RootOidDefault.class);
+        assertThat(rootOid.isTransient(), is(false));
+        assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
+        assertThat(rootOid.getIdentifier(), is("123"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)rootOid));
+    }
+
+    @Test
+    public void persistentRootWithFullyQualifiedSpecId() {
+        final String oidStr = "com.planchase.ClassName:8";
+        
+        final RootOidDefault rootOid = oidMarshaller.unmarshal(oidStr, RootOidDefault.class);
+        assertThat(rootOid.isTransient(), is(false));
+        assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("com.planchase.ClassName")));
+        assertThat(rootOid.getIdentifier(), is("8"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)rootOid));
+    }
+
+    @Test
+    public void transientRoot() {
+        final String oidStr = "!CUS:123";
+        
+        final RootOidDefault rootOid = oidMarshaller.unmarshal(oidStr, RootOidDefault.class);
+        assertThat(rootOid.isTransient(), is(true));
+        assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
+        assertThat(rootOid.getIdentifier(), is("123"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)rootOid));
+    }
+    
+    @Test
+    public void collectionOfPersistentRoot() {
+        final String oidStr = "CUS:123$items";
+        
+        final CollectionOid collectionOid = oidMarshaller.unmarshal(oidStr, CollectionOid.class);
+        assertThat(collectionOid.isTransient(), is(false));
+        assertThat(collectionOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("CUS:123", RootOidDefault.class)));
+        assertThat(collectionOid.getName(), is("items"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)collectionOid));
+    }
+
+    @Test
+    public void collectionOfTransientRoot() {
+        final String oidStr = "!CUS:123$items";
+        
+        final CollectionOid collectionOid = oidMarshaller.unmarshal(oidStr, CollectionOid.class);
+        assertThat(collectionOid.isTransient(), is(true));
+        assertThat(collectionOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("!CUS:123", RootOidDefault.class)));
+        assertThat(collectionOid.getName(), is("items"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)collectionOid));
+    }
+
+    @Test
+    public void aggregatedWithinPersistent() {
+        final String oidStr = "CUS:123~NME:2";
+        
+        final AggregatedOid aggregatedOid = oidMarshaller.unmarshal(oidStr, AggregatedOid.class);
+        assertThat(aggregatedOid.isTransient(), is(false));
+        assertThat(aggregatedOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("CUS:123", RootOidDefault.class)));
+        assertThat(aggregatedOid.getObjectSpecId(), is(ObjectSpecId.of("NME")));
+        assertThat(aggregatedOid.getLocalId(), is("2"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)aggregatedOid));
+    }
+
+    @Test
+    public void aggregatedWithinTransient() {
+        final String oidStr = "!CUS:123~NME:2";
+        
+        final AggregatedOid aggregatedOid = oidMarshaller.unmarshal(oidStr, AggregatedOid.class);
+        assertThat(aggregatedOid.isTransient(), is(true));
+        assertThat(aggregatedOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("!CUS:123", RootOidDefault.class)));
+        assertThat(aggregatedOid.getObjectSpecId(), is(ObjectSpecId.of("NME")));
+        assertThat(aggregatedOid.getLocalId(), is("2"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)aggregatedOid));
+    }
+
+    @Test
+    public void aggregatedWithinAggregatedWithinRoot() {
+        final String oidStr = "CUS:123~ADR:2~CTY:LON";
+        
+        final AggregatedOid aggregatedOid = oidMarshaller.unmarshal(oidStr, AggregatedOid.class);
+        assertThat(aggregatedOid.isTransient(), is(false));
+        assertThat(aggregatedOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("CUS:123~ADR:2", AggregatedOid.class)));
+        assertThat(aggregatedOid.getObjectSpecId(), is(ObjectSpecId.of("CTY")));
+        assertThat(aggregatedOid.getLocalId(), is("LON"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)aggregatedOid));
+    }
+
+    @Test
+    public void collectionOfAggregatedWithinRoot() {
+        final String oidStr = "CUS:123~NME:2$items";
+        
+        final CollectionOid collectionOid = oidMarshaller.unmarshal(oidStr, CollectionOid.class);
+        assertThat(collectionOid.isTransient(), is(false));
+        assertThat(collectionOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("CUS:123~NME:2", AggregatedOid.class)));
+        assertThat(collectionOid.getName(), is("items"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)collectionOid));
+    }
+
+    @Test
+    public void collectionOfAggregatedWithinAggregatedWithinRoot() {
+        final String oidStr = "CUS:123~ADR:2~CTY:LON$streets";
+        
+        final CollectionOid collectionOid = oidMarshaller.unmarshal(oidStr, CollectionOid.class);
+        assertThat(collectionOid.isTransient(), is(false));
+        assertThat(collectionOid.getParentOid(), is((TypedOid)oidMarshaller.unmarshal("CUS:123~ADR:2~CTY:LON", AggregatedOid.class)));
+        assertThat(collectionOid.getName(), is("streets"));
+        
+        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+        assertThat(oid, equalTo((Oid)collectionOid));
+    }
+    
+
+    @Test(expected=IllegalArgumentException.class)
+    public void root_forCollection_oidStr() {
+        oidMarshaller.unmarshal("CUS:123~NME:123$items", RootOidDefault.class);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void root_forAggregated_oidStr() {
+        oidMarshaller.unmarshal("CUS:123~NME:123", RootOidDefault.class);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void collection_forRoot_oidStr() {
+        oidMarshaller.unmarshal("CUS:123", CollectionOid.class);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void collection_forAggregated_oidStr() {
+        oidMarshaller.unmarshal("CUS:123~NME:123", CollectionOid.class);
+    }
+
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void aggregated_forPersistentRoot_oidStr() {
+        oidMarshaller.unmarshal("CUS:123", AggregatedOid.class);
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void aggregated_forTransientRoot_oidStr() {
+        oidMarshaller.unmarshal("!CUS:123", AggregatedOid.class);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void aggregated_forCollection_oidStr() {
+        oidMarshaller.unmarshal("CUS:123~NME:123$items", AggregatedOid.class);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void badPattern() {
+        oidMarshaller.unmarshal("xxx", RootOidDefault.class);
+    }
+
+    
+
+}

Propchange: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java Mon May 14 22:41:16 2012
@@ -4,18 +4,25 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.testsupport.value.ValueTypeContractTestAbstract;
 
 public class RootOidDefaultTest_valueSemantics_whenPersistent extends ValueTypeContractTestAbstract<RootOidDefault> {
 
     @Override
     protected List<RootOidDefault> getObjectsWithSameValue() {
-        return Arrays.asList(new RootOidDefault("CUS", "123", State.PERSISTENT), new RootOidDefault("CUS", "123", State.PERSISTENT), new RootOidDefault("CUS", "123", State.PERSISTENT));
+        return Arrays.asList(
+                new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.PERSISTENT), 
+                new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.PERSISTENT), 
+                new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.PERSISTENT));
     }
 
     @Override
     protected List<RootOidDefault> getObjectsWithDifferentValue() {
-        return Arrays.asList(new RootOidDefault("CUS", "123", State.TRANSIENT), new RootOidDefault("CUS", "124", State.PERSISTENT), new RootOidDefault("CUX", "123", State.PERSISTENT));
+        return Arrays.asList(
+                new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.TRANSIENT), 
+                new RootOidDefault(ObjectSpecId.of("CUS"), "124", State.PERSISTENT), 
+                new RootOidDefault(ObjectSpecId.of("CUX"), "123", State.PERSISTENT));
     }
 
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java Mon May 14 22:41:16 2012
@@ -4,18 +4,26 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.testsupport.value.ValueTypeContractTestAbstract;
 
 public class RootOidDefaultTest_valueSemantics_whenTransient extends ValueTypeContractTestAbstract<RootOidDefault> {
 
     @Override
     protected List<RootOidDefault> getObjectsWithSameValue() {
-        return Arrays.asList(new RootOidDefault("CUS", "123", State.TRANSIENT), new RootOidDefault("CUS", "123", State.TRANSIENT), new RootOidDefault("CUS", "123", State.TRANSIENT));
+        return Arrays.asList(
+            new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.TRANSIENT), 
+            new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.TRANSIENT), 
+            new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.TRANSIENT) 
+            );
     }
 
     @Override
     protected List<RootOidDefault> getObjectsWithDifferentValue() {
-        return Arrays.asList(new RootOidDefault("CUS", "123", State.PERSISTENT), new RootOidDefault("CUS", "124", State.TRANSIENT), new RootOidDefault("CUX", "123", State.TRANSIENT));
+        return Arrays.asList(
+            new RootOidDefault(ObjectSpecId.of("CUS"), "123", State.PERSISTENT), 
+            new RootOidDefault(ObjectSpecId.of("CUS"), "124", State.TRANSIENT), 
+            new RootOidDefault(ObjectSpecId.of("CUX"), "123", State.TRANSIENT));
     }
 
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidConformant.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidConformant.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidConformant.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidConformant.java Mon May 14 22:41:16 2012
@@ -32,7 +32,7 @@ class OidConformant extends RootOidAbstr
 
     @Override
     public String enString() {
-        return getObjectType() + "|" + getIdentifier();
+        return getObjectSpecId() + "|" + getIdentifier();
     }
 
     @Override

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonPublicDestringMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonPublicDestringMethod.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonPublicDestringMethod.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonPublicDestringMethod.java Mon May 14 22:41:16 2012
@@ -32,7 +32,7 @@ class OidWithNonPublicDestringMethod ext
 
     @Override
     public String enString() {
-        return getObjectType() + "|1234567A";
+        return getObjectSpecId() + "|1234567A";
     }
 
     @Override

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonStaticDestringMethod.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonStaticDestringMethod.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonStaticDestringMethod.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidWithNonStaticDestringMethod.java Mon May 14 22:41:16 2012
@@ -32,7 +32,7 @@ class OidWithNonStaticDestringMethod ext
 
     @Override
     public String enString() {
-        return getObjectType() + "|1234567A";
+        return getObjectSpecId() + "|1234567A";
     }
 
     @Override

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/RootOidAbstractForTesting.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/RootOidAbstractForTesting.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/RootOidAbstractForTesting.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/stringable/RootOidAbstractForTesting.java Mon May 14 22:41:16 2012
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.adapter.oid.stringable;
 
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 
 abstract class RootOidAbstractForTesting implements RootOid {
 
@@ -29,8 +30,8 @@ abstract class RootOidAbstractForTesting
     }
 
     @Override
-    public String getObjectType() {
-        return "FOO";
+    public ObjectSpecId getObjectSpecId() {
+        return ObjectSpecId.of("FOO");
     }
 
 

Added: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java?rev=1338468&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java (added)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java Mon May 14 22:41:16 2012
@@ -0,0 +1,20 @@
+package org.apache.isis.core.metamodel.spec;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.isis.core.testsupport.value.ValueTypeContractTestAbstract;
+
+public class ObjectSpecIdTest_valueSemantics extends ValueTypeContractTestAbstract<ObjectSpecId> {
+
+    @Override
+    protected List<ObjectSpecId> getObjectsWithSameValue() {
+        return Arrays.asList(new ObjectSpecId("CUS"), new ObjectSpecId("CUS"), new ObjectSpecId("CUS"));
+    }
+
+    @Override
+    protected List<ObjectSpecId> getObjectsWithDifferentValue() {
+        return Arrays.asList(new ObjectSpecId("bUS"), new ObjectSpecId("CUt"));
+    }
+
+}

Propchange: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ObjectSpecIdTest_valueSemantics.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java Mon May 14 22:41:16 2012
@@ -14,6 +14,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
 import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
@@ -71,16 +72,16 @@ public class SpecificationCacheDefaultTe
 
     @Test(expected=IllegalStateException.class)
     public void getByObjectType_whenNotSet() {
-        specificationCache.getByObjectType("CUS");
+        specificationCache.getByObjectType(ObjectSpecId.of("CUS"));
     }
 
     @Test
     public void getByObjectType_whenSet() {
-        Map<String, ObjectSpecification> specByObjectType = Maps.newHashMap();
-        specByObjectType.put("CUS", customerSpec);
+        Map<ObjectSpecId, ObjectSpecification> specByObjectType = Maps.newHashMap();
+        specByObjectType.put(ObjectSpecId.of("CUS"), customerSpec);
         
-        specificationCache.setCacheByObjectType(specByObjectType);
-        final ObjectSpecification objectSpec = specificationCache.getByObjectType("CUS");
+        specificationCache.setCacheBySpecId(specByObjectType);
+        final ObjectSpecification objectSpec = specificationCache.getByObjectType(ObjectSpecId.of("CUS"));
         
         assertSame(objectSpec, customerSpec);
     }

Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java Mon May 14 22:41:16 2012
@@ -39,11 +39,13 @@ import org.apache.isis.core.metamodel.co
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
 import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
 import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.Persistability;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -59,6 +61,10 @@ public class ObjectSpecificationStub ext
     private final String name;
     private List<ObjectSpecification> subclasses = Collections.emptyList();
     private String title;
+    /**
+     * lazily derived, see {@link #getSpecId()} 
+     */
+    private ObjectSpecId specId;
 
     private Persistability persistable;
     private boolean isEncodeable;
@@ -189,8 +195,11 @@ public class ObjectSpecificationStub ext
     }
 
     @Override
-    public String getObjectType() {
-        return getFullIdentifier();
+    public ObjectSpecId getSpecId() {
+        if(specId == null) {
+            specId = getFacet(ObjectSpecIdFacet.class).value();
+        }
+        return specId;
     }
 
     @Override

Copied: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetAbstract.java (from r1331799, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetAbstract.java?p2=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetAbstract.java&p1=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetAbstract.java&r1=1331799&r2=1338468&rev=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetAbstract.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetAbstract.java Mon May 14 22:41:16 2012
@@ -20,20 +20,27 @@
 package org.apache.isis.core.progmodel.facets.object.objecttype;
 
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.SingleStringValueFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectTypeFacet;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 
-
-public abstract class ObjectTypeFacetAbstract extends
-        SingleStringValueFacetAbstract implements ObjectTypeFacet {
+public abstract class ObjectSpecIdFacetAbstract extends
+        FacetAbstract implements ObjectSpecIdFacet {
 
     public static Class<? extends Facet> type() {
-        return ObjectTypeFacet.class;
+        return ObjectSpecIdFacet.class;
     }
 
-    public ObjectTypeFacetAbstract(final String value,
+    private final ObjectSpecId value;
+
+    public ObjectSpecIdFacetAbstract(final String value,
             final FacetHolder holder) {
-        super(ObjectTypeFacetAbstract.type(), holder, value);
+        super(ObjectSpecIdFacetAbstract.type(), holder, false);
+        this.value = ObjectSpecId.of(value);
+    }
+    
+    public ObjectSpecId value() {
+        return value;
     }
 }

Copied: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetDerivedFromClassName.java (from r1331799, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetDerivedFromClassName.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetDerivedFromClassName.java?p2=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetDerivedFromClassName.java&p1=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetDerivedFromClassName.java&r1=1331799&r2=1338468&rev=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetDerivedFromClassName.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetDerivedFromClassName.java Mon May 14 22:41:16 2012
@@ -21,9 +21,9 @@ package org.apache.isis.core.progmodel.f
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ObjectTypeFacetDerivedFromClassName extends ObjectTypeFacetAbstract {
+public class ObjectSpecIdFacetDerivedFromClassName extends ObjectSpecIdFacetAbstract {
 
-    public ObjectTypeFacetDerivedFromClassName(final String value, final FacetHolder holder) {
+    public ObjectSpecIdFacetDerivedFromClassName(final String value, final FacetHolder holder) {
         super(value, holder);
     }
 }

Copied: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetForObjectTypeAnnotation.java (from r1331799, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetAnnotation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetForObjectTypeAnnotation.java?p2=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetForObjectTypeAnnotation.java&p1=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetAnnotation.java&r1=1331799&r2=1338468&rev=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeFacetAnnotation.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectSpecIdFacetForObjectTypeAnnotation.java Mon May 14 22:41:16 2012
@@ -21,9 +21,9 @@ package org.apache.isis.core.progmodel.f
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ObjectTypeFacetAnnotation extends ObjectTypeFacetAbstract {
+public class ObjectSpecIdFacetForObjectTypeAnnotation extends ObjectSpecIdFacetAbstract {
 
-    public ObjectTypeFacetAnnotation(final String value,
+    public ObjectSpecIdFacetForObjectTypeAnnotation(final String value,
             final FacetHolder holder) {
         super(value, holder);
     }

Modified: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactory.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactory.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactory.java Mon May 14 22:41:16 2012
@@ -24,7 +24,7 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectTypeFacet;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
 
 public class ObjectTypeAnnotationFacetFactory extends AnnotationBasedFacetFactoryAbstract {
 
@@ -38,8 +38,8 @@ public class ObjectTypeAnnotationFacetFa
         FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
     }
 
-    private ObjectTypeFacet create(final ObjectType annotation, final FacetHolder holder) {
-        return annotation != null ? new ObjectTypeFacetAnnotation(annotation.value(), holder) : null;
+    private ObjectSpecIdFacet create(final ObjectType annotation, final FacetHolder holder) {
+        return annotation != null ? new ObjectSpecIdFacetForObjectTypeAnnotation(annotation.value(), holder) : null;
     }
 
 }

Modified: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactory.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactory.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactory.java Mon May 14 22:41:16 2012
@@ -23,7 +23,7 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectTypeFacet;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutorAware;
 
@@ -39,12 +39,12 @@ public class ObjectTypeDerivedFromClassN
     public void process(final ProcessClassContext processClassContaxt) {
         final FacetHolder facetHolder = processClassContaxt.getFacetHolder();
         // don't trash existing facet
-        if(facetHolder.containsDoOpFacet(ObjectTypeFacet.class)) {
+        if(facetHolder.containsDoOpFacet(ObjectSpecIdFacet.class)) {
             return;
         }
         final Class<?> originalClass = processClassContaxt.getCls();
         final Class<?> substitutedClass = classSubstitutor.getClass(originalClass);
-        FacetUtil.addFacet(new ObjectTypeFacetDerivedFromClassName(substitutedClass.getCanonicalName(), facetHolder));
+        FacetUtil.addFacet(new ObjectSpecIdFacetDerivedFromClassName(substitutedClass.getCanonicalName(), facetHolder));
     }
 
     @Override

Modified: incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java Mon May 14 22:41:16 2012
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.exceptions.NotYetImplementedException;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.ObjectReflector;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
@@ -118,7 +119,7 @@ public class ProgrammableReflector imple
     }
 
     @Override
-    public ObjectSpecification lookupByObjectType(String objectType) {
+    public ObjectSpecification lookupBySpecId(ObjectSpecId objectSpecId) {
         return null;
     }
 

Modified: incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactoryTest.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactoryTest.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeAnnotationFacetFactoryTest.java Mon May 14 22:41:16 2012
@@ -29,7 +29,8 @@ import org.junit.Test;
 
 import org.apache.isis.applib.annotation.ObjectType;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectTypeFacet;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryJUnit4TestCase;
 
 public class ObjectTypeAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
@@ -52,11 +53,11 @@ public class ObjectTypeAnnotationFacetFa
         
         facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetHolderImpl));
 
-        final ObjectTypeFacet facet = facetHolderImpl.getFacet(ObjectTypeFacet.class);
+        final ObjectSpecIdFacet facet = facetHolderImpl.getFacet(ObjectSpecIdFacet.class);
         
         assertThat(facet, is(not(nullValue())));
-        assertThat(facet instanceof ObjectTypeFacetAnnotation, is(true));
-        assertThat(facet.value(), is("CUS"));
+        assertThat(facet instanceof ObjectSpecIdFacetForObjectTypeAnnotation, is(true));
+        assertThat(facet.value(), is(ObjectSpecId.of("CUS")));
 
     }
 

Modified: incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactoryTest.java?rev=1338468&r1=1338467&r2=1338468&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactoryTest.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/objecttype/ObjectTypeDerivedFromClassNameFacetFactoryTest.java Mon May 14 22:41:16 2012
@@ -30,7 +30,8 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectTypeFacet;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryJUnit4TestCase;
 
@@ -47,15 +48,16 @@ public class ObjectTypeDerivedFromClassN
         facetFactory.setSpecificationLookup(reflector);
         facetFactory.setClassSubstitutor(classSubstitutor);
     }
+
+    static class Customer {
+    }
     
+    static class CustomerAsManufacturedByCglibByteCodeEnhancer extends Customer {
+    }
+
     @Test
     public void installsFacet_andDelegatesToClassSubstitutor() {
 
-        class CustomerAsManufacturedByCglibByteCodeEnhancer {
-        }
-
-        class Customer {
-        }
         
         expectNoMethodsRemoved();
         context.checking(new Expectations() {
@@ -67,11 +69,11 @@ public class ObjectTypeDerivedFromClassN
         
         facetFactory.process(new ProcessClassContext(CustomerAsManufacturedByCglibByteCodeEnhancer.class, methodRemover, facetHolderImpl));
 
-        final ObjectTypeFacet facet = facetHolderImpl.getFacet(ObjectTypeFacet.class);
+        final ObjectSpecIdFacet facet = facetHolderImpl.getFacet(ObjectSpecIdFacet.class);
         
         assertThat(facet, is(not(nullValue())));
-        assertThat(facet instanceof ObjectTypeFacetDerivedFromClassName, is(true));
-        assertThat(facet.value(), is(Customer.class.getCanonicalName()));
+        assertThat(facet instanceof ObjectSpecIdFacetDerivedFromClassName, is(true));
+        assertThat(facet.value(), is(ObjectSpecId.of(Customer.class.getCanonicalName())));
     }
 
 }

Added: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/files/Files.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/files/Files.java?rev=1338468&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/files/Files.java (added)
+++ incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/files/Files.java Mon May 14 22:41:16 2012
@@ -0,0 +1,99 @@
+package org.apache.isis.core.testsupport.files;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FilenameFilter;
+
+public final class Files {
+    
+    Files(){}
+
+    
+    ///////////////////////////////////////////////////////
+    // delete files
+    ///////////////////////////////////////////////////////
+    
+    
+    public enum Recursion {
+        DO_RECURSE,
+        DONT_RECURSE
+    }
+    
+    public static void deleteFiles(final String directoryName, final String fileExtension, Recursion recursion) {
+        deleteFiles(directoryName, filterFileNameExtension(fileExtension), recursion);
+    }
+
+    public static void deleteFiles(final File directory, final String fileExtension, Recursion recursion) {
+        deleteFiles(directory, filterFileNameExtension(fileExtension), recursion);
+    }
+
+    public static void deleteFiles(final String directoryName, final FilenameFilter filter, Recursion recursion) {
+        final File dir = new File(directoryName);
+        deleteFiles(dir, filter, recursion);
+    }
+
+    public static void deleteFiles(final File directory, final FilenameFilter filter, Recursion recursion) {
+        deleteFiles(directory, filter, recursion, new Deleter() {
+            @Override
+            public void deleteFile(File f) {
+                f.delete();
+            }
+        });
+    }
+
+    // introduced for testing of this utility class.
+    interface Deleter {
+        void deleteFile(File f);
+    }
+    
+    static void deleteFiles(final File directory, final FilenameFilter filter, Recursion recursion, Deleter deleter) {
+        for (final File file : directory.listFiles(filter)) {
+            deleter.deleteFile(file);
+        }
+        
+        if(recursion == Recursion.DO_RECURSE) {
+            for (final File subdir: directory.listFiles(filterDirectory())) {
+                deleteFiles(subdir, filter, recursion, deleter);
+            }
+        }
+    }
+
+    
+    ///////////////////////////////////////////////////////
+    // filters
+    ///////////////////////////////////////////////////////
+
+    public static FilenameFilter and(final FilenameFilter... filters) {
+        return new FilenameFilter(){
+
+            @Override
+            public boolean accept(File dir, String name) {
+                for(FilenameFilter filter: filters) {
+                    if(!filter.accept(dir, name)) {
+                        return false;
+                    }
+                }
+                return true;
+            }};
+    }
+
+    public static FilenameFilter filterFileNameExtension(final String fileExtension) {
+        return new FilenameFilter() {
+
+            @Override
+            public boolean accept(final File arg0, final String arg1) {
+                return arg1.endsWith(fileExtension);
+            }
+        };
+    }
+
+    public static FileFilter filterDirectory() {
+        return new FileFilter() {
+            @Override
+            public boolean accept(File arg0) {
+                return arg0.isDirectory();
+            }
+        };
+    }
+
+}

Propchange: incubator/isis/trunk/framework/core/testsupport/src/main/java/org/apache/isis/core/testsupport/files/Files.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/files/FilesTest_deleteFiles.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/files/FilesTest_deleteFiles.java?rev=1338468&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/files/FilesTest_deleteFiles.java (added)
+++ incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/files/FilesTest_deleteFiles.java Mon May 14 22:41:16 2012
@@ -0,0 +1,66 @@
+package org.apache.isis.core.testsupport.files;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.hamcrest.Description;
+import org.hamcrest.Factory;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.core.testsupport.files.Files.Deleter;
+import org.apache.isis.core.testsupport.files.Files.Recursion;
+import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2;
+import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode;
+
+public class FilesTest_deleteFiles {
+
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+    @Mock
+    private Deleter deleter;
+    
+    @Test
+    public void test() throws IOException {
+        final File cusIdxFile = new File("xml/objects/CUS.xml");
+        final File cus1File = new File("xml/objects/CUS/1.xml");
+        final File cus2File = new File("xml/objects/CUS/2.xml");
+        context.checking(new Expectations() {
+            {
+                one(deleter).deleteFile(with(equalsFile(cusIdxFile)));
+                one(deleter).deleteFile(with(equalsFile(cus1File)));
+                one(deleter).deleteFile(with(equalsFile(cus2File)));
+            }
+        });
+        
+        Files.deleteFiles(new File("xml/objects"), Files.filterFileNameExtension(".xml"), Recursion.DO_RECURSE, deleter);
+    }
+    
+
+    private static Matcher<File> equalsFile(final File file) throws IOException {
+        final String canonicalPath = file.getCanonicalPath();
+        return new TypeSafeMatcher<File>() {
+
+            @Override
+            public void describeTo(Description arg0) {
+                arg0.appendText("file '" + canonicalPath + "'");
+            }
+
+            @Override
+            public boolean matchesSafely(File arg0) {
+                try {
+                    return arg0.getCanonicalPath().equals(canonicalPath);
+                } catch (IOException e) {
+                    return false;
+                }
+            }
+        };
+    }
+
+    
+}

Propchange: incubator/isis/trunk/framework/core/testsupport/src/test/java/org/apache/isis/core/testsupport/files/FilesTest_deleteFiles.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS.xml?rev=1338468&view=auto
==============================================================================
    (empty)

Propchange: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/1.txt
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/1.txt?rev=1338468&view=auto
==============================================================================
    (empty)

Propchange: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/1.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/1.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/1.xml?rev=1338468&view=auto
==============================================================================
    (empty)

Propchange: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/1.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/2.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/2.xml?rev=1338468&view=auto
==============================================================================
    (empty)

Propchange: incubator/isis/trunk/framework/core/testsupport/xml/objects/CUS/2.xml
------------------------------------------------------------------------------
    svn:eol-style = native