You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/06/04 16:19:58 UTC

[4/9] wicket git commit: Cleaned up LoadableDetachableModel state tracking

Cleaned up LoadableDetachableModel state tracking

Previous implementation crafted by me was a tad overengineered, and had some
lousy naming. Fixed the naming and removed the unnecessary booleans.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/545d731b
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/545d731b
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/545d731b

Branch: refs/heads/WICKET-5906-7.x
Commit: 545d731b5d7eacedcface86a40e5c762ddaa16df
Parents: 99b2746
Author: Martijn Dashorst <ma...@gmail.com>
Authored: Sat May 30 21:47:59 2015 +0200
Committer: Andrea Del Bene <“adelbene@apache.org”>
Committed: Thu Jun 4 16:19:29 2015 +0200

----------------------------------------------------------------------
 .../wicket/model/LoadableDetachableModel.java   | 57 +++++++-------------
 1 file changed, 18 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/545d731b/wicket-core/src/main/java/org/apache/wicket/model/LoadableDetachableModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/LoadableDetachableModel.java b/wicket-core/src/main/java/org/apache/wicket/model/LoadableDetachableModel.java
index e3a7fc0..16c6271 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/LoadableDetachableModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/LoadableDetachableModel.java
@@ -52,39 +52,16 @@ import org.slf4j.LoggerFactory;
  */
 public abstract class LoadableDetachableModel<T> implements IModel<T>
 {
-	/**
-	 * 
-	 */
+	/** */
 	private static final long serialVersionUID = 1L;
 
 	/** Logger. */
 	private static final Logger log = LoggerFactory.getLogger(LoadableDetachableModel.class);
 
-	private enum AttachingState 
-	{
-		DETACHED(false, false),
-		ATTACHING(true, false), 
-		ATTACHED(true, true);
-
-		private boolean attaching;
-		private boolean attached;
-
-		private AttachingState(boolean attaching, boolean attached)
-		{
-			this.attached = attached;
-			this.attaching = attaching;
-		}
-		
-		public boolean isAttached() 
-		{
-			return attached;
-		}
+	/** Internal state of the LoadableDetachableModel. */
+	private enum InternalState {
+		DETACHED, ATTACHING, ATTACHED;
 
-		public boolean isAttaching() 
-		{
-			return attaching;
-		}
-		
 		@Override
 		public String toString()
 		{
@@ -92,14 +69,15 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 		}
 	}
 
-	/** keeps track of whether this model is attached or detached */
-	private transient AttachingState attached = AttachingState.DETACHED;
+	/** Keeps track of whether this model is attached or detached */
+	private transient InternalState state = InternalState.DETACHED;
 
 	/** temporary, transient object. */
 	private transient T transientModelObject;
 
 	/**
-	 * Construct.
+	 * Default constructor, constructs the model in detached state with no data associated with the
+	 * model.
 	 */
 	public LoadableDetachableModel()
 	{
@@ -107,7 +85,8 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 
 	/**
 	 * This constructor is used if you already have the object retrieved and want to wrap it with a
-	 * detachable model.
+	 * detachable model. Constructs the model in attached state. Calls to {@link #getObject()} will
+	 * return {@code object} until {@link #detach()} is called.
 	 * 
 	 * @param object
 	 *            retrieved instance of the detachable object
@@ -115,7 +94,7 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 	public LoadableDetachableModel(T object)
 	{
 		this.transientModelObject = object;
-		attached = AttachingState.ATTACHED;
+		state = InternalState.ATTACHED;
 	}
 
 	/**
@@ -124,7 +103,7 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 	@Override
 	public void detach()
 	{
-		if (attached == AttachingState.ATTACHED)
+		if (state == InternalState.ATTACHED)
 		{
 			try
 			{
@@ -132,7 +111,7 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 			}
 			finally
 			{
-				attached = AttachingState.DETACHED;
+				state = InternalState.DETACHED;
 				transientModelObject = null;
 
 				log.debug("removed transient object for {}, requestCycle {}", this,
@@ -147,10 +126,10 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 	@Override
 	public final T getObject()
 	{
-		if (attached == AttachingState.DETACHED)
+		if (state == InternalState.DETACHED)
 		{
 			// prevent infinite attachment loops
-			attached = AttachingState.ATTACHING;
+			state = InternalState.ATTACHING;
 
 			transientModelObject = load();
 
@@ -160,7 +139,7 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 					", requestCycle " + RequestCycle.get());
 			}
 
-			attached = AttachingState.ATTACHED;
+			state = InternalState.ATTACHED;
 			onAttach();
 		}
 		return transientModelObject;
@@ -173,7 +152,7 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 	 */
 	public final boolean isAttached()
 	{
-		return attached.isAttached();
+		return state == InternalState.ATTACHED;
 	}
 
 	/**
@@ -225,7 +204,7 @@ public abstract class LoadableDetachableModel<T> implements IModel<T>
 	@Override
 	public void setObject(final T object)
 	{
-		attached = AttachingState.ATTACHED;
+		state = InternalState.ATTACHED;
 		transientModelObject = object;
 	}
 }