You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/07/04 14:09:02 UTC
svn commit: r674024 - in /jackrabbit/trunk/jackrabbit-spi-commons/src:
main/java/org/apache/jackrabbit/spi/commons/identifier/
test/java/org/apache/jackrabbit/spi/commons/identifier/
Author: mreutegg
Date: Fri Jul 4 05:09:02 2008
New Revision: 674024
URL: http://svn.apache.org/viewvc?rev=674024&view=rev
Log:
JCR-1653: NodeIdImpl is not really serializable
Added:
jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/
jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/SerializationTest.java (with props)
jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/TestAll.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java?rev=674024&r1=674023&r2=674024&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java Fri Jul 4 05:09:02 2008
@@ -45,7 +45,7 @@
*/
public NodeId createNodeId(NodeId parentId, Path path) {
try {
- return new NodeIdImpl(parentId, path);
+ return new NodeIdImpl(parentId, path, getPathFactory());
} catch (RepositoryException e) {
throw new IllegalArgumentException(e.getMessage());
}
@@ -73,14 +73,15 @@
*/
public PropertyId createPropertyId(NodeId parentId, Name propertyName) {
try {
- return new PropertyIdImpl(parentId, propertyName);
+ return new PropertyIdImpl(parentId, propertyName, getPathFactory());
} catch (RepositoryException e) {
throw new IllegalArgumentException(e.getMessage());
}
}
//------------------------------------------------------< Inner classes >---
- private abstract class ItemIdImpl implements ItemId, Serializable {
+
+ private static abstract class ItemIdImpl implements ItemId, Serializable {
private final String uniqueID;
private final Path path;
@@ -95,16 +96,17 @@
this.path = path;
}
- private ItemIdImpl(NodeId parentId, Name name) throws RepositoryException {
+ private ItemIdImpl(NodeId parentId, Name name, PathFactory factory)
+ throws RepositoryException {
if (parentId == null || name == null) {
throw new IllegalArgumentException("Invalid ItemIdImpl: parentId and name must not be null.");
}
this.uniqueID = parentId.getUniqueID();
Path parentPath = parentId.getPath();
if (parentPath != null) {
- this.path = getPathFactory().create(parentPath, name, true);
+ this.path = factory.create(parentPath, name, true);
} else {
- this.path = getPathFactory().create(name);
+ this.path = factory.create(name);
}
}
@@ -150,7 +152,10 @@
public int hashCode() {
// since the ItemIdImpl is immutable, store the computed hash code value
if (hashCode == 0) {
- hashCode = toString().hashCode();
+ int result = 17;
+ result = 37 * result + (uniqueID != null ? uniqueID.hashCode() : 0);
+ result = 37 * result + (path != null ? path.hashCode() : 0);
+ hashCode = result;
}
return hashCode;
}
@@ -172,7 +177,9 @@
}
}
- private class NodeIdImpl extends ItemIdImpl implements NodeId {
+ private static class NodeIdImpl extends ItemIdImpl implements NodeId {
+
+ private static final long serialVersionUID = -360276648861146631L;
public NodeIdImpl(String uniqueID) {
super(uniqueID, null);
@@ -182,8 +189,9 @@
super(uniqueID, path);
}
- public NodeIdImpl(NodeId parentId, Path path) throws RepositoryException {
- super(parentId.getUniqueID(), (parentId.getPath() != null) ? getPathFactory().create(parentId.getPath(), path, true) : path);
+ public NodeIdImpl(NodeId parentId, Path path, PathFactory factory)
+ throws RepositoryException {
+ super(parentId.getUniqueID(), (parentId.getPath() != null) ? factory.create(parentId.getPath(), path, true) : path);
}
public boolean denotesNode() {
@@ -201,12 +209,15 @@
}
}
- private class PropertyIdImpl extends ItemIdImpl implements PropertyId {
+ private static class PropertyIdImpl extends ItemIdImpl implements PropertyId, Serializable {
+
+ private static final long serialVersionUID = -1953124047770776444L;
private final NodeId parentId;
- private PropertyIdImpl(NodeId parentId, Name name) throws RepositoryException {
- super(parentId, name);
+ private PropertyIdImpl(NodeId parentId, Name name, PathFactory factory)
+ throws RepositoryException {
+ super(parentId, name, factory);
this.parentId = parentId;
}
Added: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/SerializationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/SerializationTest.java?rev=674024&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/SerializationTest.java (added)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/SerializationTest.java Fri Jul 4 05:09:02 2008
@@ -0,0 +1,70 @@
+/*
+ * 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.jackrabbit.spi.commons.identifier;
+
+import junit.framework.TestCase;
+import org.apache.jackrabbit.spi.IdFactory;
+import org.apache.jackrabbit.spi.NodeId;
+import org.apache.jackrabbit.spi.PathFactory;
+import org.apache.jackrabbit.spi.ItemId;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+
+/**
+ * <code>SerializationTest</code> checks that PropertyIds and NodeIds are
+ * serializable.
+ */
+public class SerializationTest extends TestCase {
+
+ private static final IdFactory ID_FACTORY = IdFactoryImpl.getInstance();
+
+ private static final PathFactory PATH_FACTORY = PathFactoryImpl.getInstance();
+
+ private static final Path REL_PATH = PATH_FACTORY.create(NameConstants.JCR_CONTENT);
+
+ private static final NodeId PARENT_ID = ID_FACTORY.createNodeId("unique-id", REL_PATH);
+
+ public void testPropertyId() throws Exception {
+ checkSerializable(ID_FACTORY.createPropertyId(
+ PARENT_ID, NameConstants.JCR_PRIMARYTYPE));
+ }
+
+ public void testNodeId() throws Exception {
+ checkSerializable(ID_FACTORY.createNodeId(PARENT_ID, REL_PATH));
+
+ checkSerializable(ID_FACTORY.createNodeId(PARENT_ID.getUniqueID(), REL_PATH));
+
+ checkSerializable(ID_FACTORY.createNodeId(PARENT_ID.getUniqueID()));
+ }
+
+ private void checkSerializable(ItemId id) throws Exception {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(out);
+ oos.writeObject(id);
+ oos.close();
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ ObjectInputStream ois = new ObjectInputStream(in);
+ ItemId clone = (ItemId) ois.readObject();
+ assertEquals("Deserialized ItemId not equal to original", id, clone);
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/SerializationTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/TestAll.java?rev=674024&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/TestAll.java (added)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/TestAll.java Fri Jul 4 05:09:02 2008
@@ -0,0 +1,42 @@
+/*
+ * 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.jackrabbit.spi.commons.identifier;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.framework.TestCase;
+
+/**
+ * <code>TestAll</code> contains all identifier related test cases.
+ */
+public class TestAll extends TestCase {
+
+ /**
+ * Returns a <code>Test</code> suite that executes all tests inside this
+ * package.
+ *
+ * @return a <code>Test</code> suite that executes all tests inside this
+ * package.
+ */
+ public static Test suite() {
+ TestSuite suite = new TestSuite("identifier tests");
+
+ suite.addTestSuite(SerializationTest.class);
+
+ return suite;
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/identifier/TestAll.java
------------------------------------------------------------------------------
svn:eol-style = native