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 2011/04/26 20:24:13 UTC

svn commit: r1096837 [2/14] - in /incubator/isis/trunk: core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/ core/metamodel/src/main/java/org/apache/isis/core/meta...

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ResolveState.java Tue Apr 26 18:24:05 2011
@@ -17,9 +17,8 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter;
 
-package org.apache.isis.core.metamodel.adapter;
-
 import static org.apache.isis.core.metamodel.adapter.ResolveState.DeserializableFrom.DESERIALIZABLE_FROM;
 import static org.apache.isis.core.metamodel.adapter.ResolveState.DeserializableFrom.NOT_DESERIALIZABLE_FROM;
 import static org.apache.isis.core.metamodel.adapter.ResolveState.DeserializableInto.DESERIALIZABLE_INTO;
@@ -48,511 +47,390 @@ import java.util.List;
 import java.util.Map;
 
 import com.google.common.collect.Maps;
-
-public final class ResolveState {
-    private static final Map<String,ResolveState> statesByName = Maps.newHashMap();
-    
-    static enum ResolvableFrom {
-        RESOLVABLE_FROM,
-        NOT_RESOLVABLE_FROM
-    }
-
-    static enum ResolvableInto {
-        RESOLVABLE_INTO,
-        NOT_RESOLVABLE_INTO
-    }
-
-    static enum DeserializableFrom {
-        DESERIALIZABLE_FROM,
-        NOT_DESERIALIZABLE_FROM
-    }
-
-    static enum DeserializableInto {
-        DESERIALIZABLE_INTO,
-        NOT_DESERIALIZABLE_INTO
-    }
-
-    static enum RespondsToChanges {
-        RESPONDS_TO_CHANGES,
-        DOES_NOT_RESPOND_TO_CHANGES
-    }
-
-    static enum RepresentsTransient {
-        REPRESENTS_TRANSIENT,
-        DOES_NOT_REPRESENT_TRANSIENT
-    }
-
-    static enum RepresentsPersistent {
-        REPRESENTS_PERSISTENT,
-        DOES_NOT_REPRESENT_PERSISTENT
-    }
-
-    static enum Resolving {
-        REPRESENTS_RESOLVING,
-        DOES_NOT_REPRESENT_RESOLVING
-    }
-
-    static enum Serializing {
-        REPRESENTS_SERIALIZING,
-        DOES_NOT_REPRESENT_SERIALIZING
-    }
-    
-    /**
-     * Whether or not an object in this state could cause a
-     * resolve (database load) to occur if interacted with.
-     */
-    static enum ResolvePotential {
-        COULD_RESOLVE,
-        WILL_NEVER_RESOLVE
-    }
-
-
-    public static final ResolveState NEW = new ResolveState("New", "N~~~", 
-            null, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            DOES_NOT_REPRESENT_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-    public static final ResolveState TRANSIENT = new ResolveState("Transient", "T~~~", 
-            null, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            REPRESENTS_TRANSIENT, 
-            DOES_NOT_REPRESENT_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-    public static final ResolveState GHOST = new ResolveState("Ghost", "PG~~", 
-            null, 
-            RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            RESPONDS_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            COULD_RESOLVE);
-    public static final ResolveState PART_RESOLVED = new ResolveState("Part Resolved", "Pr~~", 
-            null, 
-            RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            RESPONDS_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            COULD_RESOLVE);
-    public static final ResolveState RESOLVED = new ResolveState("Resolved", "PR~~", 
-            null, 
-            RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            RESPONDS_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-    public static final ResolveState RESOLVING = new ResolveState("Resolving", "P~R~", 
-            RESOLVED, 
-            NOT_RESOLVABLE_FROM, RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            REPRESENTS_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING,
-            COULD_RESOLVE);
-    public static final ResolveState RESOLVING_PART = new ResolveState("Resolving Part", "P~r~", 
-            PART_RESOLVED, 
-            NOT_RESOLVABLE_FROM, RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            REPRESENTS_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            COULD_RESOLVE);
-    public static final ResolveState SERIALIZING_GHOST = new ResolveState("Serializing Ghost", "PG~S", 
-            GHOST, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            REPRESENTS_SERIALIZING, 
-            COULD_RESOLVE);
-    public static final ResolveState SERIALIZING_PART_RESOLVED = new ResolveState("Serializing Part Resolved", "Pr~S", 
-            PART_RESOLVED, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            REPRESENTS_SERIALIZING, 
-            COULD_RESOLVE);
-    public static final ResolveState SERIALIZING_RESOLVED = new ResolveState("Serializing Resolved", "PR~S", 
-            RESOLVED, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            REPRESENTS_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-    public static final ResolveState SERIALIZING_TRANSIENT = new ResolveState("Serializing Transient", "T~~S", 
-            TRANSIENT, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            REPRESENTS_TRANSIENT, 
-            DOES_NOT_REPRESENT_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            REPRESENTS_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-    public static final ResolveState UPDATING = new ResolveState("Updating", "PU~~", 
-            RESOLVED, 
-            NOT_RESOLVABLE_FROM, RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO,
-            DOES_NOT_RESPOND_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            REPRESENTS_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            COULD_RESOLVE);
-    public static final ResolveState DESTROYED = new ResolveState("Destroyed", "D~~~", 
-            null, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            RESPONDS_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            DOES_NOT_REPRESENT_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-    public static final ResolveState VALUE = new ResolveState("Value", "V~~~", 
-            null, 
-            NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, 
-            NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
-            RESPONDS_TO_CHANGES,
-            DOES_NOT_REPRESENT_TRANSIENT, 
-            DOES_NOT_REPRESENT_PERSISTENT,
-            DOES_NOT_REPRESENT_RESOLVING,
-            DOES_NOT_REPRESENT_SERIALIZING, 
-            WILL_NEVER_RESOLVE);
-
-
-    /**
-     * These cannot be passed into the constructor because cannot reference an instance until it has been
-     * declared.
-     */
-    public static Map<ResolveState, ResolveState[]> changeToStatesByState = new HashMap<ResolveState, ResolveState[]>() {
-        private static final long serialVersionUID = 1L;
-    {
-        put(GHOST, new ResolveState[]{
-                DESTROYED, RESOLVING_PART, RESOLVING, UPDATING, SERIALIZING_GHOST});
-        put(NEW, new ResolveState[]{
-                TRANSIENT, GHOST, VALUE});
-        put(TRANSIENT, new ResolveState[]{
-                RESOLVED, SERIALIZING_TRANSIENT});
-        put(PART_RESOLVED, new ResolveState[]{
-                RESOLVING_PART, RESOLVING, SERIALIZING_PART_RESOLVED, UPDATING, DESTROYED});
-        put(RESOLVED, new ResolveState[]{
-                GHOST, SERIALIZING_RESOLVED, UPDATING, DESTROYED});
-        put(RESOLVING, new ResolveState[]{
-                RESOLVED});
-        put(RESOLVING_PART, new ResolveState[]{
-                PART_RESOLVED, RESOLVED});
-        put(SERIALIZING_GHOST, new ResolveState[]{
-                GHOST});
-        put(SERIALIZING_PART_RESOLVED, new ResolveState[]{
-                PART_RESOLVED});
-        put(SERIALIZING_RESOLVED, new ResolveState[]{
-                RESOLVED});
-        put(SERIALIZING_TRANSIENT, new ResolveState[]{
-                TRANSIENT});
-        put(UPDATING, new ResolveState[]{
-                RESOLVED});
-        put(DESTROYED, new ResolveState[]{});
-        put(VALUE, new ResolveState[]{});
-    }};
-
-    private final String code;
-    private final ResolveState endState;
-    private final String name;
-    private final ResolvableFrom resolvableFrom;
-    private final ResolvableInto resolvableInto;
-    private final DeserializableFrom deserializableFrom;
-    private final DeserializableInto deserializableInto;
-    private final RespondsToChanges respondsToChanges;
-    private final RepresentsTransient representsTransient;
-    private final RepresentsPersistent representsPersistent;
-    private final Resolving resolving;
-    private final Serializing serializing;
-    private final ResolvePotential resolvePotential;
-    private HashSet<ResolveState> changeToStates;
-    
-    public static ResolveState getResolveState(final String name) {
-        return statesByName.get(name);
-    }
-
-    private ResolveState(
-            final String name, final String code, 
-            final ResolveState endState, 
-            final ResolvableFrom resolvableFrom, final ResolvableInto resolvableInto, 
-            final DeserializableFrom deserializableFrom, final DeserializableInto deserializableInto,
-            final RespondsToChanges respondsToChanges,
-            final RepresentsTransient representsTransient,
-            final RepresentsPersistent representsPersistent,
-            final Resolving resolving,
-            final Serializing serializing, 
-            final ResolvePotential resolvePotential) {
-        this.name = name;
-        this.code = code;
-        this.endState = endState;
-        this.resolvableFrom = resolvableFrom;
-        this.resolvableInto = resolvableInto;
-        this.deserializableFrom = deserializableFrom;
-        this.deserializableInto = deserializableInto;
-        this.respondsToChanges = respondsToChanges;
-        this.representsTransient = representsTransient;
-        this.representsPersistent = representsPersistent;
-        this.resolving = resolving;
-        this.serializing = serializing;
-        this.resolvePotential = resolvePotential;
-        statesByName.put(name, this);
-    }
-    
-
-    /**
-     * Four character representation of the state.
-     * 
-     * <p>
-     * The format is <tt>XYZW</tt> where:
-     * <ul>
-     *   <li><tt>X</tt> is transient state:
-     *     <ul>
-     *       <li>N</li> for <b>N</b>ew
-     *       <li>T</li> for <b>T</b>ransient
-     *       <li>P</li> for <b>P</b>ersistent
-     *       <li>D</li> for <b>D</b>estroyed
-     *       <li>A</li> for st<b>A</b>ndalone
-     *     </ul>
-     *   </li>
-     *   <li><tt>Y</tt> (for persistent only) is the resolve state:
-     *     <ul>
-     *       <li>G</li> for <b>G</b>host
-     *       <li>R</li> for <b>R</b>esolved
-     *       <li>r</li> for Part <b>r</b>esolved
-     *       <li>~</li> if not persistent
-     *     </ul>
-     *   </li>
-     *   <li><tt>Z</tt> (for persistent only) is the resolving state:
-     *     <ul>
-     *       <li>R</li> for <b>R</b>esolving
-     *       <li>r</li> for Part <b>r</b>esolving
-     *       <li>~</li> if not persistent
-     *     </ul>
-     *   </li>
-     *   <li><tt>W</tt> (for non-standalone, not resolving, not updating, not destroyed) is the serialization state:
-     *     <ul>
-     *       <li>~</li> not serializing
-     *       <li>S</li> is serializing
-     *     </ul>
-     *   </li>
-     * </ul>
-     */
-    public String code() {
-        return code;
-    }
-
-    public ResolveState getEndState() {
-        return endState;
-    }
-
-    
-    /**
-     * Returns <tt>true</tt> when an object is persistent (except for {@link #VALUE} adapters).
-     * 
-     * <p>
-     * Always returns <tt>false</tt> for {@link #VALUE}.
-     */
-    public boolean isPersistent() {
-        return this.representsPersistent == RepresentsPersistent.REPRESENTS_PERSISTENT;
-    }
-
-    /**
-     * Returns <tt>true</tt> when an object has not yet been made persistent (except for {@link #VALUE} adapters)..
-     * 
-     * <p>
-     * Always returns <tt>false</tt> for {@link #VALUE}.
-     */
-    public boolean isTransient() {
-        return this.representsTransient == REPRESENTS_TRANSIENT; 
-    }
-
-
-    /**
-     * As per {@link #isValidToChangeTo(ResolveState)}, but will
-     * additionally throw a {@link ResolveException} if the
-     * requested state can never be transitioned into, and
-     * will return <tt>false</tt> if the current state can
-     * never be transitioned from.
-     */
-    public boolean canChangeTo(final ResolveState newState) {
-        if (newState.resolvableInto == NOT_RESOLVABLE_INTO) {
-            throw new ResolveException("new state must be resolvable into");
-        }
-        if (this.resolvableFrom == RESOLVABLE_FROM) {
-            return isValidToChangeTo(newState);
-        }
-        return false;
-    }
-
-    /**
-     * @deprecated - renamed to {@link #canChangeTo(ResolveState)}.
-     */
-    @Deprecated()
-    public boolean isResolvable(final ResolveState newState) {
-        return canChangeTo(newState);
-    }
-
-    public boolean isDeserializable(final ResolveState newState) {
-        if (newState == null) {
-            throw new ResolveException("new state must be specified");
-        }
-        if (newState.deserializableInto == NOT_DESERIALIZABLE_INTO) {
-            throw new ResolveException("state must be deserializable into");
-        }
-        if (this.deserializableFrom == DESERIALIZABLE_FROM) {
-            return isValidToChangeTo(newState);
-        }
-        return false;
-    }
-
-
-    /**
-     * Returns false while object is having its field set up.
-     */
-    public boolean respondToChangesInPersistentObjects() {
-        return respondsToChanges == RESPONDS_TO_CHANGES;
-    }
-
-    public boolean isGhost() {
-        return this == GHOST;
-    }
-
-    public boolean isValue() {
-        return this == VALUE;
-    }
-
-    public boolean isNew() {
-        return this == NEW;
-    }
-
-    public boolean isPartlyResolved() {
-        return this == PART_RESOLVED;
-    }
-
-    public boolean isUpdating() {
-        return this == UPDATING;
-    }
-
-    public boolean isDestroyed() {
-        return this == DESTROYED;
-    }
-
-    public boolean isResolved() {
-        return this == RESOLVED;
-    }
-
-    /**
-     * Return true if the state reflects some kind of loading.
-     */
-    public boolean isResolving() {
-        return this.resolving == REPRESENTS_RESOLVING;
-    }
-
-    /**
-     * Returns <tt>true</tt> if an object in this state could
-     * trigger some sort of database loading.
-     * 
-     * <p>
-     * Used to prevent calls to <tt>title()</tt> etc on objects
-     * that are not resolved.
-     * 
-     * @see ResolvePotential
-     */
-    public boolean couldResolve() {
-        return this.resolvePotential == COULD_RESOLVE;
-    }
-    
-    public boolean isSerializing() {
-        return this.serializing == REPRESENTS_SERIALIZING;
-    }
-
-
-    /**
-     * Determines if the resolved state can be changed from this state to the specified state. Returns true if
-     * the change is valid.
-     */
-    public boolean isValidToChangeTo(final ResolveState nextState) {
-        cacheChangeToStatesIfNecessary();
-        return this.changeToStates.contains(nextState);
-    }
-
-    private void cacheChangeToStatesIfNecessary() {
-        if (this.changeToStates == null) {
-            List<ResolveState> nextStates = Arrays.asList(changeToStatesByState.get(this));
-            changeToStates = new HashSet<ResolveState>(nextStates);
-        }
-    }
-
-    public String name() {
-        return name;
-    }
-
-    public ResolveState serializeFrom() {
-        if (this == RESOLVED) {
-            return SERIALIZING_RESOLVED;
-        }
-        if (this == PART_RESOLVED) {
-            return SERIALIZING_PART_RESOLVED;
-        }
-        if (this == GHOST) {
-            return SERIALIZING_GHOST;
-        }
-        if (this == TRANSIENT) {
-            return SERIALIZING_TRANSIENT;
-        } 
-        return null;
-    }
-
-    private transient String cachedToString;
-
-    @Override
-    public String toString() {
-        if (cachedToString == null) {
-            final StringBuffer str = new StringBuffer();
-            str.append("ResolveState [name=");
-            str.append(name);
-            str.append(",code=");
-            str.append(code);
-            if (endState != null) {
-                str.append(",endstate=");
-                str.append(endState.name());
-            }
-            str.append("]");
-            cachedToString = str.toString();
-        }
-        return cachedToString;
-    }
-
-}
+
+public final class ResolveState {
+    private static final Map<String, ResolveState> statesByName = Maps.newHashMap();
+
+    static enum ResolvableFrom {
+        RESOLVABLE_FROM, NOT_RESOLVABLE_FROM
+    }
+
+    static enum ResolvableInto {
+        RESOLVABLE_INTO, NOT_RESOLVABLE_INTO
+    }
+
+    static enum DeserializableFrom {
+        DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_FROM
+    }
+
+    static enum DeserializableInto {
+        DESERIALIZABLE_INTO, NOT_DESERIALIZABLE_INTO
+    }
+
+    static enum RespondsToChanges {
+        RESPONDS_TO_CHANGES, DOES_NOT_RESPOND_TO_CHANGES
+    }
+
+    static enum RepresentsTransient {
+        REPRESENTS_TRANSIENT, DOES_NOT_REPRESENT_TRANSIENT
+    }
+
+    static enum RepresentsPersistent {
+        REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_PERSISTENT
+    }
+
+    static enum Resolving {
+        REPRESENTS_RESOLVING, DOES_NOT_REPRESENT_RESOLVING
+    }
+
+    static enum Serializing {
+        REPRESENTS_SERIALIZING, DOES_NOT_REPRESENT_SERIALIZING
+    }
+
+    /**
+     * Whether or not an object in this state could cause a resolve (database load) to occur if interacted with.
+     */
+    static enum ResolvePotential {
+        COULD_RESOLVE, WILL_NEVER_RESOLVE
+    }
+
+    public static final ResolveState NEW = new ResolveState("New", "N~~~", null, NOT_RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, DOES_NOT_REPRESENT_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, WILL_NEVER_RESOLVE);
+    public static final ResolveState TRANSIENT = new ResolveState("Transient", "T~~~", null, NOT_RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES,
+        REPRESENTS_TRANSIENT, DOES_NOT_REPRESENT_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, WILL_NEVER_RESOLVE);
+    public static final ResolveState GHOST = new ResolveState("Ghost", "PG~~", null, RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, RESPONDS_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, COULD_RESOLVE);
+    public static final ResolveState PART_RESOLVED = new ResolveState("Part Resolved", "Pr~~", null, RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, RESPONDS_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, COULD_RESOLVE);
+    public static final ResolveState RESOLVED = new ResolveState("Resolved", "PR~~", null, RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, RESPONDS_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, WILL_NEVER_RESOLVE);
+    public static final ResolveState RESOLVING = new ResolveState("Resolving", "P~R~", RESOLVED, NOT_RESOLVABLE_FROM,
+        RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, REPRESENTS_RESOLVING, DOES_NOT_REPRESENT_SERIALIZING,
+        COULD_RESOLVE);
+    public static final ResolveState RESOLVING_PART = new ResolveState("Resolving Part", "P~r~", PART_RESOLVED,
+        NOT_RESOLVABLE_FROM, RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO,
+        DOES_NOT_RESPOND_TO_CHANGES, DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, REPRESENTS_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, COULD_RESOLVE);
+    public static final ResolveState SERIALIZING_GHOST = new ResolveState("Serializing Ghost", "PG~S", GHOST,
+        NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
+        DOES_NOT_RESPOND_TO_CHANGES, DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        REPRESENTS_SERIALIZING, COULD_RESOLVE);
+    public static final ResolveState SERIALIZING_PART_RESOLVED = new ResolveState("Serializing Part Resolved", "Pr~S",
+        PART_RESOLVED, NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
+        DOES_NOT_RESPOND_TO_CHANGES, DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        REPRESENTS_SERIALIZING, COULD_RESOLVE);
+    public static final ResolveState SERIALIZING_RESOLVED = new ResolveState("Serializing Resolved", "PR~S", RESOLVED,
+        NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO,
+        DOES_NOT_RESPOND_TO_CHANGES, DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        REPRESENTS_SERIALIZING, WILL_NEVER_RESOLVE);
+    public static final ResolveState SERIALIZING_TRANSIENT = new ResolveState("Serializing Transient", "T~~S",
+        TRANSIENT, NOT_RESOLVABLE_FROM, NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO,
+        DOES_NOT_RESPOND_TO_CHANGES, REPRESENTS_TRANSIENT, DOES_NOT_REPRESENT_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        REPRESENTS_SERIALIZING, WILL_NEVER_RESOLVE);
+    public static final ResolveState UPDATING = new ResolveState("Updating", "PU~~", RESOLVED, NOT_RESOLVABLE_FROM,
+        RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, DESERIALIZABLE_INTO, DOES_NOT_RESPOND_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, REPRESENTS_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, COULD_RESOLVE);
+    public static final ResolveState DESTROYED = new ResolveState("Destroyed", "D~~~", null, NOT_RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, RESPONDS_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, DOES_NOT_REPRESENT_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, WILL_NEVER_RESOLVE);
+    public static final ResolveState VALUE = new ResolveState("Value", "V~~~", null, NOT_RESOLVABLE_FROM,
+        NOT_RESOLVABLE_INTO, NOT_DESERIALIZABLE_FROM, NOT_DESERIALIZABLE_INTO, RESPONDS_TO_CHANGES,
+        DOES_NOT_REPRESENT_TRANSIENT, DOES_NOT_REPRESENT_PERSISTENT, DOES_NOT_REPRESENT_RESOLVING,
+        DOES_NOT_REPRESENT_SERIALIZING, WILL_NEVER_RESOLVE);
+
+    /**
+     * These cannot be passed into the constructor because cannot reference an instance until it has been declared.
+     */
+    public static Map<ResolveState, ResolveState[]> changeToStatesByState =
+        new HashMap<ResolveState, ResolveState[]>() {
+            private static final long serialVersionUID = 1L;
+            {
+                put(GHOST, new ResolveState[] { DESTROYED, RESOLVING_PART, RESOLVING, UPDATING, SERIALIZING_GHOST });
+                put(NEW, new ResolveState[] { TRANSIENT, GHOST, VALUE });
+                put(TRANSIENT, new ResolveState[] { RESOLVED, SERIALIZING_TRANSIENT });
+                put(PART_RESOLVED, new ResolveState[] { RESOLVING_PART, RESOLVING, SERIALIZING_PART_RESOLVED, UPDATING,
+                    DESTROYED });
+                put(RESOLVED, new ResolveState[] { GHOST, SERIALIZING_RESOLVED, UPDATING, DESTROYED });
+                put(RESOLVING, new ResolveState[] { RESOLVED });
+                put(RESOLVING_PART, new ResolveState[] { PART_RESOLVED, RESOLVED });
+                put(SERIALIZING_GHOST, new ResolveState[] { GHOST });
+                put(SERIALIZING_PART_RESOLVED, new ResolveState[] { PART_RESOLVED });
+                put(SERIALIZING_RESOLVED, new ResolveState[] { RESOLVED });
+                put(SERIALIZING_TRANSIENT, new ResolveState[] { TRANSIENT });
+                put(UPDATING, new ResolveState[] { RESOLVED });
+                put(DESTROYED, new ResolveState[] {});
+                put(VALUE, new ResolveState[] {});
+            }
+        };
+
+    private final String code;
+    private final ResolveState endState;
+    private final String name;
+    private final ResolvableFrom resolvableFrom;
+    private final ResolvableInto resolvableInto;
+    private final DeserializableFrom deserializableFrom;
+    private final DeserializableInto deserializableInto;
+    private final RespondsToChanges respondsToChanges;
+    private final RepresentsTransient representsTransient;
+    private final RepresentsPersistent representsPersistent;
+    private final Resolving resolving;
+    private final Serializing serializing;
+    private final ResolvePotential resolvePotential;
+    private HashSet<ResolveState> changeToStates;
+
+    public static ResolveState getResolveState(final String name) {
+        return statesByName.get(name);
+    }
+
+    private ResolveState(final String name, final String code, final ResolveState endState,
+        final ResolvableFrom resolvableFrom, final ResolvableInto resolvableInto,
+        final DeserializableFrom deserializableFrom, final DeserializableInto deserializableInto,
+        final RespondsToChanges respondsToChanges, final RepresentsTransient representsTransient,
+        final RepresentsPersistent representsPersistent, final Resolving resolving, final Serializing serializing,
+        final ResolvePotential resolvePotential) {
+        this.name = name;
+        this.code = code;
+        this.endState = endState;
+        this.resolvableFrom = resolvableFrom;
+        this.resolvableInto = resolvableInto;
+        this.deserializableFrom = deserializableFrom;
+        this.deserializableInto = deserializableInto;
+        this.respondsToChanges = respondsToChanges;
+        this.representsTransient = representsTransient;
+        this.representsPersistent = representsPersistent;
+        this.resolving = resolving;
+        this.serializing = serializing;
+        this.resolvePotential = resolvePotential;
+        statesByName.put(name, this);
+    }
+
+    /**
+     * Four character representation of the state.
+     * 
+     * <p>
+     * The format is <tt>XYZW</tt> where:
+     * <ul>
+     * <li><tt>X</tt> is transient state:
+     * <ul>
+     * <li>N</li> for <b>N</b>ew
+     * <li>T</li> for <b>T</b>ransient
+     * <li>P</li> for <b>P</b>ersistent
+     * <li>D</li> for <b>D</b>estroyed
+     * <li>A</li> for st<b>A</b>ndalone
+     * </ul>
+     * </li>
+     * <li><tt>Y</tt> (for persistent only) is the resolve state:
+     * <ul>
+     * <li>G</li> for <b>G</b>host
+     * <li>R</li> for <b>R</b>esolved
+     * <li>r</li> for Part <b>r</b>esolved
+     * <li>~</li> if not persistent
+     * </ul>
+     * </li>
+     * <li><tt>Z</tt> (for persistent only) is the resolving state:
+     * <ul>
+     * <li>R</li> for <b>R</b>esolving
+     * <li>r</li> for Part <b>r</b>esolving
+     * <li>~</li> if not persistent
+     * </ul>
+     * </li>
+     * <li><tt>W</tt> (for non-standalone, not resolving, not updating, not destroyed) is the serialization state:
+     * <ul>
+     * <li>~</li> not serializing
+     * <li>S</li> is serializing
+     * </ul>
+     * </li>
+     * </ul>
+     */
+    public String code() {
+        return code;
+    }
+
+    public ResolveState getEndState() {
+        return endState;
+    }
+
+    /**
+     * Returns <tt>true</tt> when an object is persistent (except for {@link #VALUE} adapters).
+     * 
+     * <p>
+     * Always returns <tt>false</tt> for {@link #VALUE}.
+     */
+    public boolean isPersistent() {
+        return this.representsPersistent == RepresentsPersistent.REPRESENTS_PERSISTENT;
+    }
+
+    /**
+     * Returns <tt>true</tt> when an object has not yet been made persistent (except for {@link #VALUE} adapters)..
+     * 
+     * <p>
+     * Always returns <tt>false</tt> for {@link #VALUE}.
+     */
+    public boolean isTransient() {
+        return this.representsTransient == REPRESENTS_TRANSIENT;
+    }
+
+    /**
+     * As per {@link #isValidToChangeTo(ResolveState)}, but will additionally throw a {@link ResolveException} if the
+     * requested state can never be transitioned into, and will return <tt>false</tt> if the current state can never be
+     * transitioned from.
+     */
+    public boolean canChangeTo(final ResolveState newState) {
+        if (newState.resolvableInto == NOT_RESOLVABLE_INTO) {
+            throw new ResolveException("new state must be resolvable into");
+        }
+        if (this.resolvableFrom == RESOLVABLE_FROM) {
+            return isValidToChangeTo(newState);
+        }
+        return false;
+    }
+
+    /**
+     * @deprecated - renamed to {@link #canChangeTo(ResolveState)}.
+     */
+    @Deprecated()
+    public boolean isResolvable(final ResolveState newState) {
+        return canChangeTo(newState);
+    }
+
+    public boolean isDeserializable(final ResolveState newState) {
+        if (newState == null) {
+            throw new ResolveException("new state must be specified");
+        }
+        if (newState.deserializableInto == NOT_DESERIALIZABLE_INTO) {
+            throw new ResolveException("state must be deserializable into");
+        }
+        if (this.deserializableFrom == DESERIALIZABLE_FROM) {
+            return isValidToChangeTo(newState);
+        }
+        return false;
+    }
+
+    /**
+     * Returns false while object is having its field set up.
+     */
+    public boolean respondToChangesInPersistentObjects() {
+        return respondsToChanges == RESPONDS_TO_CHANGES;
+    }
+
+    public boolean isGhost() {
+        return this == GHOST;
+    }
+
+    public boolean isValue() {
+        return this == VALUE;
+    }
+
+    public boolean isNew() {
+        return this == NEW;
+    }
+
+    public boolean isPartlyResolved() {
+        return this == PART_RESOLVED;
+    }
+
+    public boolean isUpdating() {
+        return this == UPDATING;
+    }
+
+    public boolean isDestroyed() {
+        return this == DESTROYED;
+    }
+
+    public boolean isResolved() {
+        return this == RESOLVED;
+    }
+
+    /**
+     * Return true if the state reflects some kind of loading.
+     */
+    public boolean isResolving() {
+        return this.resolving == REPRESENTS_RESOLVING;
+    }
+
+    /**
+     * Returns <tt>true</tt> if an object in this state could trigger some sort of database loading.
+     * 
+     * <p>
+     * Used to prevent calls to <tt>title()</tt> etc on objects that are not resolved.
+     * 
+     * @see ResolvePotential
+     */
+    public boolean couldResolve() {
+        return this.resolvePotential == COULD_RESOLVE;
+    }
+
+    public boolean isSerializing() {
+        return this.serializing == REPRESENTS_SERIALIZING;
+    }
+
+    /**
+     * Determines if the resolved state can be changed from this state to the specified state. Returns true if the
+     * change is valid.
+     */
+    public boolean isValidToChangeTo(final ResolveState nextState) {
+        cacheChangeToStatesIfNecessary();
+        return this.changeToStates.contains(nextState);
+    }
+
+    private void cacheChangeToStatesIfNecessary() {
+        if (this.changeToStates == null) {
+            final List<ResolveState> nextStates = Arrays.asList(changeToStatesByState.get(this));
+            changeToStates = new HashSet<ResolveState>(nextStates);
+        }
+    }
+
+    public String name() {
+        return name;
+    }
+
+    public ResolveState serializeFrom() {
+        if (this == RESOLVED) {
+            return SERIALIZING_RESOLVED;
+        }
+        if (this == PART_RESOLVED) {
+            return SERIALIZING_PART_RESOLVED;
+        }
+        if (this == GHOST) {
+            return SERIALIZING_GHOST;
+        }
+        if (this == TRANSIENT) {
+            return SERIALIZING_TRANSIENT;
+        }
+        return null;
+    }
+
+    private transient String cachedToString;
+
+    @Override
+    public String toString() {
+        if (cachedToString == null) {
+            final StringBuffer str = new StringBuffer();
+            str.append("ResolveState [name=");
+            str.append(name);
+            str.append(",code=");
+            str.append(code);
+            if (endState != null) {
+                str.append(",endstate=");
+                str.append(endState.name());
+            }
+            str.append("]");
+            cachedToString = str.toString();
+        }
+        return cachedToString;
+    }
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProvider.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProvider.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProvider.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProvider.java Tue Apr 26 18:24:05 2011
@@ -20,7 +20,6 @@ import java.util.List;
 
 import org.apache.isis.core.commons.components.Injectable;
 
-
 public interface ServicesProvider extends Injectable {
 
     /**

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAbstract.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAbstract.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAbstract.java Tue Apr 26 18:24:05 2011
@@ -16,13 +16,12 @@
  */
 package org.apache.isis.core.metamodel.adapter;
 
-
 public abstract class ServicesProviderAbstract implements ServicesProvider {
 
     @Override
-    public void injectInto(Object candidate) {
+    public void injectInto(final Object candidate) {
         if (ServicesProviderAware.class.isAssignableFrom(candidate.getClass())) {
-            ServicesProviderAware cast = ServicesProviderAware.class.cast(candidate);
+            final ServicesProviderAware cast = ServicesProviderAware.class.cast(candidate);
             cast.setServicesProvider(this);
         }
     }

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAware.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAware.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAware.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ServicesProviderAware.java Tue Apr 26 18:24:05 2011
@@ -17,11 +17,10 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter;
 
-package org.apache.isis.core.metamodel.adapter;
-
-public interface ServicesProviderAware {
-	
-	public void setServicesProvider(final ServicesProvider servicesProvider);
-
-}
+public interface ServicesProviderAware {
+
+    public void setServicesProvider(final ServicesProvider servicesProvider);
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMap.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMap.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMap.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMap.java Tue Apr 26 18:24:05 2011
@@ -25,31 +25,29 @@ import org.apache.isis.core.metamodel.sp
 
 public interface AdapterMap extends Injectable {
 
-
     /**
      * Gets the {@link ObjectAdapter adapter} for the specified domain object if it exists in the identity map.
      * 
      * <p>
      * Provided by the <tt>AdapterManager</tt> when used by framework.
      * 
-     * @param pojo - must not be <tt>null</tt>
+     * @param pojo
+     *            - must not be <tt>null</tt>
      * @return adapter, or <tt>null</tt> if doesn't exist.
      */
     ObjectAdapter getAdapterFor(Object pojo);
 
     /**
-     * Either returns an existing adapter (as per {@link #getAdapterFor(Object)}), otherwise creates either a
-     * transient root or a standalone {@link ObjectAdapter adapter} for the supplied domain object, depending on
-     * its {@link ObjectSpecification}.
+     * Either returns an existing adapter (as per {@link #getAdapterFor(Object)}), otherwise creates either a transient
+     * root or a standalone {@link ObjectAdapter adapter} for the supplied domain object, depending on its
+     * {@link ObjectSpecification}.
      * 
      * <p>
-     * The rules for creating a {@link ResolveState#VALUE standalone} vs {@link ResolveState#TRANSIENT
-     * transient} root {@link ObjectAdapter adapter} are as for
-     * {@link #adapterFor(Object, ObjectAdapter, IdentifiedHolder)}.
+     * The rules for creating a {@link ResolveState#VALUE standalone} vs {@link ResolveState#TRANSIENT transient} root
+     * {@link ObjectAdapter adapter} are as for {@link #adapterFor(Object, ObjectAdapter, IdentifiedHolder)}.
      * 
      * <p>
-     * Historical notes: previously called <tt>createAdapterForTransient</tt>, though this name wasn't quite
-     * right.
+     * Historical notes: previously called <tt>createAdapterForTransient</tt>, though this name wasn't quite right.
      * 
      * <p>
      * Provided by the <tt>AdapterManager</tt> when used by framework.
@@ -57,9 +55,8 @@ public interface AdapterMap extends Inje
     ObjectAdapter adapterFor(Object domainObject);
 
     /**
-     * Either returns an existing adapter (as per {@link #getAdapterFor(Object)}), otherwise creates either a
-     * aggregated {@link ObjectAdapter adapter} for the supplied domain object, depending on
-     * its {@link ObjectSpecification}.
+     * Either returns an existing adapter (as per {@link #getAdapterFor(Object)}), otherwise creates either a aggregated
+     * {@link ObjectAdapter adapter} for the supplied domain object, depending on its {@link ObjectSpecification}.
      * 
      * <p>
      * Provided by the <tt>AdapterManager</tt> when used by framework.
@@ -67,23 +64,22 @@ public interface AdapterMap extends Inje
     ObjectAdapter adapterForAggregated(Object domainObject, ObjectAdapter parent);
 
     /**
-     * Either returns an existing adapter (as per {@link #getAdapterFor(Object)}), otherwise creates either a
-     * transient, standalone or aggregated {@link ObjectAdapter adapter} for the supplied domain object,
-     * depending on its {@link ObjectSpecification} and the context arguments provided.
+     * Either returns an existing adapter (as per {@link #getAdapterFor(Object)}), otherwise creates either a transient,
+     * standalone or aggregated {@link ObjectAdapter adapter} for the supplied domain object, depending on its
+     * {@link ObjectSpecification} and the context arguments provided.
      * 
      * <p>
-     * If no adapter is found for the provided pojo, then the rules for creating the {@link ObjectAdapter
-     * adapter} are as follows:
+     * If no adapter is found for the provided pojo, then the rules for creating the {@link ObjectAdapter adapter} are
+     * as follows:
      * <ul>
-     * <li>if the pojo's {@link ObjectSpecification specification} indicates that this is an immutable
-     * value, then a {@link ResolveState#VALUE} {@link ObjectAdapter adapter} is created
-     * <li>otherwise, if context <tt>ownerAdapter</tt> and <tt>identified</tt> arguments have both been
-     * provided and also either the {@link IdentifiedHolder} argument indicates that for this particular
-     * property/collection the object is aggregated <i>or</i> that the pojo's own
-     * {@link ObjectSpecification specification} indicates that the pojo is intrinsically aggregated,
-     * then an {@link ObjectAdapter#isAggregated() aggregated} adapter is created. Note that the
-     * {@link ResolveState} of such {@link ObjectAdapter's} is independent of its <tt>ownerAdapter</tt>, but it
-     * has the same {@link ObjectAdapter#setOptimisticLock(Version) optimistic locking version}.
+     * <li>if the pojo's {@link ObjectSpecification specification} indicates that this is an immutable value, then a
+     * {@link ResolveState#VALUE} {@link ObjectAdapter adapter} is created
+     * <li>otherwise, if context <tt>ownerAdapter</tt> and <tt>identified</tt> arguments have both been provided and
+     * also either the {@link IdentifiedHolder} argument indicates that for this particular property/collection the
+     * object is aggregated <i>or</i> that the pojo's own {@link ObjectSpecification specification} indicates that the
+     * pojo is intrinsically aggregated, then an {@link ObjectAdapter#isAggregated() aggregated} adapter is created.
+     * Note that the {@link ResolveState} of such {@link ObjectAdapter's} is independent of its <tt>ownerAdapter</tt>,
+     * but it has the same {@link ObjectAdapter#setOptimisticLock(Version) optimistic locking version}.
      * <li>otherwise, a {@link ResolveState#TRANSIENT} {@link ObjectAdapter adapter} is created.
      * </ul>
      * 
@@ -97,6 +93,7 @@ public interface AdapterMap extends Inje
      * @param identifier
      *            - only used if aggregated
      */
-    public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter, IdentifiedHolder identifiedHolder);
+    public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter,
+        IdentifiedHolder identifiedHolder);
 
 }

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAbstract.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAbstract.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAbstract.java Tue Apr 26 18:24:05 2011
@@ -16,15 +16,12 @@
  */
 package org.apache.isis.core.metamodel.adapter.map;
 
-
-
-
 public abstract class AdapterMapAbstract implements AdapterMap {
 
     @Override
-    public void injectInto(Object candidate) {
+    public void injectInto(final Object candidate) {
         if (AdapterMapAware.class.isAssignableFrom(candidate.getClass())) {
-            AdapterMapAware cast = AdapterMapAware.class.cast(candidate);
+            final AdapterMapAware cast = AdapterMapAware.class.cast(candidate);
             cast.setAdapterMap(this);
         }
     }

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAware.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAware.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAware.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapAware.java Tue Apr 26 18:24:05 2011
@@ -17,12 +17,10 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.map;
 
-package org.apache.isis.core.metamodel.adapter.map;
+public interface AdapterMapAware {
 
-
-public interface AdapterMapAware {
-	
-	public void setAdapterMap(final AdapterMap adapterManager);
-
-}
+    public void setAdapterMap(final AdapterMap adapterManager);
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapDelegator.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapDelegator.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapDelegator.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/map/AdapterMapDelegator.java Tue Apr 26 18:24:05 2011
@@ -26,25 +26,26 @@ import org.apache.isis.core.metamodel.fa
  * Provided to allow subclasses to override specific methods if required.
  */
 public abstract class AdapterMapDelegator extends AdapterMapAbstract {
-    
+
     private final AdapterMap underlying;
-    
+
     public AdapterMapDelegator(final AdapterMap underlying) {
         this.underlying = underlying;
     }
 
     @Override
-    public ObjectAdapter getAdapterFor(Object pojo) {
+    public ObjectAdapter getAdapterFor(final Object pojo) {
         return underlying.getAdapterFor(pojo);
     }
 
     @Override
-    public ObjectAdapter adapterFor(Object domainObject) {
+    public ObjectAdapter adapterFor(final Object domainObject) {
         return underlying.adapterFor(domainObject);
     }
 
     @Override
-    public ObjectAdapter adapterFor(Object pojo, ObjectAdapter ownerAdapter, IdentifiedHolder identifiedHolder) {
+    public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter ownerAdapter,
+        final IdentifiedHolder identifiedHolder) {
         return underlying.adapterFor(pojo, ownerAdapter, identifiedHolder);
     }
 }

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/AggregatedOid.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/AggregatedOid.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/AggregatedOid.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/AggregatedOid.java Tue Apr 26 18:24:05 2011
@@ -17,7 +17,6 @@
  *  under the License.
  */
 
-
 package org.apache.isis.core.metamodel.adapter.oid;
 
 import java.io.IOException;
@@ -28,7 +27,6 @@ import org.apache.isis.core.commons.enco
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.NotYetImplementedException;
 
-
 /**
  * Used as the {@link Oid} for collections, values and <tt>@Aggregated</tt> types.
  */
@@ -38,15 +36,14 @@ public class AggregatedOid implements Oi
 
     private final Oid parentOid;
     private final String id;
-    
+
     private AggregatedOid previous;
 
-	private int cachedHashCode;
+    private int cachedHashCode;
 
-	
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // Constructor, Encodeable
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     public AggregatedOid(final Oid oid, final String id) {
         Assert.assertNotNull("ID required", id);
         this.parentOid = oid;
@@ -54,74 +51,80 @@ public class AggregatedOid implements Oi
         initialized();
     }
 
-    public AggregatedOid(DataInputExtended input) throws IOException {
-    	this.parentOid = input.readEncodable(Oid.class);
-    	this.id = input.readUTF();
-    	initialized();
-    }
-    
-    public void encode(DataOutputExtended output) throws IOException {
-    	output.writeEncodable(parentOid);
+    public AggregatedOid(final DataInputExtended input) throws IOException {
+        this.parentOid = input.readEncodable(Oid.class);
+        this.id = input.readUTF();
+        initialized();
+    }
+
+    @Override
+    public void encode(final DataOutputExtended output) throws IOException {
+        output.writeEncodable(parentOid);
         output.writeUTF(id);
     }
 
-	private void initialized() {
-		cacheState();
-	}
+    private void initialized() {
+        cacheState();
+    }
 
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // Properties
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
 
     public Oid getParentOid() {
         return parentOid;
     }
+
     public String getId() {
         return id;
     }
-        
-    ///////////////////////////////////////////////////////////
+
+    // /////////////////////////////////////////////////////////
     // makePersistent
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
 
+    @Override
     public void makePersistent() {
         this.previous = new AggregatedOid(this.parentOid, this.id);
         cacheState();
     }
-    
-    ///////////////////////////////////////////////////////////
+
+    // /////////////////////////////////////////////////////////
     // Previous
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
 
+    @Override
     public Oid getPrevious() {
         return previous;
     }
 
+    @Override
     public boolean hasPrevious() {
         return false;
     }
 
-    public void clearPrevious() {}
-
+    @Override
+    public void clearPrevious() {
+    }
 
-    
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // Other OID stuff
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
 
+    @Override
     public void copyFrom(final Oid oid) {
         throw new NotYetImplementedException();
     }
 
+    @Override
     public boolean isTransient() {
         return parentOid.isTransient();
     }
 
-    
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // Value semantics
-    ///////////////////////////////////////////////////////////
-    
+    // /////////////////////////////////////////////////////////
+
     @Override
     public boolean equals(final Object other) {
         if (other == this) {
@@ -133,11 +136,11 @@ public class AggregatedOid implements Oi
         if (getClass() != other.getClass()) {
             return false;
         }
-        return equals((AggregatedOid)other);
+        return equals((AggregatedOid) other);
     }
-    
+
     public boolean equals(final AggregatedOid other) {
-        return other.parentOid.equals(parentOid) &&  other.id.equals(id);
+        return other.parentOid.equals(parentOid) && other.id.equals(id);
     }
 
     @Override
@@ -146,24 +149,20 @@ public class AggregatedOid implements Oi
         return cachedHashCode;
     }
 
-	private void cacheState() {
-		int hashCode = 17;
+    private void cacheState() {
+        int hashCode = 17;
         hashCode = 37 * hashCode + parentOid.hashCode();
         hashCode = 37 * hashCode + id.hashCode();
         cachedHashCode = hashCode;
-	}
+    }
 
-    
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // toString
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
 
     @Override
     public String toString() {
         return "AOID[" + parentOid + "," + id + "]";
     }
 
-
-
 }
-

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java Tue Apr 26 18:24:05 2011
@@ -17,20 +17,19 @@
  *  under the License.
  */
 
-
 package org.apache.isis.core.metamodel.adapter.oid;
 
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 
 public interface Oid extends Encodable {
-    
+
     /**
      * Copies the content of the specified oid into this oid.
      * 
      * <p>
-     * After this call the {@link #hashCode()} return by both the specified object and this 
-     * object will be the same, and both objects will be {@link #equals(Object) equal}.
+     * After this call the {@link #hashCode()} return by both the specified object and this object will be the same, and
+     * both objects will be {@link #equals(Object) equal}.
      */
     void copyFrom(Oid oid);
 
@@ -43,17 +42,16 @@ public interface Oid extends Encodable {
     Oid getPrevious();
 
     /**
-     * Returns true if this oid contains a {@link #getPrevious() previous} value, specifically that the {@link Oid} was changed from
-     * transient to persistent.
+     * Returns true if this oid contains a {@link #getPrevious() previous} value, specifically that the {@link Oid} was
+     * changed from transient to persistent.
      * 
      * @see #getPrevious()
      * @see #clearPrevious()
      */
     boolean hasPrevious();
-    
-    
+
     /**
-     * Indicate that the {@link #getPrevious() previous value} has been used to remap the {@link ObjectAdapter adapter} 
+     * Indicate that the {@link #getPrevious() previous value} has been used to remap the {@link ObjectAdapter adapter}
      * and should not been cleared.
      * 
      * @see #getPrevious()

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidStringifier.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidStringifier.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidStringifier.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/OidStringifier.java Tue Apr 26 18:24:05 2011
@@ -17,14 +17,13 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.oid.stringable;
 
-package org.apache.isis.core.metamodel.adapter.oid.stringable;
-
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-
-public interface OidStringifier {
-
-    public String enString(Oid oid);
-
-    public Oid deString(String oidStr);
-}
+
+public interface OidStringifier {
+
+    public String enString(Oid oid);
+
+    public Oid deString(String oidStr);
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/DirectlyStringableOid.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/DirectlyStringableOid.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/DirectlyStringableOid.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/DirectlyStringableOid.java Tue Apr 26 18:24:05 2011
@@ -17,22 +17,20 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.oid.stringable.directly;
 
-package org.apache.isis.core.metamodel.adapter.oid.stringable.directly;
-
 import org.apache.isis.core.commons.encoding.Encodable;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-
-/**
- * An alternative to {@link Encodable}, intended to be used for <tt>Oid</tt>s
- * that can be encoded/decoded from strings.
- * 
- * <p>
- * This is inspired by the DSFA's implementation that uses <tt>CUS|1234567A</tt> as the
- * string representation of their <tt>OStoreOid</tt>, representing a Customer.
- */
-public interface DirectlyStringableOid extends Oid {
-
-	String enString();
-
-}
+
+/**
+ * An alternative to {@link Encodable}, intended to be used for <tt>Oid</tt>s that can be encoded/decoded from strings.
+ * 
+ * <p>
+ * This is inspired by the DSFA's implementation that uses <tt>CUS|1234567A</tt> as the string representation of their
+ * <tt>OStoreOid</tt>, representing a Customer.
+ */
+public interface DirectlyStringableOid extends Oid {
+
+    String enString();
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/OidStringifierDirect.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/OidStringifierDirect.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/OidStringifierDirect.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/directly/OidStringifierDirect.java Tue Apr 26 18:24:05 2011
@@ -17,9 +17,8 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.oid.stringable.directly;
 
-package org.apache.isis.core.metamodel.adapter.oid.stringable.directly;
-
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -31,57 +30,61 @@ import org.apache.isis.core.commons.ensu
 import org.apache.isis.core.commons.lang.JavaClassUtils;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
-
-public class OidStringifierDirect implements OidStringifier {
-
-	private final Class<? extends Oid> oidClass;
-	private final Method deStringMethod;
-
-	public OidStringifierDirect(Class<? extends Oid> oidClass) {
-		Ensure.ensureThatArg(oidClass, is(not(nullValue(Class.class))));
-		
-		this.oidClass = oidClass;
-		try {
-			deStringMethod = oidClass.getMethod("deString", String.class);
-		} catch (SecurityException ex) {
-			throw new IllegalArgumentException("Trying to obtain 'deString(String)' method from  Oid class '" + oidClass.getName() + "'", ex);
-		} catch (NoSuchMethodException ex) {
-			throw new IllegalArgumentException("Trying to obtain 'deString(String)' method from  Oid class '" + oidClass.getName() + "'", ex);
-		}
-		if(!JavaClassUtils.isStatic(deStringMethod)) {
-			throw new IllegalArgumentException("'deString(String)' method for Oid class '" + oidClass.getName() +
-					"' must be static");
-		}
-		if(!JavaClassUtils.isPublic(deStringMethod)) {
-			throw new IllegalArgumentException("'deString(String)' method for Oid class '" + oidClass.getName() +
-			"' must be public");
-		}
-	}
-	
-    public String enString(final Oid oid) {
-    	if (!(oid instanceof DirectlyStringableOid)) {
-    		throw new IllegalArgumentException("Must be DirectlyStringableOid; oid class: " + oid.getClass().getName());
-    	}
-    	DirectlyStringableOid directlyStringableOid = (DirectlyStringableOid) oid;
-    	return directlyStringableOid.enString();
-    }
-
-    public Oid deString(final String oidStr) {
-    	try {
-			return (Oid) deStringMethod.invoke(null, oidStr);
-		} catch (IllegalAccessException ex) {
-			throw new IllegalArgumentException("deString(String) method failed; ", ex);
-		} catch (InvocationTargetException ex) {
-			throw new IllegalArgumentException("deString(String) method failed; ", ex);
-		}
-    }
-
-	public Class<? extends Oid> getOidClass() {
-		return oidClass;
-	}
-	
-	public Method getDestringMethod() {
-		return deStringMethod;
-	}
-
-}
+
+public class OidStringifierDirect implements OidStringifier {
+
+    private final Class<? extends Oid> oidClass;
+    private final Method deStringMethod;
+
+    public OidStringifierDirect(final Class<? extends Oid> oidClass) {
+        Ensure.ensureThatArg(oidClass, is(not(nullValue(Class.class))));
+
+        this.oidClass = oidClass;
+        try {
+            deStringMethod = oidClass.getMethod("deString", String.class);
+        } catch (final SecurityException ex) {
+            throw new IllegalArgumentException("Trying to obtain 'deString(String)' method from  Oid class '"
+                + oidClass.getName() + "'", ex);
+        } catch (final NoSuchMethodException ex) {
+            throw new IllegalArgumentException("Trying to obtain 'deString(String)' method from  Oid class '"
+                + oidClass.getName() + "'", ex);
+        }
+        if (!JavaClassUtils.isStatic(deStringMethod)) {
+            throw new IllegalArgumentException("'deString(String)' method for Oid class '" + oidClass.getName()
+                + "' must be static");
+        }
+        if (!JavaClassUtils.isPublic(deStringMethod)) {
+            throw new IllegalArgumentException("'deString(String)' method for Oid class '" + oidClass.getName()
+                + "' must be public");
+        }
+    }
+
+    @Override
+    public String enString(final Oid oid) {
+        if (!(oid instanceof DirectlyStringableOid)) {
+            throw new IllegalArgumentException("Must be DirectlyStringableOid; oid class: " + oid.getClass().getName());
+        }
+        final DirectlyStringableOid directlyStringableOid = (DirectlyStringableOid) oid;
+        return directlyStringableOid.enString();
+    }
+
+    @Override
+    public Oid deString(final String oidStr) {
+        try {
+            return (Oid) deStringMethod.invoke(null, oidStr);
+        } catch (final IllegalAccessException ex) {
+            throw new IllegalArgumentException("deString(String) method failed; ", ex);
+        } catch (final InvocationTargetException ex) {
+            throw new IllegalArgumentException("deString(String) method failed; ", ex);
+        }
+    }
+
+    public Class<? extends Oid> getOidClass() {
+        return oidClass;
+    }
+
+    public Method getDestringMethod() {
+        return deStringMethod;
+    }
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/hex/OidStringifierHex.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/hex/OidStringifierHex.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/hex/OidStringifierHex.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/stringable/hex/OidStringifierHex.java Tue Apr 26 18:24:05 2011
@@ -17,50 +17,49 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.oid.stringable.hex;
 
-package org.apache.isis.core.metamodel.adapter.oid.stringable.hex;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
 import org.apache.commons.codec.DecoderException;
 import org.apache.commons.codec.binary.Hex;
-
 import org.apache.isis.core.commons.encoding.DataInputStreamExtended;
 import org.apache.isis.core.commons.encoding.DataOutputStreamExtended;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
-
-
-public class OidStringifierHex implements OidStringifier {
-
-    public String enString(final Oid oid) {
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final DataOutputStreamExtended outputImpl = new DataOutputStreamExtended(baos);
-        try {
-			outputImpl.writeEncodable(oid);
-			final byte[] byteArray = baos.toByteArray();
-			return new String(Hex.encodeHex(byteArray));
-		} catch (IOException e) {
-			throw new IsisException("Failed to write object", e);
-		}
-    }
-
-    public Oid deString(final String oidStr) {
-        final char[] oidCharArray = oidStr.toCharArray();
-        byte[] oidBytes;
-        try {
-            oidBytes = Hex.decodeHex(oidCharArray);
-            final ByteArrayInputStream bais = new ByteArrayInputStream(oidBytes);
-            final DataInputStreamExtended inputImpl = new DataInputStreamExtended(bais);
-            return inputImpl.readEncodable(Oid.class);
-        } catch (IOException ex) {
-        	throw new IsisException("Failed to read object", ex);
-		} catch (DecoderException ex) {
-			throw new IsisException("Failed to hex decode object", ex);
-		}
-    }
-
-}
+
+public class OidStringifierHex implements OidStringifier {
+
+    @Override
+    public String enString(final Oid oid) {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        final DataOutputStreamExtended outputImpl = new DataOutputStreamExtended(baos);
+        try {
+            outputImpl.writeEncodable(oid);
+            final byte[] byteArray = baos.toByteArray();
+            return new String(Hex.encodeHex(byteArray));
+        } catch (final IOException e) {
+            throw new IsisException("Failed to write object", e);
+        }
+    }
+
+    @Override
+    public Oid deString(final String oidStr) {
+        final char[] oidCharArray = oidStr.toCharArray();
+        byte[] oidBytes;
+        try {
+            oidBytes = Hex.decodeHex(oidCharArray);
+            final ByteArrayInputStream bais = new ByteArrayInputStream(oidBytes);
+            final DataInputStreamExtended inputImpl = new DataInputStreamExtended(bais);
+            return inputImpl.readEncodable(Oid.class);
+        } catch (final IOException ex) {
+            throw new IsisException("Failed to read object", ex);
+        } catch (final DecoderException ex) {
+            throw new IsisException("Failed to hex decode object", ex);
+        }
+    }
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java Tue Apr 26 18:24:05 2011
@@ -17,37 +17,33 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.util;
 
-package org.apache.isis.core.metamodel.adapter.util;
-
 import java.lang.reflect.Method;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 
-
-public final class AdapterInvokeUtils {
-	
-	private AdapterInvokeUtils() {}
-	
-    public static Object invoke(final Method method, final ObjectAdapter adapter) {
-    	return InvokeUtils.invoke(method, AdapterUtils.unwrap(adapter));
-    }
-
-    public static void invoke(final List<Method> methods, final ObjectAdapter adapter) {
-    	InvokeUtils.invoke(methods, AdapterUtils.unwrap(adapter));
-    }
-
-    public static Object invoke(final Method method, final ObjectAdapter adapter, final ObjectAdapter arg0Adapter) {
-        return InvokeUtils.invoke(method, 
-        		AdapterUtils.unwrap(adapter), 
-        		new Object[] { AdapterUtils.unwrap(arg0Adapter)});
-    }
-
-    public static Object invoke(final Method method, final ObjectAdapter adapter, final ObjectAdapter[] argumentAdapters) {
-        return InvokeUtils.invoke(method, 
-        		AdapterUtils.unwrap(adapter), 
-        		AdapterUtils.unwrap(argumentAdapters));
-    }
-
-}
+public final class AdapterInvokeUtils {
+
+    private AdapterInvokeUtils() {
+    }
+
+    public static Object invoke(final Method method, final ObjectAdapter adapter) {
+        return InvokeUtils.invoke(method, AdapterUtils.unwrap(adapter));
+    }
+
+    public static void invoke(final List<Method> methods, final ObjectAdapter adapter) {
+        InvokeUtils.invoke(methods, AdapterUtils.unwrap(adapter));
+    }
+
+    public static Object invoke(final Method method, final ObjectAdapter adapter, final ObjectAdapter arg0Adapter) {
+        return InvokeUtils.invoke(method, AdapterUtils.unwrap(adapter),
+            new Object[] { AdapterUtils.unwrap(arg0Adapter) });
+    }
+
+    public static Object invoke(final Method method, final ObjectAdapter adapter, final ObjectAdapter[] argumentAdapters) {
+        return InvokeUtils.invoke(method, AdapterUtils.unwrap(adapter), AdapterUtils.unwrap(argumentAdapters));
+    }
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterUtils.java Tue Apr 26 18:24:05 2011
@@ -17,87 +17,82 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.util;
 
-package org.apache.isis.core.metamodel.adapter.util;
-
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-
-
-
-public class AdapterUtils {
-
-    private AdapterUtils() {}
-
-    public static boolean exists(final ObjectAdapter adapter) {
-        return adapter != null && adapter.getObject() != null;
-    }
-
-    public static boolean wrappedEqual(final ObjectAdapter adapter1, final ObjectAdapter adapter2) {
-        final boolean defined1 = exists(adapter1);
-        final boolean defined2 = exists(adapter2);
-        if (defined1 && !defined2) {
-            return false;
-        }
-        if (!defined1 && defined2) {
-            return false;
-        }
-        if (!defined1 && !defined2) {
-            return true;
-        } // both null
-        return adapter1.getObject().equals(adapter2.getObject());
-    }
-
-    public static Object unwrap(final ObjectAdapter adapter) {
-        return adapter != null ? adapter.getObject() : null;
-    }
-
-    public static Object[] unwrap(final ObjectAdapter[] adapters) {
-        if (adapters == null) {
-            return null;
-        }
-        final Object[] unwrappedObjects = new Object[adapters.length];
-        int i = 0;
-        for (final ObjectAdapter adapter : adapters) {
-            unwrappedObjects[i++] = unwrap(adapter);
-        }
-        return unwrappedObjects;
-    }
-
-	@SuppressWarnings("unchecked")
-	public static <T> List<T> unwrap(List<ObjectAdapter> adapters) {
-		List<T> list = new ArrayList<T>();
-		for(ObjectAdapter adapter: adapters) {
-			list.add((T) unwrap(adapter));
-		}
-		return list;
-	}
-
-
-    public static String titleString(final ObjectAdapter adapter) {
-        return adapter != null ? adapter.titleString() : "";
-    }
-
-    public static boolean nullSafeEquals(final Object obj1, final Object obj2) {
-        if (obj1 == null && obj2 == null) {
-            return true;
-        }
-        if (obj1 == null || obj2 == null) {
-            return false;
-        }
-        if (obj1.equals(obj2)) {
-            return true;
-        }
-        if (obj1 instanceof ObjectAdapter && obj2 instanceof ObjectAdapter) {
-            final ObjectAdapter adapterObj1 = (ObjectAdapter) obj1;
-            final ObjectAdapter adapterObj2 = (ObjectAdapter) obj2;
-            return nullSafeEquals(adapterObj1.getObject(), adapterObj2.getObject());
-        }
-        return false;
-    }
-
-    
-}
-
+
+public class AdapterUtils {
+
+    private AdapterUtils() {
+    }
+
+    public static boolean exists(final ObjectAdapter adapter) {
+        return adapter != null && adapter.getObject() != null;
+    }
+
+    public static boolean wrappedEqual(final ObjectAdapter adapter1, final ObjectAdapter adapter2) {
+        final boolean defined1 = exists(adapter1);
+        final boolean defined2 = exists(adapter2);
+        if (defined1 && !defined2) {
+            return false;
+        }
+        if (!defined1 && defined2) {
+            return false;
+        }
+        if (!defined1 && !defined2) {
+            return true;
+        } // both null
+        return adapter1.getObject().equals(adapter2.getObject());
+    }
+
+    public static Object unwrap(final ObjectAdapter adapter) {
+        return adapter != null ? adapter.getObject() : null;
+    }
+
+    public static Object[] unwrap(final ObjectAdapter[] adapters) {
+        if (adapters == null) {
+            return null;
+        }
+        final Object[] unwrappedObjects = new Object[adapters.length];
+        int i = 0;
+        for (final ObjectAdapter adapter : adapters) {
+            unwrappedObjects[i++] = unwrap(adapter);
+        }
+        return unwrappedObjects;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> List<T> unwrap(final List<ObjectAdapter> adapters) {
+        final List<T> list = new ArrayList<T>();
+        for (final ObjectAdapter adapter : adapters) {
+            list.add((T) unwrap(adapter));
+        }
+        return list;
+    }
+
+    public static String titleString(final ObjectAdapter adapter) {
+        return adapter != null ? adapter.titleString() : "";
+    }
+
+    public static boolean nullSafeEquals(final Object obj1, final Object obj2) {
+        if (obj1 == null && obj2 == null) {
+            return true;
+        }
+        if (obj1 == null || obj2 == null) {
+            return false;
+        }
+        if (obj1.equals(obj2)) {
+            return true;
+        }
+        if (obj1 instanceof ObjectAdapter && obj2 instanceof ObjectAdapter) {
+            final ObjectAdapter adapterObj1 = (ObjectAdapter) obj1;
+            final ObjectAdapter adapterObj2 = (ObjectAdapter) obj2;
+            return nullSafeEquals(adapterObj1.getObject(), adapterObj2.getObject());
+        }
+        return false;
+    }
+
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/InvokeUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/InvokeUtils.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/InvokeUtils.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/InvokeUtils.java Tue Apr 26 18:24:05 2011
@@ -41,7 +41,7 @@ public class InvokeUtils {
     // //////////////////////////////////////////////////////////////
 
     public static void invoke(final List<Method> methods, final Object object) {
-        for (Method method : methods) {
+        for (final Method method : methods) {
             invoke(method, object);
         }
     }
@@ -83,7 +83,7 @@ public class InvokeUtils {
     public static void invocationException(final String error, final InvocationTargetException e) {
         final Throwable targetException = e.getTargetException();
         if (targetException instanceof ApplicationException) {
-            // an application exception from the domain code is re-thrown as an 
+            // an application exception from the domain code is re-thrown as an
             // IsisException with same semantics
             throw new IsisApplicationException(targetException);
         }

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/NullVersion.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/NullVersion.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/NullVersion.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/NullVersion.java Tue Apr 26 18:24:05 2011
@@ -17,34 +17,37 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.version;
 
-package org.apache.isis.core.metamodel.adapter.version;
-
 import java.util.Date;
 
 import org.apache.isis.core.commons.exceptions.UnexpectedCallException;
-
-
-public class NullVersion implements Version {
-
-	
-    public boolean different(final Version version) {
-        return false;
-    }
-
-    public Version next(final String user, final Date time) {
-        throw new UnexpectedCallException();
-    }
-
-    public String getUser() {
-        return "";
-    }
-
-    public Date getTime() {
-        return new Date();
-    }
-
-    public String sequence() {
-        return "";
-    }
-}
+
+public class NullVersion implements Version {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean different(final Version version) {
+        return false;
+    }
+
+    public Version next(final String user, final Date time) {
+        throw new UnexpectedCallException();
+    }
+
+    @Override
+    public String getUser() {
+        return "";
+    }
+
+    @Override
+    public Date getTime() {
+        return new Date();
+    }
+
+    @Override
+    public String sequence() {
+        return "";
+    }
+}

Modified: incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/SerialNumberVersion.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/SerialNumberVersion.java?rev=1096837&r1=1096836&r2=1096837&view=diff
==============================================================================
--- incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/SerialNumberVersion.java (original)
+++ incubator/isis/trunk/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/version/SerialNumberVersion.java Tue Apr 26 18:24:05 2011
@@ -17,91 +17,90 @@
  *  under the License.
  */
 
+package org.apache.isis.core.metamodel.adapter.version;
 
-package org.apache.isis.core.metamodel.adapter.version;
-
 import java.io.IOException;
 import java.util.Date;
 
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.lang.ToString;
-
-
-public class SerialNumberVersion extends VersionUserAndTimeAbstract {
-	
-    private static final long serialVersionUID = 1L;
-    private final long versionNumber;
-
-    public SerialNumberVersion(final long number, final String user, final Date time) {
-        super(user, time);
-        this.versionNumber = number;
-        initialized();
-    }
-
-    public SerialNumberVersion(final DataInputExtended input) throws IOException {
-        super(input);
-        this.versionNumber = input.readLong();
-        initialized();
-    }
-
-    @Override
-    public void encode(final DataOutputExtended output) throws IOException {
-    	super.encode(output);
-        output.writeLong(versionNumber);
-    }
-
-	private void initialized() {
-		// nothing to do
-	}
-
-    /////////////////////////////////////////////////////////
-    //
-    /////////////////////////////////////////////////////////
-
-    public long getSequence() {
-        return versionNumber;
-    }
-
-    public String sequence() {
-        return Long.toString(versionNumber, 16);
-    }
-
-    // don't think is used
-//    @Override
-//    protected VersionAbstract next() {
-//        return new SerialNumberVersion(versionNumber + 1, null, null);
-//    }
-
-    public boolean different(final Version version) {
-        if (version instanceof SerialNumberVersion) {
-            final SerialNumberVersion other = (SerialNumberVersion) version;
-            return versionNumber != other.versionNumber;
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (obj == this) {
-            return true;
-        } else if (obj instanceof SerialNumberVersion) {
-            return !different((SerialNumberVersion) obj);
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return (int) (versionNumber ^ (versionNumber >>> 32));
-    }
-
-    @Override
-    public String toString() {
-        return "SerialNumberVersion#" + versionNumber + " " + ToString.timestamp(getTime());
-    }
-
-
-}
+
+public class SerialNumberVersion extends VersionUserAndTimeAbstract {
+
+    private static final long serialVersionUID = 1L;
+    private final long versionNumber;
+
+    public SerialNumberVersion(final long number, final String user, final Date time) {
+        super(user, time);
+        this.versionNumber = number;
+        initialized();
+    }
+
+    public SerialNumberVersion(final DataInputExtended input) throws IOException {
+        super(input);
+        this.versionNumber = input.readLong();
+        initialized();
+    }
+
+    @Override
+    public void encode(final DataOutputExtended output) throws IOException {
+        super.encode(output);
+        output.writeLong(versionNumber);
+    }
+
+    private void initialized() {
+        // nothing to do
+    }
+
+    // ///////////////////////////////////////////////////////
+    //
+    // ///////////////////////////////////////////////////////
+
+    public long getSequence() {
+        return versionNumber;
+    }
+
+    @Override
+    public String sequence() {
+        return Long.toString(versionNumber, 16);
+    }
+
+    // don't think is used
+    // @Override
+    // protected VersionAbstract next() {
+    // return new SerialNumberVersion(versionNumber + 1, null, null);
+    // }
+
+    @Override
+    public boolean different(final Version version) {
+        if (version instanceof SerialNumberVersion) {
+            final SerialNumberVersion other = (SerialNumberVersion) version;
+            return versionNumber != other.versionNumber;
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (obj == this) {
+            return true;
+        } else if (obj instanceof SerialNumberVersion) {
+            return !different((SerialNumberVersion) obj);
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        return (int) (versionNumber ^ (versionNumber >>> 32));
+    }
+
+    @Override
+    public String toString() {
+        return "SerialNumberVersion#" + versionNumber + " " + ToString.timestamp(getTime());
+    }
+
+}