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