You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by eh...@apache.org on 2007/06/08 03:48:44 UTC

svn commit: r545366 - in /incubator/wicket/trunk/jdk-1.4/wicket/src: main/java/org/apache/wicket/MetaDataKey.java test/java/org/apache/wicket/MetaDataTest.java

Author: ehillenius
Date: Thu Jun  7 18:48:43 2007
New Revision: 545366

URL: http://svn.apache.org/viewvc?view=rev&rev=545366
Log:
meta data optimization and unit test

Added:
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/MetaDataTest.java
Modified:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MetaDataKey.java

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MetaDataKey.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MetaDataKey.java?view=diff&rev=545366&r1=545365&r2=545366
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MetaDataKey.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/MetaDataKey.java Thu Jun  7 18:48:43 2007
@@ -33,7 +33,7 @@
 public abstract class MetaDataKey implements IClusterable
 {
 	private static final long serialVersionUID = 1L;
-	
+
 	/** Type of data associated with this key */
 	private Class type;
 
@@ -53,7 +53,7 @@
 	 */
 	public boolean equals(Object obj)
 	{
-		return getClass().isInstance(obj);
+		return obj != null && getClass().isInstance(obj);
 	}
 
 	/**
@@ -81,7 +81,7 @@
 	 * @param metaData
 	 *            The array of metadata
 	 * @param object
-	 *            The object to set
+	 *            The object to set, null to remove
 	 * @return Any new metadata array (if it was reallocated)
 	 */
 	MetaDataEntry[] set(MetaDataEntry[] metaData, final Serializable object)
@@ -95,12 +95,33 @@
 				MetaDataEntry m = metaData[i];
 				if (equals(m.key))
 				{
-					m.object = object;
+					if (object != null)
+					{
+						// set new value
+						m.object = object;
+					}
+					else
+					{
+						// remove value and schrink or null array
+						if (metaData.length > 1)
+						{
+							int l = metaData.length - 1;
+							MetaDataEntry[] newMetaData = new MetaDataEntry[l];
+							System.arraycopy(metaData, 0, newMetaData, 0, i);
+							System.arraycopy(metaData, i + 1, newMetaData, i, l - i);
+							metaData = newMetaData;
+						}
+						else
+						{
+							metaData = null;
+							break;
+						}
+					}
 					set = true;
 				}
 			}
 		}
-		if (!set)
+		if (!set && object != null)
 		{
 			MetaDataEntry m = new MetaDataEntry();
 			m.key = this;
@@ -133,7 +154,7 @@
 	 */
 	void checkType(final Object object)
 	{
-		if (object != null && !type.isAssignableFrom(object.getClass()) )
+		if (object != null && !type.isAssignableFrom(object.getClass()))
 		{
 			throw new IllegalArgumentException("MetaDataKey " + getClass()
 					+ " requires argument of " + type + ", not " + object.getClass());

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/MetaDataTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/MetaDataTest.java?view=auto&rev=545366
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/MetaDataTest.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/MetaDataTest.java Thu Jun  7 18:48:43 2007
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket;
+
+import junit.framework.TestCase;
+
+/**
+ * Some tests for meta data.
+ */
+public class MetaDataTest extends TestCase
+{
+	private static final MetaDataKey KEY1 = new MetaDataKey(String.class)
+	{
+		private static final long serialVersionUID = 1L;
+	};
+
+	private static final MetaDataKey KEY2 = new MetaDataKey(String.class)
+	{
+		private static final long serialVersionUID = 1L;
+	};
+
+	private static final MetaDataKey KEY3 = new MetaDataKey(String.class)
+	{
+		private static final long serialVersionUID = 1L;
+	};
+
+	private static final MetaDataKey KEY4 = new MetaDataKey(String.class)
+	{
+		private static final long serialVersionUID = 1L;
+	};
+
+	/**
+	 * Construct.
+	 */
+	public MetaDataTest()
+	{
+	}
+
+	/**
+	 * Construct.
+	 * 
+	 * @param name
+	 */
+	public MetaDataTest(String name)
+	{
+		super(name);
+	}
+
+	/**
+	 * Test bounds and basic operations.
+	 */
+	public void testMetaDataKey()
+	{
+		MetaDataEntry[] md = KEY1.set(null, "1");
+		assertNotNull(md);
+		assertEquals(1, md.length);
+		md = KEY1.set(md, null);
+		assertNull(md);
+		md = KEY1.set(md, "1");
+		md = KEY2.set(md, "2");
+		md = KEY3.set(md, "3");
+		md = KEY4.set(md, "4");
+		assertEquals(4, md.length);
+		md = KEY3.set(md, null);
+		assertEquals(3, md.length);
+		assertEquals("1", KEY1.get(md));
+		assertEquals("2", KEY2.get(md));
+		assertEquals(null, KEY3.get(md));
+		assertEquals("4", KEY4.get(md));
+		md = KEY4.set(md, null);
+		assertEquals(2, md.length);
+		assertEquals("1", KEY1.get(md));
+		assertEquals("2", KEY2.get(md));
+		assertEquals(null, KEY3.get(md));
+		assertEquals(null, KEY4.get(md));
+		md = KEY1.set(md, null);
+		assertEquals(1, md.length);
+		assertEquals(null, KEY1.get(md));
+		assertEquals("2", KEY2.get(md));
+		assertEquals(null, KEY3.get(md));
+		assertEquals(null, KEY4.get(md));
+		md = KEY2.set(md, null);
+		assertNull(md);
+	}
+}