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());
+ }
+
+}