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 2013/08/16 11:04:37 UTC

git commit: ISIS-51, ISIS-495: removing dependencies on Apache commons

Updated Branches:
  refs/heads/master 16854d353 -> 28189e1f9


ISIS-51, ISIS-495: removing dependencies on Apache commons

- commons-lang (except in Scimpi)
- commons-collections


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/28189e1f
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/28189e1f
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/28189e1f

Branch: refs/heads/master
Commit: 28189e1f9a26d4774995b6f7594d6d84f2fdde88
Parents: 16854d3
Author: Dan Haywood <da...@apache.org>
Authored: Fri Aug 16 10:04:20 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Aug 16 10:04:20 2013 +0100

----------------------------------------------------------------------
 .../xml/internal/UserProfileContentWriter.java  |   3 +-
 .../applib/client/RestfulClientTest_follow.java |  20 +-
 ...estfulObjectsApplicationExceptionMapper.java |   7 +-
 .../server/RuntimeExceptionMapper.java          |   9 +-
 component/viewer/scimpi/dispatcher/pom.xml      |   5 +
 .../dispatcher/view/debug/Specification.java    |   3 +-
 component/viewer/scimpi/pom.xml                 |   7 +
 .../ConverterForObjectAdapterMemento.java       |   5 +-
 .../viewer/wicket/ui/pages/PageAbstract.java    |   8 +-
 core/metamodel/pom.xml                          |   5 -
 .../core/commons/exceptions/ExceptionUtils.java | 413 +++++++++++++++++++
 .../isis/core/commons/lang/StringUtils.java     | 109 +++++
 .../collections/CollectionFacetAbstract.java    |   9 -
 .../collections/modify/CollectionFacet.java     |   7 -
 .../core/metamodel/spec/FreeStandingList.java   |  12 -
 .../collection/JavaCollectionFacet.java         |   4 +-
 .../collection/ObjectToAdapterFunction.java     |  53 +++
 .../collection/ObjectToAdapterTransformer.java  |  53 ---
 .../isis/core/runtime/snapshot/XmlSnapshot.java |   4 +-
 .../collections/JavaCollectionFacetTest.java    |   3 -
 core/pom.xml                                    |  17 +-
 core/runtime/pom.xml                            |   2 +
 .../isis/core/runtime/RuntimeBootstrapper.java  |  22 +-
 .../ObjectToAdapterTransformer.java             |  56 ---
 .../adaptermanager/PojoAdapterHashMap.java      |   1 -
 25 files changed, 631 insertions(+), 206 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/profilestore/xml/src/main/java/org/apache/isis/profilestore/xml/internal/UserProfileContentWriter.java
----------------------------------------------------------------------
diff --git a/component/profilestore/xml/src/main/java/org/apache/isis/profilestore/xml/internal/UserProfileContentWriter.java b/component/profilestore/xml/src/main/java/org/apache/isis/profilestore/xml/internal/UserProfileContentWriter.java
index 62a345e..59c0ad2 100644
--- a/component/profilestore/xml/src/main/java/org/apache/isis/profilestore/xml/internal/UserProfileContentWriter.java
+++ b/component/profilestore/xml/src/main/java/org/apache/isis/profilestore/xml/internal/UserProfileContentWriter.java
@@ -23,8 +23,7 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.Iterator;
 
-import org.apache.commons.lang.StringUtils;
-
+import org.apache.isis.core.commons.lang.StringUtils;
 import org.apache.isis.core.commons.xml.ContentWriter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulClientTest_follow.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulClientTest_follow.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulClientTest_follow.java
index 3573a16..8e0926a 100644
--- a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulClientTest_follow.java
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulClientTest_follow.java
@@ -21,19 +21,15 @@ package org.apache.isis.viewer.restfulobjects.applib.client;
 import java.net.URI;
 
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
 
-import org.apache.commons.collections.map.MultiValueMap;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.viewer.restfulobjects.applib.JsonFixture;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
 import org.jboss.resteasy.client.ClientExecutor;
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.core.BaseClientResponse;
+import org.jboss.resteasy.specimpl.MultivaluedMapImpl;
 import org.jboss.resteasy.specimpl.UriBuilderImpl;
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
@@ -42,6 +38,12 @@ import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import org.apache.isis.viewer.restfulobjects.applib.JsonFixture;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
+
 public class RestfulClientTest_follow {
 
     @Rule
@@ -90,13 +92,13 @@ public class RestfulClientTest_follow {
                 allowing(mockClientRequest).getHttpMethod();
                 will(returnValue("GET"));
 
-                one(mockClientRequest).execute();
+                oneOf(mockClientRequest).execute();
                 will(returnValue(mockClientResponse));
 
-                one(mockClientResponse).setReturnType(String.class);
+                oneOf(mockClientResponse).setReturnType(String.class);
                 allowing(mockClientResponse);
 
-                final MultiValueMap result = new MultiValueMap();
+                final MultivaluedMap result = new MultivaluedMapImpl();
                 result.put("Content-Type", "application/json");
                 allowing(mockClientResponse).getMetadata();
                 will(returnValue(result));

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
index 409ecdc..0c9eb4b 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
@@ -20,21 +20,20 @@ package org.apache.isis.viewer.restfulobjects.server;
 
 import java.util.List;
 
-import javax.ws.rs.Path;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.ext.ExceptionMapper;
 import javax.ws.rs.ext.Provider;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.exceptions.ExceptionUtils;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
 
-import com.google.common.collect.Lists;
-
 //@Path("/") // FIXME: workaround for TomEE ... but breaks the RestEasy TCK tests so commented out:-(
 @Provider
 public class RestfulObjectsApplicationExceptionMapper implements ExceptionMapper<RestfulObjectsApplicationException> {

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RuntimeExceptionMapper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RuntimeExceptionMapper.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RuntimeExceptionMapper.java
index d642823..315451c 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RuntimeExceptionMapper.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RuntimeExceptionMapper.java
@@ -25,13 +25,14 @@ import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.ext.ExceptionMapper;
 import javax.ws.rs.ext.Provider;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
+import com.google.common.collect.Lists;
+
+import org.jboss.resteasy.spi.Failure;
+
+import org.apache.isis.core.commons.exceptions.ExceptionUtils;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
-import org.jboss.resteasy.spi.Failure;
-
-import com.google.common.collect.Lists;
 
 @Provider
 public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/scimpi/dispatcher/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/pom.xml b/component/viewer/scimpi/dispatcher/pom.xml
index 44ed076..012a7de 100644
--- a/component/viewer/scimpi/dispatcher/pom.xml
+++ b/component/viewer/scimpi/dispatcher/pom.xml
@@ -80,6 +80,11 @@
         </dependency>
 
         <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.htmlparser</groupId>
             <artifactId>htmlparser</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java
index b7a0e1a..315b01e 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Specification.java
@@ -22,8 +22,7 @@ package org.apache.isis.viewer.scimpi.dispatcher.view.debug;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.lang.StringUtils;
-
+import org.apache.isis.core.commons.lang.StringUtils;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/scimpi/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/pom.xml b/component/viewer/scimpi/pom.xml
index a4f1dc9..ec824c0 100644
--- a/component/viewer/scimpi/pom.xml
+++ b/component/viewer/scimpi/pom.xml
@@ -120,6 +120,13 @@
 	            <version>1.0.0-SNAPSHOT</version>
 	        </dependency>
 
+            <dependency>
+                <!--  defined here because other Isis modules do not depend upon it -->
+                <groupId>commons-lang</groupId>
+                <artifactId>commons-lang</artifactId>
+                <version>2.6</version>
+            </dependency>
+
 		</dependencies>
 	</dependencyManagement>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
index 2c61488..f5b95ad 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
@@ -21,7 +21,8 @@ package org.apache.isis.viewer.wicket.viewer.integration.wicket;
 
 import java.util.Locale;
 
-import org.apache.commons.lang.StringUtils;
+import com.google.common.base.Strings;
+
 import org.apache.wicket.util.convert.IConverter;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -50,7 +51,7 @@ public class ConverterForObjectAdapterMemento implements IConverter {
      */
     @Override
     public Object convertToObject(final String value, final Locale locale) {
-        if (StringUtils.isEmpty(value)) {
+        if (Strings.isNullOrEmpty(value)) {
             return null;
         }
         final Oid oid = RootOidDefault.deStringEncoded(value, getOidMarshaller());

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index b88a0d9..f6b3563 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -23,12 +23,10 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import com.google.common.base.Strings;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.wicket.Application;
 import org.apache.wicket.RestartResponseAtInterceptPageException;
 import org.apache.wicket.markup.head.CssReferenceHeaderItem;
@@ -44,6 +42,8 @@ import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
@@ -176,7 +176,7 @@ public abstract class PageAbstract extends WebPage {
         //response.render(new PriorityHeaderItem(JavaScriptReferenceHeaderItem.forReference(BOOTSTRAP_JS)));
         
         final String feedbackMsg = JGrowlUtil.asJGrowlCalls(getMessageBroker());
-        if (!StringUtils.isEmpty(feedbackMsg)) {
+        if (!Strings.isNullOrEmpty(feedbackMsg)) {
             response.render(OnDomReadyHeaderItem.forScript(feedbackMsg));
         }
         

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/pom.xml
----------------------------------------------------------------------
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index b55d5ee..b5fb279 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -72,11 +72,6 @@
             <scope>test</scope>
         </dependency>
 
-
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-        </dependency>
         <dependency>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/commons/exceptions/ExceptionUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/exceptions/ExceptionUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/exceptions/ExceptionUtils.java
new file mode 100644
index 0000000..fc81a98
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/exceptions/ExceptionUtils.java
@@ -0,0 +1,413 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.core.commons.exceptions;
+
+
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/**
+ * <p>Provides utilities for manipulating and examining 
+ * <code>Throwable</code> objects.</p>
+ *
+ * @author Daniel L. Rall
+ * @author Dmitri Plotnikov
+ * @author Stephen Colebourne
+ * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
+ * @author Pete Gieser
+ * @since 1.0
+ * @version $Id: ExceptionUtils.java 594278 2007-11-12 19:58:30Z bayard $
+ */
+// portions copied in from commons-lang 2.6
+public class ExceptionUtils {
+    
+    /**
+     * <p>The names of methods commonly used to access a wrapped exception.</p>
+     */
+    private static String[] CAUSE_METHOD_NAMES = {
+        "getCause",
+        "getNextException",
+        "getTargetException",
+        "getException",
+        "getSourceException",
+        "getRootCause",
+        "getCausedByException",
+        "getNested",
+        "getLinkedException",
+        "getNestedException",
+        "getLinkedCause",
+        "getThrowable",
+    };
+
+    /**
+     * <p>The Method object for Java 1.4 getCause.</p>
+     */
+    private static final Method THROWABLE_CAUSE_METHOD;
+
+    /**
+     * <p>The Method object for Java 1.4 initCause.</p>
+     */
+    private static final Method THROWABLE_INITCAUSE_METHOD;
+    
+    static {
+        Method causeMethod;
+        try {
+            causeMethod = Throwable.class.getMethod("getCause", null);
+        } catch (Exception e) {
+            causeMethod = null;
+        }
+        THROWABLE_CAUSE_METHOD = causeMethod;
+        try {
+            causeMethod = Throwable.class.getMethod("initCause", new Class[]{Throwable.class});
+        } catch (Exception e) {
+            causeMethod = null;
+        }
+        THROWABLE_INITCAUSE_METHOD = causeMethod;
+    }
+    
+    /**
+     * <p>
+     * Public constructor allows an instance of <code>ExceptionUtils</code> to be created, although that is not
+     * normally necessary.
+     * </p>
+     */
+    public ExceptionUtils() {
+        super();
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
+     *
+     * <p>The method searches for methods with specific names that return a 
+     * <code>Throwable</code> object. This will pick up most wrapping exceptions,
+     * including those from JDK 1.4, and
+     * {@link org.apache.commons.lang.exception.NestableException NestableException}.
+     * The method names can be added to using {@link #addCauseMethodName(String)}.</p>
+     *
+     * <p>The default list searched for are:</p>
+     * <ul>
+     *  <li><code>getCause()</code></li>
+     *  <li><code>getNextException()</code></li>
+     *  <li><code>getTargetException()</code></li>
+     *  <li><code>getException()</code></li>
+     *  <li><code>getSourceException()</code></li>
+     *  <li><code>getRootCause()</code></li>
+     *  <li><code>getCausedByException()</code></li>
+     *  <li><code>getNested()</code></li>
+     * </ul>
+     * 
+     * <p>In the absence of any such method, the object is inspected for a
+     * <code>detail</code> field assignable to a <code>Throwable</code>.</p>
+     *
+     * <p>If none of the above is found, returns <code>null</code>.</p>
+     *
+     * @param throwable  the throwable to introspect for a cause, may be null
+     * @return the cause of the <code>Throwable</code>,
+     *  <code>null</code> if none found or null throwable input
+     * @since 1.0
+     */
+    public static Throwable getCause(Throwable throwable) {
+        synchronized(CAUSE_METHOD_NAMES) {
+            return getCause(throwable, CAUSE_METHOD_NAMES);
+        }
+    }
+
+    /**
+     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
+     *
+     * <ol>
+     * <li>Try known exception types.</li>
+     * <li>Try the supplied array of method names.</li>
+     * <li>Try the field 'detail'.</li>
+     * </ol>
+     *
+     * <p>A <code>null</code> set of method names means use the default set.
+     * A <code>null</code> in the set of method names will be ignored.</p>
+     *
+     * @param throwable  the throwable to introspect for a cause, may be null
+     * @param methodNames  the method names, null treated as default set
+     * @return the cause of the <code>Throwable</code>,
+     *  <code>null</code> if none found or null throwable input
+     * @since 1.0
+     */
+    public static Throwable getCause(Throwable throwable, String[] methodNames) {
+        if (throwable == null) {
+            return null;
+        }
+        Throwable cause = getCauseUsingWellKnownTypes(throwable);
+        if (cause == null) {
+            if (methodNames == null) {
+                synchronized(CAUSE_METHOD_NAMES) {
+                    methodNames = CAUSE_METHOD_NAMES;
+                }
+            }
+            for (int i = 0; i < methodNames.length; i++) {
+                String methodName = methodNames[i];
+                if (methodName != null) {
+                    cause = getCauseUsingMethodName(throwable, methodName);
+                    if (cause != null) {
+                        break;
+                    }
+                }
+            }
+
+            if (cause == null) {
+                cause = getCauseUsingFieldName(throwable, "detail");
+            }
+        }
+        return cause;
+    }
+
+    /**
+     * <p>Finds a <code>Throwable</code> for known types.</p>
+     * 
+     * <p>Uses <code>instanceof</code> checks to examine the exception,
+     * looking for well known types which could contain chained or
+     * wrapped exceptions.</p>
+     *
+     * @param throwable  the exception to examine
+     * @return the wrapped exception, or <code>null</code> if not found
+     */
+    private static Throwable getCauseUsingWellKnownTypes(Throwable throwable) {
+        /*if (throwable instanceof Nestable) {
+            return ((Nestable) throwable).getCause();
+        } else */
+        if (throwable instanceof SQLException) {
+            return ((SQLException) throwable).getNextException();
+        } else if (throwable instanceof InvocationTargetException) {
+            return ((InvocationTargetException) throwable).getTargetException();
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * <p>Finds a <code>Throwable</code> by method name.</p>
+     *
+     * @param throwable  the exception to examine
+     * @param methodName  the name of the method to find and invoke
+     * @return the wrapped exception, or <code>null</code> if not found
+     */
+    private static Throwable getCauseUsingMethodName(Throwable throwable, String methodName) {
+        Method method = null;
+        try {
+            method = throwable.getClass().getMethod(methodName, null);
+        } catch (NoSuchMethodException ignored) {
+            // exception ignored
+        } catch (SecurityException ignored) {
+            // exception ignored
+        }
+
+        if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
+            try {
+                return (Throwable) method.invoke(throwable, /*ArrayUtils.*/EMPTY_OBJECT_ARRAY);
+            } catch (IllegalAccessException ignored) {
+                // exception ignored
+            } catch (IllegalArgumentException ignored) {
+                // exception ignored
+            } catch (InvocationTargetException ignored) {
+                // exception ignored
+            }
+        }
+        return null;
+    }
+    
+    private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+
+    /**
+     * <p>Finds a <code>Throwable</code> by field name.</p>
+     *
+     * @param throwable  the exception to examine
+     * @param fieldName  the name of the attribute to examine
+     * @return the wrapped exception, or <code>null</code> if not found
+     */
+    private static Throwable getCauseUsingFieldName(Throwable throwable, String fieldName) {
+        Field field = null;
+        try {
+            field = throwable.getClass().getField(fieldName);
+        } catch (NoSuchFieldException ignored) {
+            // exception ignored
+        } catch (SecurityException ignored) {
+            // exception ignored
+        }
+
+        if (field != null && Throwable.class.isAssignableFrom(field.getType())) {
+            try {
+                return (Throwable) field.get(throwable);
+            } catch (IllegalAccessException ignored) {
+                // exception ignored
+            } catch (IllegalArgumentException ignored) {
+                // exception ignored
+            }
+        }
+        return null;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * <p>Checks if the Throwable class has a <code>getCause</code> method.</p>
+     *
+     * <p>This is true for JDK 1.4 and above.</p>
+     *
+     * @return true if Throwable is nestable
+     * @since 2.0
+     */
+    public static boolean isThrowableNested() {
+        return THROWABLE_CAUSE_METHOD != null;
+    }
+    
+    /**
+     * <p>Checks whether this <code>Throwable</code> class can store a cause.</p>
+     *
+     * <p>This method does <b>not</b> check whether it actually does store a cause.<p>
+     *
+     * @param throwable  the <code>Throwable</code> to examine, may be null
+     * @return boolean <code>true</code> if nested otherwise <code>false</code>
+     * @since 2.0
+     */
+    public static boolean isNestedThrowable(Throwable throwable) {
+        if (throwable == null) {
+            return false;
+        }
+
+        /*if (throwable instanceof Nestable) {
+            return true;
+        } else*/ if (throwable instanceof SQLException) {
+            return true;
+        } else if (throwable instanceof InvocationTargetException) {
+            return true;
+        } else if (isThrowableNested()) {
+            return true;
+        }
+
+        Class cls = throwable.getClass();
+        synchronized(CAUSE_METHOD_NAMES) {
+            for (int i = 0, isize = CAUSE_METHOD_NAMES.length; i < isize; i++) {
+                try {
+                    Method method = cls.getMethod(CAUSE_METHOD_NAMES[i], null);
+                    if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
+                        return true;
+                    }
+                } catch (NoSuchMethodException ignored) {
+                    // exception ignored
+                } catch (SecurityException ignored) {
+                    // exception ignored
+                }
+            }
+        }
+
+        try {
+            Field field = cls.getField("detail");
+            if (field != null) {
+                return true;
+            }
+        } catch (NoSuchFieldException ignored) {
+            // exception ignored
+        } catch (SecurityException ignored) {
+            // exception ignored
+        }
+
+        return false;
+    }
+
+    /**
+     * <p>Returns the list of <code>Throwable</code> objects in the
+     * exception chain.</p>
+     *
+     * <p>A throwable without cause will return an array containing
+     * one element - the input throwable.
+     * A throwable with one cause will return an array containing
+     * two elements. - the input throwable and the cause throwable.
+     * A <code>null</code> throwable will return an array of size zero.</p>
+     *
+     * <p>From version 2.2, this method handles recursive cause structures
+     * that might otherwise cause infinite loops. The cause chain is
+     * processed until the end is reached, or until the next item in the
+     * chain is already in the result set.</p>
+     *
+     * @see #getThrowableList(Throwable)
+     * @param throwable  the throwable to inspect, may be null
+     * @return the array of throwables, never null
+     */
+    public static Throwable[] getThrowables(Throwable throwable) {
+        List list = getThrowableList(throwable);
+        return (Throwable[]) list.toArray(new Throwable[list.size()]);
+    }
+
+    /**
+     * <p>Returns the list of <code>Throwable</code> objects in the
+     * exception chain.</p>
+     *
+     * <p>A throwable without cause will return a list containing
+     * one element - the input throwable.
+     * A throwable with one cause will return a list containing
+     * two elements. - the input throwable and the cause throwable.
+     * A <code>null</code> throwable will return a list of size zero.</p>
+     *
+     * <p>This method handles recursive cause structures that might
+     * otherwise cause infinite loops. The cause chain is processed until
+     * the end is reached, or until the next item in the chain is already
+     * in the result set.</p>
+     *
+     * @param throwable  the throwable to inspect, may be null
+     * @return the list of throwables, never null
+     * @since Commons Lang 2.2
+     */
+    public static List getThrowableList(Throwable throwable) {
+        List list = new ArrayList();
+        while (throwable != null && list.contains(throwable) == false) {
+            list.add(throwable);
+            throwable = ExceptionUtils.getCause(throwable);
+        }
+        return list;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * <p>A way to get the entire nested stack-trace of an throwable.</p>
+     *
+     * <p>The result of this method is highly dependent on the JDK version
+     * and whether the exceptions override printStackTrace or not.</p>
+     *
+     * @param throwable  the <code>Throwable</code> to be examined
+     * @return the nested stack trace, with the root cause first
+     * @since 2.0
+     */
+    public static String getFullStackTrace(Throwable throwable) {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw, true);
+        Throwable[] ts = getThrowables(throwable);
+        for (int i = 0; i < ts.length; i++) {
+            ts[i].printStackTrace(pw);
+            if (isNestedThrowable(ts[i])) {
+                break;
+            }
+        }
+        return sw.getBuffer().toString();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
index 5abfa76..2eedb65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
@@ -385,4 +385,113 @@ public final class StringUtils {
         return string2;
     }
 
+    
+    // //////////////////////////////////////
+    // copied in from Apache Commons
+    // //////////////////////////////////////
+
+    
+    public static final String EMPTY = "";
+    /**
+     * <p>The maximum size to which the padding constant(s) can expand.</p>
+     */
+    private static final int PAD_LIMIT = 8192;
+
+    /**
+     * <p>Repeat a String <code>repeat</code> times to form a
+     * new String.</p>
+     *
+     * <pre>
+     * StringUtils.repeat(null, 2) = null
+     * StringUtils.repeat("", 0)   = ""
+     * StringUtils.repeat("", 2)   = ""
+     * StringUtils.repeat("a", 3)  = "aaa"
+     * StringUtils.repeat("ab", 2) = "abab"
+     * StringUtils.repeat("a", -2) = ""
+     * </pre>
+     *
+     * @param str  the String to repeat, may be null
+     * @param repeat  number of times to repeat str, negative treated as zero
+     * @return a new String consisting of the original String repeated,
+     *  <code>null</code> if null String input
+     */
+    public static String repeat(String str, int repeat) {
+        // Performance tuned for 2.0 (JDK1.4)
+
+        if (str == null) {
+            return null;
+        }
+        if (repeat <= 0) {
+            return EMPTY;
+        }
+        int inputLength = str.length();
+        if (repeat == 1 || inputLength == 0) {
+            return str;
+        }
+        if (inputLength == 1 && repeat <= PAD_LIMIT) {
+            return padding(repeat, str.charAt(0));
+        }
+
+        int outputLength = inputLength * repeat;
+        switch (inputLength) {
+            case 1 :
+                char ch = str.charAt(0);
+                char[] output1 = new char[outputLength];
+                for (int i = repeat - 1; i >= 0; i--) {
+                    output1[i] = ch;
+                }
+                return new String(output1);
+            case 2 :
+                char ch0 = str.charAt(0);
+                char ch1 = str.charAt(1);
+                char[] output2 = new char[outputLength];
+                for (int i = repeat * 2 - 2; i >= 0; i--, i--) {
+                    output2[i] = ch0;
+                    output2[i + 1] = ch1;
+                }
+                return new String(output2);
+            default :
+                StringBuilder buf = new StringBuilder(outputLength);
+                for (int i = 0; i < repeat; i++) {
+                    buf.append(str);
+                }
+                return buf.toString();
+        }
+    }
+
+    /**
+     * <p>Returns padding using the specified delimiter repeated
+     * to a given length.</p>
+     *
+     * <pre>
+     * StringUtils.padding(0, 'e')  = ""
+     * StringUtils.padding(3, 'e')  = "eee"
+     * StringUtils.padding(-2, 'e') = IndexOutOfBoundsException
+     * </pre>
+     *
+     * <p>Note: this method doesn't not support padding with
+     * <a href="http://www.unicode.org/glossary/#supplementary_character">Unicode Supplementary Characters</a>
+     * as they require a pair of <code>char</code>s to be represented.
+     * If you are needing to support full I18N of your applications
+     * consider using {@link #repeat(String, int)} instead. 
+     * </p>
+     *
+     * @param repeat  number of times to repeat delim
+     * @param padChar  character to repeat
+     * @return String with repeated character
+     * @throws IndexOutOfBoundsException if <code>repeat &lt; 0</code>
+     * @see #repeat(String, int)
+     */
+    private static String padding(int repeat, char padChar) throws IndexOutOfBoundsException {
+        if (repeat < 0) {
+            throw new IndexOutOfBoundsException("Cannot pad a negative amount: " + repeat);
+        }
+        final char[] buf = new char[repeat];
+        for (int i = 0; i < buf.length; i++) {
+            buf[i] = padChar;
+        }
+        return new String(buf);
+    }
+    
+    
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/CollectionFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/CollectionFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/CollectionFacetAbstract.java
index 38ea6e4..7cb3a8a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/CollectionFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/CollectionFacetAbstract.java
@@ -20,11 +20,8 @@
 package org.apache.isis.core.metamodel.facets.collections;
 
 import java.util.Collection;
-import java.util.Enumeration;
 import java.util.Iterator;
 
-import org.apache.commons.collections.iterators.IteratorEnumeration;
-
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -38,12 +35,6 @@ public abstract class CollectionFacetAbstract extends FacetAbstract implements C
     }
 
     @Override
-    @SuppressWarnings("unchecked")
-    public final Enumeration<ObjectAdapter> elements(final ObjectAdapter collectionAdapter) {
-        return new IteratorEnumeration(iterator(collectionAdapter));
-    }
-
-    @Override
     public final boolean contains(final ObjectAdapter collectionAdapter, final ObjectAdapter candidateObjectAdapter) {
         final Collection<ObjectAdapter> collection = collection(collectionAdapter);
         return collection.contains(candidateObjectAdapter);

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
index 0c22120..3028880 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionFacet.java
@@ -40,13 +40,6 @@ public interface CollectionFacet extends Facet {
 
     int size(ObjectAdapter collection);
 
-    /**
-     * @deprecated - use {@link #iterator(ObjectAdapter)} or
-     *             {@link #iterable(ObjectAdapter)}.
-     */
-    @Deprecated
-    Enumeration<ObjectAdapter> elements(ObjectAdapter collectionAdapter);
-
     Iterable<ObjectAdapter> iterable(ObjectAdapter collectionAdapter);
 
     Iterator<ObjectAdapter> iterator(ObjectAdapter collectionAdapter);

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
index 234b71d..14c1670 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/FreeStandingList.java
@@ -21,11 +21,8 @@ package org.apache.isis.core.metamodel.spec;
 
 import java.util.AbstractList;
 import java.util.Collections;
-import java.util.Enumeration;
 import java.util.List;
 
-import org.apache.commons.collections.iterators.IteratorEnumeration;
-
 import org.apache.isis.core.commons.lang.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 
@@ -58,15 +55,6 @@ public class FreeStandingList extends AbstractList<ObjectAdapter> {
         return instances.size();
     }
 
-    /**
-     * @deprecated - use {@link #iterator()}.
-     */
-    @SuppressWarnings("unchecked")
-    @Deprecated
-    public Enumeration<ObjectAdapter> elements() {
-        return new IteratorEnumeration(iterator());
-    }
-
     public ObjectSpecification getElementSpecification() {
         return instanceSpecification;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/JavaCollectionFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/JavaCollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/JavaCollectionFacet.java
index 0010415..fc524b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/JavaCollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/JavaCollectionFacet.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.progmodel.facets.collections.collection;
 import java.util.Collection;
 import java.util.Iterator;
 
-import org.apache.commons.collections.CollectionUtils;
+import com.google.common.collect.Collections2;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -42,7 +42,7 @@ public class JavaCollectionFacet extends CollectionFacetAbstract {
     @SuppressWarnings("unchecked")
     public Collection<ObjectAdapter> collection(final ObjectAdapter wrappedCollection) {
         final Collection<?> collectionOfUnderlying = collectionOfUnderlying(wrappedCollection);
-        return CollectionUtils.collect(collectionOfUnderlying, new ObjectToAdapterTransformer(getAdapterManager()));
+        return Collections2.transform(collectionOfUnderlying, new ObjectToAdapterFunction(getAdapterManager()));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterFunction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterFunction.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterFunction.java
new file mode 100644
index 0000000..4d1ada3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterFunction.java
@@ -0,0 +1,53 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.collections.collection;
+
+import com.google.common.base.Function;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+
+/**
+ * Uses the Commons Collection API to transform {@link Object}s into
+ * {@link ObjectAdapter} adapters.
+ * 
+ */
+public final class ObjectToAdapterFunction implements Function<Object,ObjectAdapter> {
+
+    private final AdapterManager adapterManager;
+
+    public ObjectToAdapterFunction(final AdapterManager adapterManager) {
+        this.adapterManager = adapterManager;
+    }
+
+    @Override
+    public ObjectAdapter apply(final Object object) {
+        return getAdapterManager().adapterFor(object);
+    }
+
+    // //////////////////////////////////////////////////////////////////
+    // Dependencies (from constructor)
+    // //////////////////////////////////////////////////////////////////
+
+    public AdapterManager getAdapterManager() {
+        return adapterManager;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterTransformer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterTransformer.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterTransformer.java
deleted file mode 100644
index 442a24d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/collection/ObjectToAdapterTransformer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.progmodel.facets.collections.collection;
-
-import org.apache.commons.collections.Transformer;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-
-/**
- * Uses the Commons Collection API to transform {@link Object}s into
- * {@link ObjectAdapter} adapters.
- * 
- */
-public final class ObjectToAdapterTransformer implements Transformer {
-
-    private final AdapterManager adapterManager;
-
-    public ObjectToAdapterTransformer(final AdapterManager adapterManager) {
-        this.adapterManager = adapterManager;
-    }
-
-    @Override
-    public Object transform(final Object object) {
-        return getAdapterManager().adapterFor(object);
-    }
-
-    // //////////////////////////////////////////////////////////////////
-    // Dependencies (from constructor)
-    // //////////////////////////////////////////////////////////////////
-
-    public AdapterManager getAdapterManager() {
-        return adapterManager;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
index 54d49ba..c3dc75c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
@@ -499,9 +499,7 @@ public class XmlSnapshot {
                 LOG.debug("includeField(Pl, Vec, Str): 1->M: " + log("collection.size", "" + facet.size(collection)));
             }
             boolean allFieldsNavigated = true;
-            final Enumeration elements = facet.elements(collection);
-            while (elements.hasMoreElements()) {
-                final ObjectAdapter referencedObject = (ObjectAdapter) elements.nextElement();
+            for(final ObjectAdapter referencedObject: facet.iterable(collection)) {
                 final boolean appendedXml = appendXmlThenIncludeRemaining(fieldPlace, referencedObject, names, annotation);
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("includeField(Pl, Vec, Str): 1->M: + invoked appendXmlThenIncludeRemaining for " + log("referencedObj", referencedObject) + andlog("returned", "" + appendedXml));

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/JavaCollectionFacetTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/JavaCollectionFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/JavaCollectionFacetTest.java
index 1f65ca2..5f98ffc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/JavaCollectionFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/JavaCollectionFacetTest.java
@@ -77,9 +77,6 @@ public class JavaCollectionFacetTest {
                 one(mockCollection).getObject();
                 will(returnValue(mockWrappedCollection));
 
-                one(mockWrappedCollection).size();
-                will(returnValue(0));
-
                 one(mockWrappedCollection).iterator();
                 will(returnValue(mockIterator));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index c298e5c..81874a2 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -59,7 +59,6 @@
         <testsToExclude>**/*IntegrationTest.java</testsToExclude>
 
 
-
         <!-- remaining properties should not need to be overridden -->
         <compileSource>1.6</compileSource>
         <compileTarget>1.6</compileTarget>
@@ -1185,16 +1184,7 @@ ${license.additional-notes}
             </dependency>
 
             <!-- Apache Commons -->
-            <dependency>
-                <groupId>commons-lang</groupId>
-                <artifactId>commons-lang</artifactId>
-                <version>2.6</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-collections</groupId>
-                <artifactId>commons-collections</artifactId>
-                <version>3.2.1</version>
-            </dependency>
+
             <dependency>
                 <groupId>commons-cli</groupId>
                 <artifactId>commons-cli</artifactId>
@@ -1210,11 +1200,6 @@ ${license.additional-notes}
                 <artifactId>commons-codec</artifactId>
                 <version>1.8</version>
             </dependency>
-            <dependency>
-                <groupId>commons-jxpath</groupId>
-                <artifactId>commons-jxpath</artifactId>
-                <version>1.3</version>
-            </dependency>
 
 
             <!--  Other Common Utils -->

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/runtime/pom.xml
----------------------------------------------------------------------
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index 0393004..12eacb1 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -115,10 +115,12 @@
             <scope>test</scope>
         </dependency>
 
+<!-- 
 		<dependency>
 			<groupId>commons-lang</groupId>
 			<artifactId>commons-lang</artifactId>
 		</dependency>
+ -->
 
 		<dependency>
 			<groupId>org.jmock</groupId>

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/runtime/src/main/java/org/apache/isis/core/runtime/RuntimeBootstrapper.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/RuntimeBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/RuntimeBootstrapper.java
index bb43257..f6b3c44 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/RuntimeBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/RuntimeBootstrapper.java
@@ -22,11 +22,11 @@ package org.apache.isis.core.runtime;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 import com.google.inject.Injector;
 
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Predicate;
-
 import org.apache.isis.core.commons.lang.Threads;
 import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
 import org.apache.isis.core.runtime.installerregistry.installerapi.EmbeddedWebServerInstaller;
@@ -78,15 +78,13 @@ final class RuntimeBootstrapper implements IsisBootstrapper {
     }
 
     private List<IsisViewer> findWebViewers(final List<IsisViewer> viewers) {
-        final List<IsisViewer> webViewers = new ArrayList<IsisViewer>(viewers);
-        CollectionUtils.filter(webViewers, new Predicate() {
-            @Override
-            public boolean evaluate(final Object object) {
-                final IsisViewer viewer = (IsisViewer) object;
-                return viewer.getWebAppSpecification() != null;
-            }
-        });
-        return webViewers;
+        return Lists.newArrayList(
+                Iterables.filter(viewers, new Predicate<IsisViewer>() {
+                    @Override
+                    public boolean apply(final IsisViewer viewer) {
+                        return viewer.getWebAppSpecification() != null;
+                    }
+                }));
     }
 
     private List<IsisViewer> findNonWebViewers(final List<IsisViewer> viewers, final List<IsisViewer> webViewers) {

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/ObjectToAdapterTransformer.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/ObjectToAdapterTransformer.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/ObjectToAdapterTransformer.java
deleted file mode 100644
index 1ddd331..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/ObjectToAdapterTransformer.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.runtime.persistence.adaptermanager;
-
-import org.apache.commons.collections.Transformer;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-
-/**
- * Uses the Commons Collection API to transform {@link Object}s into
- * {@link ObjectAdapter} adapters.
- * 
- */
-public final class ObjectToAdapterTransformer implements Transformer {
-
-    public ObjectToAdapterTransformer() {
-    }
-
-    @Override
-    public Object transform(final Object object) {
-        return getAdapterManager().adapterFor(object);
-    }
-
-    // //////////////////////////////////////////////////////////////////
-    // Dependencies (from context)
-    // //////////////////////////////////////////////////////////////////
-
-    protected AdapterManager getAdapterManager() {
-        return getPersistenceSession().getAdapterManager();
-    }
-
-    protected PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession();
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/28189e1f/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
index 2927d8d..63bddfa 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/PojoAdapterHashMap.java
@@ -24,7 +24,6 @@ import java.util.Map;
 
 import com.google.common.collect.Maps;
 
-import org.apache.commons.collections.map.IdentityMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;