You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/05/30 08:42:58 UTC

git commit: WICKET-4930 Generified Component and Component.getInputConverter()

Updated Branches:
  refs/heads/generified-component-4930 [created] e4177909d


WICKET-4930 Generified Component and Component.getInputConverter()


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

Branch: refs/heads/generified-component-4930
Commit: e4177909dff8266c57cd2b21eb12bd0f1ed39717
Parents: 26b3d2a
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu May 30 09:42:29 2013 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu May 30 09:42:29 2013 +0300

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/Application.java   |    5 +-
 .../src/main/java/org/apache/wicket/Component.java |   84 +++++++-------
 .../java/org/apache/wicket/MarkupContainer.java    |   16 ++--
 .../main/java/org/apache/wicket/MetaDataKey.java   |    6 +-
 .../src/main/java/org/apache/wicket/Page.java      |    2 +-
 .../src/main/java/org/apache/wicket/Session.java   |    2 +-
 .../wicket/markup/html/WebMarkupContainer.java     |    2 +-
 .../java/org/apache/wicket/model/IWrapModel.java   |    2 +-
 .../apache/wicket/request/cycle/RequestCycle.java  |    4 +-
 .../wicket/util/tester/WicketTesterHelper.java     |    4 +-
 10 files changed, 66 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/Application.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java b/wicket-core/src/main/java/org/apache/wicket/Application.java
index bb39537..49b00cc 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -18,6 +18,7 @@ package org.apache.wicket;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Serializable;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.Collections;
@@ -414,7 +415,7 @@ public abstract class Application implements UnboundListener, IEventSink
 	 * @return The metadata
 	 * @see MetaDataKey
 	 */
-	public final <T> T getMetaData(final MetaDataKey<T> key)
+	public final <T extends Serializable> T getMetaData(final MetaDataKey<T> key)
 	{
 		return key.get(metaData);
 	}
@@ -570,7 +571,7 @@ public abstract class Application implements UnboundListener, IEventSink
 	 * @throws IllegalArgumentException
 	 * @see MetaDataKey
 	 */
-	public final synchronized <T> void setMetaData(final MetaDataKey<T> key, final Object object)
+	public final synchronized <T extends Serializable> void setMetaData(final MetaDataKey<T> key, final T object)
 	{
 		metaData = key.set(metaData, object);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/Component.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java
index 323e495..76240b6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -157,12 +157,12 @@ import org.slf4j.LoggerFactory;
  * implements {@link IModel}) to render a response in an appropriate markup language, such as HTML.
  * In addition, {@link FormComponent}s know how to update their models based on request information,
  * see {@link FormComponent#updateModel()}. Since the IModel interface is a wrapper around another
- * object, a convenience method {@link Component#getDefaultModelObject()} is provided to retrieve
+ * object, a convenience method {@link Component#getModelObject()} is provided to retrieve
  * the object from its IModel wrapper. A further convenience method,
- * {@link Component#getDefaultModelObjectAsString()}, is provided for the very common operation of
+ * {@link Component#getModelObjectAsString()}, is provided for the very common operation of
  * converting the wrapped object to a String. <br>
  * The component's model can be passed in the constructor or set via
- * {@link Component#setDefaultModel(IModel)}. In neither case a model can be created on demand with
+ * {@link Component#setModel(IModel)}. In neither case a model can be created on demand with
  * {@link #initModel()}.<br>
  * Note that a component can have more models besides its default model.</li>
  * <li><b>Behaviors </b>- You can add multiple {@link Behavior}s to any component if you need to
@@ -215,13 +215,13 @@ import org.slf4j.LoggerFactory;
  * @author Juergen Donnerstag
  * @author Igor Vaynberg (ivaynberg)
  */
-public abstract class Component
+public abstract class Component<T>
 	implements
 		IClusterable,
 		IConverterLocator,
 		IRequestableComponent,
 		IHeaderContributor,
-		IHierarchical<Component>,
+		IHierarchical<Component<?>>,
 		IEventSink,
 		IEventSource
 {
@@ -301,7 +301,7 @@ public abstract class Component
 		@Override
 		public boolean compare(Component component, Object b)
 		{
-			final Object a = component.getDefaultModelObject();
+			final Object a = component.getModelObject();
 			if (a == null && b == null)
 			{
 				return true;
@@ -940,7 +940,7 @@ public abstract class Component
 	 * {@link #prepareForRender()} after calling {@link #beforeRender()}, to initialize postponed
 	 * components.
 	 */
-	private static final MetaDataKey<List<Component>> FEEDBACK_LIST = new MetaDataKey<List<Component>>()
+	private static final MetaDataKey<ArrayList<Component>> FEEDBACK_LIST = new MetaDataKey<ArrayList<Component>>()
 	{
 		private static final long serialVersionUID = 1L;
 	};
@@ -956,10 +956,10 @@ public abstract class Component
 		{
 			// this component is a feedback. Feedback must be initialized last, so that
 			// they can collect messages from other components
-			List<Component> feedbacks = getRequestCycle().getMetaData(FEEDBACK_LIST);
+			ArrayList<Component> feedbacks = getRequestCycle().getMetaData(FEEDBACK_LIST);
 			if (feedbacks == null)
 			{
-				feedbacks = new ArrayList<Component>();
+				feedbacks = new ArrayList<>();
 				getRequestCycle().setMetaData(FEEDBACK_LIST, feedbacks);
 			}
 
@@ -1347,9 +1347,9 @@ public abstract class Component
 	/**
 	 * @return Innermost model for this component
 	 */
-	public final IModel<?> getInnermostModel()
+	public final IModel<T> getInnermostModel()
 	{
-		return getInnermostModel(getDefaultModel());
+		return getInnermostModel(getModel());
 	}
 
 	/**
@@ -1563,9 +1563,9 @@ public abstract class Component
 	 * 
 	 * @return meta data entry
 	 */
-	private MetaDataEntry<?>[] getMetaData()
+	private <M extends Serializable> MetaDataEntry<M>[] getMetaData()
 	{
-		MetaDataEntry<?>[] metaData = null;
+		MetaDataEntry<M>[] metaData = null;
 
 		// index where we should expect the entry
 		int index = getFlag(FLAG_MODEL_SET) ? 1 : 0;
@@ -1577,11 +1577,11 @@ public abstract class Component
 			Object object = data_get(index);
 			if (object instanceof MetaDataEntry<?>[])
 			{
-				metaData = (MetaDataEntry<?>[])object;
+				metaData = (MetaDataEntry<M>[])object;
 			}
 			else if (object instanceof MetaDataEntry)
 			{
-				metaData = new MetaDataEntry[] { (MetaDataEntry<?>)object };
+				metaData = new MetaDataEntry[] { (MetaDataEntry<M>)object };
 			}
 		}
 
@@ -1593,9 +1593,9 @@ public abstract class Component
 	 * 
 	 * @return The model
 	 */
-	public final IModel<?> getDefaultModel()
+	public final IModel<T> getModel()
 	{
-		IModel<?> model = getModelImpl();
+		IModel<T> model = getModelImpl();
 		// If model is null
 		if (model == null)
 		{
@@ -1613,9 +1613,9 @@ public abstract class Component
 	 * 
 	 * @return The backing model object
 	 */
-	public final Object getDefaultModelObject()
+	public final T getModelObject()
 	{
-		final IModel<?> model = getDefaultModel();
+		final IModel<T> model = getModel();
 		if (model != null)
 		{
 			try
@@ -1647,9 +1647,9 @@ public abstract class Component
 	 * 
 	 * @return Model object for this component as a string
 	 */
-	public final String getDefaultModelObjectAsString()
+	public final String getModelObjectAsString()
 	{
-		return getDefaultModelObjectAsString(getDefaultModelObject());
+		return getModelObjectAsString(getModelObject());
 	}
 
 	/**
@@ -1667,7 +1667,7 @@ public abstract class Component
 	 * @return The string
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	public final String getDefaultModelObjectAsString(final Object modelObject)
+	public final String getModelObjectAsString(final T modelObject)
 	{
 		if (modelObject != null)
 		{
@@ -2762,7 +2762,7 @@ public abstract class Component
 	 */
 	public final boolean sameInnermostModel(final Component component)
 	{
-		return sameInnermostModel(component.getDefaultModel());
+		return sameInnermostModel(component.getModel());
 	}
 
 	/**
@@ -2770,10 +2770,10 @@ public abstract class Component
 	 *            The model to compare with
 	 * @return True if the given component's model is the same as this component's model.
 	 */
-	public final boolean sameInnermostModel(final IModel<?> model)
+	public final boolean sameInnermostModel(final IModel<T> model)
 	{
 		// Get the two models
-		IModel<?> thisModel = getDefaultModel();
+		IModel<T> thisModel = getModel();
 
 		// If both models are non-null they could be the same
 		if (thisModel != null && model != null)
@@ -2925,7 +2925,7 @@ public abstract class Component
 	 * @throws IllegalArgumentException
 	 * @see MetaDataKey
 	 */
-	public final <M> void setMetaData(final MetaDataKey<M> key, final M object)
+	public final <M extends Serializable> void setMetaData(final MetaDataKey<M> key, final M object)
 	{
 		MetaDataEntry<?>[] old = getMetaData();
 
@@ -2963,19 +2963,19 @@ public abstract class Component
 	 *            The model
 	 * @return This
 	 */
-	public Component setDefaultModel(final IModel<?> model)
+	public Component setModel(final IModel<T> model)
 	{
-		IModel<?> prevModel = getModelImpl();
+		IModel<T> prevModel = getModelImpl();
 		// Detach current model
 		if (prevModel != null)
 		{
 			prevModel.detach();
 		}
 
-		IModel<?> wrappedModel = prevModel;
+		IModel<T> wrappedModel = prevModel;
 		if (prevModel instanceof IWrapModel)
 		{
-			wrappedModel = ((IWrapModel<?>)prevModel).getWrappedModel();
+			wrappedModel = ((IWrapModel<T>)prevModel).getWrappedModel();
 		}
 
 		// Change model
@@ -2992,11 +2992,11 @@ public abstract class Component
 	/**
 	 * @return model
 	 */
-	IModel<?> getModelImpl()
+	IModel<T> getModelImpl()
 	{
 		if (getFlag(FLAG_MODEL_SET))
 		{
-			return (IModel<?>)data_get(0);
+			return (IModel<T>)data_get(0);
 		}
 		return null;
 	}
@@ -3045,9 +3045,9 @@ public abstract class Component
 	 * @return This
 	 */
 	@SuppressWarnings("unchecked")
-	public final Component setDefaultModelObject(final Object object)
+	public final Component setModelObject(final T object)
 	{
-		final IModel<Object> model = (IModel<Object>)getDefaultModel();
+		final IModel<T> model = getModel();
 
 		// Check whether anything can be set at all
 		if (model == null)
@@ -3697,12 +3697,12 @@ public abstract class Component
 	 *            The model
 	 * @return The innermost (most nested) model
 	 */
-	protected final IModel<?> getInnermostModel(final IModel<?> model)
+	protected final IModel<T> getInnermostModel(final IModel<T> model)
 	{
-		IModel<?> nested = model;
+		IModel<T> nested = model;
 		while (nested != null && nested instanceof IWrapModel)
 		{
-			final IModel<?> next = ((IWrapModel<?>)nested).getWrappedModel();
+			final IModel<T> next = ((IWrapModel<T>)nested).getWrappedModel();
 			if (nested == next)
 			{
 				throw new WicketRuntimeException("Model for " + nested + " is self-referential");
@@ -3750,14 +3750,14 @@ public abstract class Component
 	 * 
 	 * @return The model
 	 */
-	protected IModel<?> initModel()
+	protected IModel<T> initModel()
 	{
-		IModel<?> foundModel = null;
+		IModel<T> foundModel = null;
 		// Search parents for CompoundPropertyModel
 		for (Component current = getParent(); current != null; current = current.getParent())
 		{
 			// Get model
-			// Don't call the getModel() that could initialize many inbetween
+			// Don't call the getModel() that could initialize many in between
 			// completely useless models.
 			// IModel model = current.getModel();
 			IModel<?> model = current.getModelImpl();
@@ -3767,10 +3767,10 @@ public abstract class Component
 				model = ((IWrapModel<?>)model).getWrappedModel();
 			}
 
-			if (model instanceof IComponentInheritedModel)
+			if (model instanceof IComponentInheritedModel<?>)
 			{
 				// return the shared inherited
-				foundModel = ((IComponentInheritedModel<?>)model).wrapOnInheritance(this);
+				foundModel = ((IComponentInheritedModel<T>)model).wrapOnInheritance(this);
 				setFlag(FLAG_INHERITABLE_MODEL, true);
 				break;
 			}

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index e4b9b5b..234f926 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -95,7 +95,7 @@ import org.slf4j.LoggerFactory;
  * @author Jonathan Locke
  * 
  */
-public abstract class MarkupContainer extends Component implements Iterable<Component>
+public abstract class MarkupContainer<T> extends Component<T> implements Iterable<Component<?>>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -497,9 +497,9 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
 	 * @return Iterator that iterates through children in the order they were added
 	 */
 	@Override
-	public Iterator<Component> iterator()
+	public Iterator<Component<?>> iterator()
 	{
-		return new Iterator<Component>()
+		return new Iterator<Component<?>>()
 		{
 			int index = 0;
 
@@ -750,13 +750,13 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
 	}
 
 	/**
-	 * @see org.apache.wicket.Component#setDefaultModel(org.apache.wicket.model.IModel)
+	 * @see org.apache.wicket.Component#setModel(org.apache.wicket.model.IModel)
 	 */
 	@Override
-	public MarkupContainer setDefaultModel(final IModel<?> model)
+	public MarkupContainer setModel(final IModel<T> model)
 	{
 		final IModel<?> previous = getModelImpl();
-		super.setDefaultModel(model);
+		super.setModel(model);
 		if (previous instanceof IComponentInheritedModel)
 		{
 			visitChildren(new IVisitor<Component, Void>()
@@ -764,14 +764,14 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
 				@Override
 				public void component(final Component component, final IVisit<Void> visit)
 				{
-					IModel<?> compModel = component.getDefaultModel();
+					IModel<?> compModel = component.getModel();
 					if (compModel instanceof IWrapModel)
 					{
 						compModel = ((IWrapModel<?>)compModel).getWrappedModel();
 					}
 					if (compModel == previous)
 					{
-						component.setDefaultModel(null);
+						component.setModel(null);
 					}
 					else if (compModel == model)
 					{

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java b/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
index 64bb616..819546a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
@@ -17,6 +17,8 @@
 package org.apache.wicket;
 
 
+import java.io.Serializable;
+
 import org.apache.wicket.util.io.IClusterable;
 
 /**
@@ -42,7 +44,7 @@ import org.apache.wicket.util.io.IClusterable;
  * @see Component#getMetaData(MetaDataKey)
  * @see Application#getMetaData(MetaDataKey)
  */
-public abstract class MetaDataKey<T> implements IClusterable
+public abstract class MetaDataKey<T extends Serializable> implements IClusterable
 {
 	private static final long serialVersionUID = 1L;
 
@@ -96,7 +98,7 @@ public abstract class MetaDataKey<T> implements IClusterable
 	 *            The object to set, null to remove
 	 * @return Any new metadata array (if it was reallocated)
 	 */
-	public MetaDataEntry<?>[] set(MetaDataEntry<?>[] metaData, final Object object)
+	public MetaDataEntry<?>[] set(MetaDataEntry<?>[] metaData, final T object)
 	{
 		boolean set = false;
 		if (metaData != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/Page.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java
index 1c811aa..b39fdd2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -669,7 +669,7 @@ public abstract class Page extends MarkupContainer implements IRedirectListener,
 		renderedComponents = null;
 	}
 
-	private boolean hasInvisibleTransparentChild(final MarkupContainer root, final Component self)
+	private boolean hasInvisibleTransparentChild(final MarkupContainer<?> root, final Component<?> self)
 	{
 		for (Component sibling : root)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/Session.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java
index 253ed7d..c8a47dd 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Session.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Session.java
@@ -599,7 +599,7 @@ public abstract class Session implements IClusterable, IEventSink
 	 * @throws IllegalArgumentException
 	 * @see MetaDataKey
 	 */
-	public final synchronized void setMetaData(final MetaDataKey<?> key, final Serializable object)
+	public final synchronized <M extends Serializable> void setMetaData(final MetaDataKey<M> key, final M object)
 	{
 		metaData = key.set(metaData, object);
 		dirty();

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
index 222169a..72ac023 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/WebMarkupContainer.java
@@ -32,7 +32,7 @@ import org.apache.wicket.request.http.WebResponse;
  * @author Juergen Donnerstag
  * 
  */
-public class WebMarkupContainer extends MarkupContainer
+public class WebMarkupContainer<T> extends MarkupContainer<T>
 {
 	private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/model/IWrapModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/IWrapModel.java b/wicket-core/src/main/java/org/apache/wicket/model/IWrapModel.java
index b91bb57..d51a1dd 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/IWrapModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/IWrapModel.java
@@ -37,5 +37,5 @@ public interface IWrapModel<T> extends IModel<T>
 	 * 
 	 * @return The wrapped model
 	 */
-	IModel<?> getWrappedModel();
+	IModel<T> getWrappedModel();
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
index 0a84739..b38a1da 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.request.cycle;
 
+import java.io.Serializable;
+
 import org.apache.wicket.Application;
 import org.apache.wicket.MetaDataEntry;
 import org.apache.wicket.MetaDataKey;
@@ -394,7 +396,7 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	 * @throws IllegalArgumentException
 	 * @see MetaDataKey
 	 */
-	public final <T> void setMetaData(final MetaDataKey<T> key, final T object)
+	public final <T extends Serializable> void setMetaData(final MetaDataKey<T> key, final T object)
 	{
 		metaData = key.set(metaData, object);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4177909/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
index 0fdaa69..caa7db9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
@@ -95,7 +95,7 @@ public class WicketTesterHelper
 					object.type = name;
 					try
 					{
-						object.value = component.getDefaultModelObjectAsString();
+						object.value = component.getModelObjectAsString();
 					}
 					catch (Exception e)
 					{
@@ -194,7 +194,7 @@ public class WicketTesterHelper
 	public static List<AjaxEventBehavior> findAjaxEventBehaviors(Component component, String event)
 	{
 		Args.notEmpty(event, "event");
-		List<AjaxEventBehavior> behaviors = new ArrayList<AjaxEventBehavior>();
+		List<AjaxEventBehavior> behaviors = new ArrayList<>();
 		String[] eventNames = Strings.split(event, ' ');
 		for (String eventName : eventNames)
 		{