DNA SVN: r418 - in trunk/extensions/dna-sequencer-java/src: main/java/org/jboss/dna/sequencer/java/metadata and 1 other directories.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2008-08-12 15:26:21 -0400 (Tue, 12 Aug 2008)
New Revision: 418
Modified:
trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java
trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java
trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java
trunk/extensions/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java
Log:
DNA-51 Sequence Java source files
https://jira.jboss.org/jira/browse/DNA-51
Removed unused imports and warning suppression annotations.
Modified: trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
===================================================================
--- trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java 2008-08-12 19:04:03 UTC (rev 417)
+++ trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java 2008-08-12 19:26:21 UTC (rev 418)
@@ -276,12 +276,12 @@
MethodMetadata methodMetadata ) {
Type type = methodDeclaration.getReturnType2();
ReturnType returnType = null;
- if(type.isPrimitiveType()) {
+ if (type.isPrimitiveType()) {
returnType = new ReturnType();
returnType.setName(((PrimitiveType)type).getPrimitiveTypeCode().toString());
methodMetadata.setReturnType(returnType);
}
- if(type.isSimpleType()) {
+ if (type.isSimpleType()) {
returnType = new ReturnType();
returnType.setName(JavaMetadataUtil.getName(((SimpleType)type).getName()));
methodMetadata.setReturnType(returnType);
@@ -375,7 +375,6 @@
* @param fieldDeclaration - the declaration.
* @return fieldMetadata - meta data.
*/
- @SuppressWarnings( "unchecked" )
private FieldMetadata getFieldMetadataFrom( FieldDeclaration fieldDeclaration ) {
if (fieldDeclaration != null && fieldDeclaration.getType() != null && (!fieldDeclaration.fragments().isEmpty())) {
// type
Modified: trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java
===================================================================
--- trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java 2008-08-12 19:04:03 UTC (rev 417)
+++ trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java 2008-08-12 19:26:21 UTC (rev 418)
@@ -24,7 +24,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
-import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.jboss.dna.common.monitor.ProgressMonitor;
import org.jboss.dna.sequencer.java.metadata.AnnotationMetadata;
@@ -40,8 +39,8 @@
import org.jboss.dna.sequencer.java.metadata.ModifierMetadata;
import org.jboss.dna.sequencer.java.metadata.NormalAnnotationMetadata;
import org.jboss.dna.sequencer.java.metadata.PackageMetadata;
-import org.jboss.dna.sequencer.java.metadata.ReferenceFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.PrimitiveFieldMetadata;
+import org.jboss.dna.sequencer.java.metadata.ReferenceFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.SingleImportMetadata;
import org.jboss.dna.sequencer.java.metadata.SingleMemberAnnotationMetadata;
import org.jboss.dna.sequencer.java.metadata.TypeMetadata;
Modified: trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java
===================================================================
--- trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java 2008-08-12 19:04:03 UTC (rev 417)
+++ trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java 2008-08-12 19:26:21 UTC (rev 418)
@@ -21,8 +21,6 @@
*/
package org.jboss.dna.sequencer.java.metadata;
-import java.util.List;
-
/**
*
*/
Modified: trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java
===================================================================
--- trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java 2008-08-12 19:04:03 UTC (rev 417)
+++ trunk/extensions/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java 2008-08-12 19:26:21 UTC (rev 418)
@@ -22,9 +22,7 @@
package org.jboss.dna.sequencer.java.metadata;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
/**
* Exposes meta data of a top level type.
Modified: trunk/extensions/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java
===================================================================
--- trunk/extensions/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java 2008-08-12 19:04:03 UTC (rev 417)
+++ trunk/extensions/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java 2008-08-12 19:26:21 UTC (rev 418)
@@ -33,7 +33,6 @@
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.jboss.dna.sequencer.java.metadata.AnnotationMetadata;
@@ -51,7 +50,6 @@
import org.jboss.dna.sequencer.java.metadata.ReferenceFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.SingleImportMetadata;
import org.jboss.dna.sequencer.java.metadata.TypeMetadata;
-import org.jboss.dna.sequencer.java.metadata.Variable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -223,7 +221,6 @@
assertNotNull(methodTypeMemberMetadata3);
assertThat(methodTypeMemberMetadata3.getName(), is("setI"));
assertTrue(methodTypeMemberMetadata3.getParameters().size() == 1);
-
MethodTypeMemberMetadata methodTypeMemberMetadata4 = (MethodTypeMemberMetadata)methods.get(4);
assertTrue(methodTypeMemberMetadata4.getModifiers().size() == 1);
15 years, 10 months
DNA SVN: r417 - trunk.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2008-08-12 15:04:03 -0400 (Tue, 12 Aug 2008)
New Revision: 417
Removed:
trunk/connectors/
trunk/sequencers/
Log:
DNA-191 Move sequencer, connector, and MIME type detector projects into an 'extensions' folder (under trunk)
https://jira.jboss.org/jira/browse/DNA-191
Removed the now-empty 'sequencers' and 'connectors' directories.
15 years, 10 months
DNA SVN: r416 - in trunk: connectors and 6 other directories.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2008-08-12 15:01:49 -0400 (Tue, 12 Aug 2008)
New Revision: 416
Added:
trunk/extensions/dna-classloader-maven/
trunk/extensions/dna-connector-federation/
trunk/extensions/dna-connector-inmemory/
trunk/extensions/dna-connector-jbosscache/
trunk/extensions/dna-sequencer-cnd/
trunk/extensions/dna-sequencer-esbMessage/
trunk/extensions/dna-sequencer-images/
trunk/extensions/dna-sequencer-java/
trunk/extensions/dna-sequencer-mp3/
trunk/extensions/dna-sequencer-msoffice/
trunk/extensions/dna-sequencer-zip/
Removed:
trunk/connectors/dna-connector-federation/
trunk/connectors/dna-connector-inmemory/
trunk/connectors/dna-connector-jbosscache/
trunk/dna-maven-classloader/
trunk/sequencers/dna-sequencer-cnd/
trunk/sequencers/dna-sequencer-esbMessage/
trunk/sequencers/dna-sequencer-images/
trunk/sequencers/dna-sequencer-java/
trunk/sequencers/dna-sequencer-mp3/
trunk/sequencers/dna-sequencer-msoffice/
trunk/sequencers/dna-sequencer-zip/
Modified:
trunk/dna-integration-tests/pom.xml
trunk/extensions/dna-classloader-maven/pom.xml
trunk/pom.xml
Log:
DNA-191 Move sequencer, connector, and MIME type detector projects into an 'extensions' folder (under trunk)
https://jira.jboss.org/jira/browse/DNA-191
Moved the subprojects into the 'extensions' folder, and verified through a build.
Modified: trunk/dna-integration-tests/pom.xml
===================================================================
--- trunk/dna-integration-tests/pom.xml 2008-08-12 16:50:47 UTC (rev 415)
+++ trunk/dna-integration-tests/pom.xml 2008-08-12 19:01:49 UTC (rev 416)
@@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>org.jboss.dna</groupId>
- <artifactId>dna-maven-classloader</artifactId>
+ <artifactId>dna-classloader-maven</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.dna</groupId>
Copied: trunk/extensions/dna-classloader-maven (from rev 415, trunk/dna-maven-classloader)
Property changes on: trunk/extensions/dna-classloader-maven
___________________________________________________________________
Name: svn:ignore
+ target
Modified: trunk/extensions/dna-classloader-maven/pom.xml
===================================================================
--- trunk/dna-maven-classloader/pom.xml 2008-08-12 16:50:47 UTC (rev 415)
+++ trunk/extensions/dna-classloader-maven/pom.xml 2008-08-12 19:01:49 UTC (rev 416)
@@ -6,7 +6,7 @@
<version>0.2-SNAPSHOT</version>
</parent>
<!-- The groupId and version values are inherited from parent -->
- <artifactId>dna-maven-classloader</artifactId>
+ <artifactId>dna-classloader-maven</artifactId>
<packaging>jar</packaging>
<name>JBoss DNA Maven Classloader</name>
<description>JBoss DNA Maven Classloader</description>
Copied: trunk/extensions/dna-connector-federation (from rev 415, trunk/connectors/dna-connector-federation)
Copied: trunk/extensions/dna-connector-inmemory (from rev 415, trunk/connectors/dna-connector-inmemory)
Copied: trunk/extensions/dna-connector-jbosscache (from rev 415, trunk/connectors/dna-connector-jbosscache)
Copied: trunk/extensions/dna-sequencer-cnd (from rev 415, trunk/sequencers/dna-sequencer-cnd)
Copied: trunk/extensions/dna-sequencer-esbMessage (from rev 415, trunk/sequencers/dna-sequencer-esbMessage)
Copied: trunk/extensions/dna-sequencer-images (from rev 415, trunk/sequencers/dna-sequencer-images)
Property changes on: trunk/extensions/dna-sequencer-images
___________________________________________________________________
Name: svn:ignore
+ target
Copied: trunk/extensions/dna-sequencer-java (from rev 415, trunk/sequencers/dna-sequencer-java)
Copied: trunk/extensions/dna-sequencer-mp3 (from rev 415, trunk/sequencers/dna-sequencer-mp3)
Property changes on: trunk/extensions/dna-sequencer-mp3
___________________________________________________________________
Name: svn:ignore
+ target
Copied: trunk/extensions/dna-sequencer-msoffice (from rev 415, trunk/sequencers/dna-sequencer-msoffice)
Copied: trunk/extensions/dna-sequencer-zip (from rev 415, trunk/sequencers/dna-sequencer-zip)
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2008-08-12 16:50:47 UTC (rev 415)
+++ trunk/pom.xml 2008-08-12 19:01:49 UTC (rev 416)
@@ -97,19 +97,19 @@
<module>dna-spi</module>
<module>dna-repository</module>
<module>dna-jcr</module>
- <module>dna-maven-classloader</module>
- <module>sequencers/dna-sequencer-images</module>
- <module>sequencers/dna-sequencer-mp3</module>
- <!--module>sequencers/dna-sequencer-esbMessage</module-->
- <module>sequencers/dna-sequencer-cnd</module>
- <module>sequencers/dna-sequencer-java</module>
- <module>sequencers/dna-sequencer-msoffice</module>
- <module>sequencers/dna-sequencer-zip</module>
- <module>connectors/dna-connector-federation</module>
- <module>connectors/dna-connector-inmemory</module>
- <module>connectors/dna-connector-jbosscache</module>
- <module>extensions/dna-mimetype-detector-aperture</module>
- <module>dna-integration-tests</module>
+ <module>extensions/dna-classloader-maven</module>
+ <module>extensions/dna-sequencer-images</module>
+ <module>extensions/dna-sequencer-mp3</module>
+ <!--module>extensions/dna-sequencer-esbMessage</module-->
+ <module>extensions/dna-sequencer-cnd</module>
+ <module>extensions/dna-sequencer-java</module>
+ <module>extensions/dna-sequencer-msoffice</module>
+ <module>extensions/dna-sequencer-zip</module>
+ <module>extensions/dna-connector-federation</module>
+ <module>extensions/dna-connector-inmemory</module>
+ <module>extensions/dna-connector-jbosscache</module>
+ <module>extensions/dna-mimetype-detector-aperture</module>
+ <module>dna-integration-tests</module>
</modules>
<properties>
@@ -330,7 +330,7 @@
</dependency>
<dependency>
<groupId>org.jboss.dna</groupId>
- <artifactId>dna-maven-classloader</artifactId>
+ <artifactId>dna-classloader-maven</artifactId>
<version>${dna-version}</version>
</dependency>
<dependency>
@@ -343,13 +343,13 @@
<artifactId>dna-repository</artifactId>
<version>${dna-version}</version>
</dependency>
- <dependency>
- <groupId>org.jboss.dna</groupId>
- <artifactId>dna-jcr</artifactId>
- <version>${dna-version}</version>
- </dependency>
<dependency>
<groupId>org.jboss.dna</groupId>
+ <artifactId>dna-jcr</artifactId>
+ <version>${dna-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.dna</groupId>
<artifactId>dna-connector-federation</artifactId>
<version>${dna-version}</version>
</dependency>
@@ -363,11 +363,11 @@
<artifactId>dna-connector-inmemory</artifactId>
<version>${dna-version}</version>
</dependency>
- <dependency>
- <groupId>org.jboss.dna</groupId>
- <artifactId>dna-mimetype-detector-aperture</artifactId>
- <version>${dna-version}</version>
- </dependency>
+ <dependency>
+ <groupId>org.jboss.dna</groupId>
+ <artifactId>dna-mimetype-detector-aperture</artifactId>
+ <version>${dna-version}</version>
+ </dependency>
<!--
Time and Date
-->
@@ -409,12 +409,12 @@
<version>1.1</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
<!-- Logging (require SLF4J API for compiling, but use Log4J and its SLF4J binding for testing) -->
<dependency>
<groupId>org.slf4j</groupId>
15 years, 10 months
DNA SVN: r415 - trunk/dna-integration-tests/src/test/resources.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2008-08-12 12:50:47 -0400 (Tue, 12 Aug 2008)
New Revision: 415
Modified:
trunk/dna-integration-tests/src/test/resources/jackrabbitDerbyTestRepositoryConfig.xml
Log:
DNA-198 - JackrabbitDerbyStressTest throws exceptions intermittently without failing
http://jira.jboss.com/jira/browse/DNA-198
I couldn't find a way to reliably go away, so I changed the Jackrabbit configuration for this test to not use search indexing. Seems to have worked.
Modified: trunk/dna-integration-tests/src/test/resources/jackrabbitDerbyTestRepositoryConfig.xml
===================================================================
--- trunk/dna-integration-tests/src/test/resources/jackrabbitDerbyTestRepositoryConfig.xml 2008-08-11 20:30:45 UTC (rev 414)
+++ trunk/dna-integration-tests/src/test/resources/jackrabbitDerbyTestRepositoryConfig.xml 2008-08-12 16:50:47 UTC (rev 415)
@@ -78,9 +78,12 @@
Search index and the file system it uses.
class: FQN of class implementing the QueryHandler interface
-->
+ <!-- Turning off the search indexing, which is causing intermittent problems during tests.
+ See https://jira.jboss.org/jira/browse/DNA-198
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
<param name="path" value="${wsp.home}/index"/>
</SearchIndex>
+ -->
</Workspace>
<!--
15 years, 10 months
DNA SVN: r414 - in trunk: connectors/dna-connector-jbosscache/src/test/java/org/jboss/dna/connector/jbosscache and 4 other directories.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2008-08-11 16:30:45 -0400 (Mon, 11 Aug 2008)
New Revision: 414
Modified:
trunk/connectors/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java
trunk/connectors/dna-connector-jbosscache/src/test/java/org/jboss/dna/connector/jbosscache/JBossCacheConnectionTest.java
trunk/connectors/dna-connector-jbosscache/src/test/resources/log4j.properties
trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutor.java
trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/impl/BasicCreateNodeCommand.java
trunk/dna-spi/src/test/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutorTest.java
Log:
DNA-83 - Federate content from JBoss Cache instance(s)
http://jira.jboss.com/jira/browse/DNA-83
Addressed the need to support same-name siblings, which is more difficult to do with JBoss Cache, since children are not kept in any order. The code now maintains for any node in JBoss Cache a Path.Segment[] in a property, which stores it's ordered list of children. This is the most memory-efficient way to do this (that I could think of), since the actual Path.Segment objects should already be stored in the Fqn for each node, and no indexes need be maintained. So the only overhead is that associated with the array (roughly one reference per child). (Another option considered were wrapping the Path.Segment implementation with another implementation of Path.Segment that also stored the index, but this required a reference plus an integer for each child.)
Found a bug in the AbstractCommandExecutor's handling of GetNodeCommand, which resulted in the GetPropertiesCommand and GetChildrenCommand being executed twice.
Modified: trunk/connectors/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java
===================================================================
--- trunk/connectors/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java 2008-08-10 18:43:31 UTC (rev 413)
+++ trunk/connectors/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java 2008-08-11 20:30:45 UTC (rev 414)
@@ -21,6 +21,8 @@
*/
package org.jboss.dna.connector.jbosscache;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -31,6 +33,8 @@
import org.jboss.cache.Cache;
import org.jboss.cache.Fqn;
import org.jboss.cache.Node;
+import org.jboss.dna.common.util.Logger;
+import org.jboss.dna.common.util.StringUtil;
import org.jboss.dna.spi.ExecutionContext;
import org.jboss.dna.spi.cache.CachePolicy;
import org.jboss.dna.spi.connector.RepositoryConnection;
@@ -59,6 +63,8 @@
import org.jboss.dna.spi.graph.commands.executor.CommandExecutor;
/**
+ * The repository connection to a JBoss Cache instance.
+ *
* @author Randall Hauch
*/
public class JBossCacheConnection implements RepositoryConnection {
@@ -173,7 +179,7 @@
return this.uuidPropertyName;
}
- protected Fqn<Path.Segment> getFullyQualifiedName( Path path ) {
+ protected Fqn<?> getFullyQualifiedName( Path path ) {
assert path != null;
return Fqn.fromList(path.getSegmentsList());
}
@@ -184,20 +190,22 @@
* @param pathSegment the segment from which the fully qualified name is to be created
* @return the relative fully-qualified name
*/
- protected Fqn<Path.Segment> getFullyQualifiedName( Path.Segment pathSegment ) {
+ protected Fqn<?> getFullyQualifiedName( Path.Segment pathSegment ) {
assert pathSegment != null;
return Fqn.fromElements(pathSegment);
}
+ @SuppressWarnings( "unchecked" )
protected Path getPath( PathFactory factory,
- Fqn<Path.Segment> fqn ) {
- return factory.create(factory.createRootPath(), fqn.peekElements());
+ Fqn<?> fqn ) {
+ List<Path.Segment> segments = (List<Path.Segment>)fqn.peekElements();
+ return factory.create(factory.createRootPath(), segments);
}
protected Node<Name, Object> getNode( ExecutionContext context,
Path path ) {
// Look up the node with the supplied path ...
- Fqn<Segment> fqn = getFullyQualifiedName(path);
+ Fqn<?> fqn = getFullyQualifiedName(path);
Node<Name, Object> node = cache.getNode(fqn);
if (node == null) {
String nodePath = path.getString(context.getNamespaceRegistry());
@@ -223,12 +231,19 @@
protected int copyNode( Node<Name, Object> original,
Node<Name, Object> newParent,
boolean recursive,
- Name uuidProperty ) {
+ Name uuidProperty,
+ ExecutionContext context ) {
assert original != null;
assert newParent != null;
// Get or create the new node ...
Segment name = (Segment)original.getFqn().getLastElement();
- Node<Name, Object> copy = newParent.addChild(getFullyQualifiedName(name));
+
+ // Update the children to account for same-name siblings.
+ // This not only updates the FQN of the child nodes, but it also sets the property that stores the
+ // the array of Path.Segment for the children (since the cache doesn't maintain order).
+ Path.Segment newSegment = updateChildList(newParent, name.getName(), context, true);
+ Node<Name, Object> copy = newParent.addChild(getFullyQualifiedName(newSegment));
+ assert checkChildren(newParent);
// Copy the properties ...
copy.clearData();
copy.putAll(original.getData());
@@ -240,7 +255,7 @@
if (recursive) {
// Loop over each child and call this method ...
for (Node<Name, Object> child : original.getChildren()) {
- numNodesCopied += copyNode(child, copy, true, uuidProperty);
+ numNodesCopied += copyNode(child, copy, true, uuidProperty, context);
}
}
return numNodesCopied;
@@ -256,90 +271,136 @@
* @param changedName the name that should be compared to the existing node siblings to determine whether the same-name
* sibling indexes should be updated; may not be null
* @param context the execution context; may not be null
+ * @param addChildWithName true if a new child with the supplied name is to be added to the children (but which does not yet
+ * exist in the node's children)
+ * @return the path segment for the new child, or null if <code>addChildWithName</code> was false
*/
- @SuppressWarnings( "unchecked" )
- protected void updateChildList( Node<Name, Object> parent,
- Name changedName,
- ExecutionContext context ) {
+ protected Path.Segment updateChildList( Node<Name, Object> parent,
+ Name changedName,
+ ExecutionContext context,
+ boolean addChildWithName ) {
assert parent != null;
assert changedName != null;
assert context != null;
Set<Node<Name, Object>> children = parent.getChildren();
- final int numChildren = children.size();
- if (numChildren == 0) return;
+ if (children.isEmpty() && !addChildWithName) return null;
+
// Go through the children, looking for any children with the same name as the 'changedName'
List<ChildInfo> childrenWithChangedName = new LinkedList<ChildInfo>();
- Path.Segment[] childSegments = new Path.Segment[children.size()];
+ Path.Segment[] childNames = (Path.Segment[])parent.get(JBossCacheLexicon.CHILD_PATH_SEGMENT_LIST);
int index = 0;
- for (Node<Name, Object> child : children) {
- Path.Segment childSegment = (Path.Segment)child.getFqn().getLastElement();
- Name childName = childSegment.getName();
- if (childName.equals(changedName)) {
- ChildInfo info = new ChildInfo(child.getFqn(), index);
- childrenWithChangedName.add(info);
+ if (childNames != null) {
+ for (Path.Segment childName : childNames) {
+ if (childName.getName().equals(changedName)) {
+ ChildInfo info = new ChildInfo(childName, index);
+ childrenWithChangedName.add(info);
+ }
+ index++;
}
- childSegments[index++] = childSegment;
}
- // Go through the children with the same name as the 'changedName', making sure their indexes are correct ...
+ if (addChildWithName) {
+ // Make room for the new child at the end of the array ...
+ if (childNames == null) {
+ childNames = new Path.Segment[1];
+ } else {
+ int numExisting = childNames.length;
+ Path.Segment[] newChildNames = new Path.Segment[numExisting + 1];
+ System.arraycopy(childNames, 0, newChildNames, 0, numExisting);
+ childNames = newChildNames;
+ }
+
+ // And add a child info for the new node ...
+ ChildInfo info = new ChildInfo(null, index);
+ childrenWithChangedName.add(info);
+ Path.Segment newSegment = context.getValueFactories().getPathFactory().createSegment(changedName);
+ childNames[index++] = newSegment;
+ }
+ assert childNames != null;
+
+ // Now process the children with the same name, which may include a child info for the new node ...
assert childrenWithChangedName.isEmpty() == false;
if (childrenWithChangedName.size() == 1) {
// The child should have no indexes ...
ChildInfo child = childrenWithChangedName.get(0);
- Fqn<Path.Segment> fqn = child.getFqn();
- Path.Segment segment = fqn.getLastElement();
- if (segment.hasIndex()) {
- // Determine the new name and index ...
+ if (child.segment != null && child.segment.hasIndex()) {
+ // The existing child needs to have a new index ..
Path.Segment newSegment = context.getValueFactories().getPathFactory().createSegment(changedName);
// Replace the child with the correct FQN ...
- changeNodeName(parent, fqn, newSegment, context);
+ changeNodeName(parent, child.segment, newSegment, context);
// Change the segment in the child list ...
- childSegments[child.getChildIndex()] = newSegment;
+ childNames[child.childIndex] = newSegment;
}
} else {
// There is more than one child with the same name ...
int i = 0;
for (ChildInfo child : childrenWithChangedName) {
- Fqn<Path.Segment> fqn = child.getFqn();
- Path.Segment childSegment = fqn.getLastElement();
- if (childSegment.getIndex() != i) {
+ if (child.segment != null) {
// Determine the new name and index ...
- Path.Segment newSegment = context.getValueFactories().getPathFactory().createSegment(changedName, i);
+ Path.Segment newSegment = context.getValueFactories().getPathFactory().createSegment(changedName, i + 1);
// Replace the child with the correct FQN ...
- changeNodeName(parent, fqn, newSegment, context);
+ changeNodeName(parent, child.segment, newSegment, context);
// Change the segment in the child list ...
- childSegments[child.getChildIndex()] = newSegment;
+ childNames[child.childIndex] = newSegment;
+ } else {
+ // Determine the new name and index ...
+ Path.Segment newSegment = context.getValueFactories().getPathFactory().createSegment(changedName, i + 1);
+ childNames[child.childIndex] = newSegment;
}
++i;
}
}
+
// Record the list of children as a property on the parent ...
// (Do this last, as it doesn't need to be done if there's an exception in the above logic)
- parent.put(JBossCacheLexicon.CHILD_PATH_SEGMENT_LIST, childSegments); // replaces any existing value
+ Logger.getLogger(getClass()).trace("Updating child list of {0} to: {1}",
+ parent.getFqn(),
+ StringUtil.readableString(childNames));
+ parent.put(JBossCacheLexicon.CHILD_PATH_SEGMENT_LIST, childNames); // replaces any existing value
+
+ if (addChildWithName) {
+ // Return the segment for the new node ...
+ return childNames[childNames.length - 1];
+ }
+ return null;
}
+ protected boolean checkChildren( Node<Name, Object> parent ) {
+ Path.Segment[] childNamesProperty = (Path.Segment[])parent.get(JBossCacheLexicon.CHILD_PATH_SEGMENT_LIST);
+ Set<Object> childNames = parent.getChildrenNames();
+ boolean result = true;
+ if (childNamesProperty.length != childNames.size()) result = false;
+ for (int i = 0; i != childNamesProperty.length; ++i) {
+ if (!childNames.contains(childNamesProperty[i])) result = false;
+ }
+ if (!result) {
+ List<Path.Segment> names = new ArrayList<Path.Segment>();
+ for (Object name : childNames) {
+ names.add((Path.Segment)name);
+ }
+ Collections.sort(names);
+ // Logger.getLogger(getClass()).trace("Child list on {0} is: {1}",
+ // parent.getFqn(),
+ // StringUtil.readableString(childNamesProperty));
+ // Logger.getLogger(getClass()).trace("Children of {0} is: {1}", parent.getFqn(), StringUtil.readableString(names));
+ }
+ return result;
+ }
+
/**
- * Utility class used by the {@link JBossCacheConnection#updateChildList(Node, Name, ExecutionContext)} method.
+ * Utility class used by the {@link JBossCacheConnection#updateChildList(Node, Name, ExecutionContext, boolean)} method.
*
* @author Randall Hauch
*/
private static class ChildInfo {
- private final Fqn<Path.Segment> fqn;
- private final int childIndex;
+ protected final Path.Segment segment;
+ protected final int childIndex;
- protected ChildInfo( Fqn<Path.Segment> fqn,
+ protected ChildInfo( Path.Segment childSegment,
int childIndex ) {
- assert fqn != null;
- this.fqn = fqn;
+ this.segment = childSegment;
this.childIndex = childIndex;
}
- public int getChildIndex() {
- return childIndex;
- }
-
- public Fqn<Path.Segment> getFqn() {
- return fqn;
- }
}
/**
@@ -351,20 +412,38 @@
* @param context
*/
protected void changeNodeName( Node<Name, Object> parent,
- Fqn<Path.Segment> existing,
+ Path.Segment existing,
Path.Segment newSegment,
ExecutionContext context ) {
assert parent != null;
assert existing != null;
assert newSegment != null;
assert context != null;
+
+ if (existing.equals(newSegment)) return;
+ Logger.getLogger(getClass()).trace("Renaming {0} to {1} under {2}", existing, newSegment, parent.getFqn());
+ Node<Name, Object> existingChild = parent.getChild(existing);
+ assert existingChild != null;
+
+ // JBoss Cache can move a node from one node to another node, but the move doesn't change the name;
+ // since you provide the FQN of the parent location, the name of the node cannot be changed.
+ // Therefore, to compensate, we need to create a new child, copy all of the data, move all of the child
+ // nodes of the old node, then remove the old node.
+
+ // Create the new node ...
+ Node<Name, Object> newChild = parent.addChild(Fqn.fromElements(newSegment));
+ Fqn<?> newChildFqn = newChild.getFqn();
+
+ // Copy the data ...
+ newChild.putAll(existingChild.getData());
+
+ // Move the children ...
+ for (Node<Name, Object> grandChild : existingChild.getChildren()) {
+ cache.move(grandChild.getFqn(), newChildFqn);
+ }
+
+ // Remove the existing ...
parent.removeChild(existing);
- List<Path.Segment> elements = existing.peekElements();
- assert elements.size() > 0;
- elements.set(elements.size() - 1, newSegment);
- existing = Fqn.fromList(elements);
- parent.addChild(existing);
-
}
protected class Executor extends AbstractCommandExecutor {
@@ -383,15 +462,15 @@
public void execute( CreateNodeCommand command ) {
Path path = command.getPath();
Path parent = path.getAncestor();
- Fqn<Segment> childFqn = getFullyQualifiedName(path.getLastSegment());
// Look up the parent node, which must exist ...
Node<Name, Object> parentNode = getNode(parent);
- Node<Name, Object> node = parentNode.addChild(childFqn);
// Update the children to account for same-name siblings.
// This not only updates the FQN of the child nodes, but it also sets the property that stores the
// the array of Path.Segment for the children (since the cache doesn't maintain order).
- updateChildList(parentNode, path.getLastSegment().getName(), getExecutionContext());
+ Path.Segment newSegment = updateChildList(parentNode, path.getLastSegment().getName(), getExecutionContext(), true);
+ Node<Name, Object> node = parentNode.addChild(Fqn.fromElements(newSegment));
+ assert checkChildren(parentNode);
// Add the UUID property (if required), which may be overwritten by a supplied property ...
Name uuidPropertyName = getUuidPropertyName(getExecutionContext());
@@ -412,24 +491,19 @@
}
}
- @SuppressWarnings( "unchecked" )
@Override
public void execute( GetChildrenCommand command ) {
Node<Name, Object> node = getNode(command.getPath());
Name uuidPropertyName = getUuidPropertyName(getExecutionContext());
- List<Path.Segment> segments = node.getFqn().peekElements();
- segments.add(null);
// Get the names of the children, using the child list ...
Path.Segment[] childList = (Path.Segment[])node.get(JBossCacheLexicon.CHILD_PATH_SEGMENT_LIST);
for (Path.Segment child : childList) {
// We have the child segment, but we need the UUID property ...
- segments.set(segments.size() - 1, child); // each iteration sets this last list element ...
- Fqn<Path.Segment> fqn = Fqn.fromList(segments);
- Node<Name, Object> childNode = node.getChild(fqn);
- Object uuid = childNode.getData().get(uuidPropertyName);
+ Node<Name, Object> childNode = node.getChild(child);
+ Object uuid = childNode.get(uuidPropertyName);
if (uuid == null) {
uuid = generateUuid();
- childNode.getData().put(uuidPropertyName, uuid);
+ childNode.put(uuidPropertyName, uuid);
} else {
uuid = uuidFactory.create(uuid);
}
@@ -486,11 +560,7 @@
// Look up the new parent, which must exist ...
Path newPath = command.getNewPath();
Node<Name, Object> newParent = getNode(newPath.getAncestor());
- copyNode(node, newParent, false, null);
- // Update the children to account for same-name siblings.
- // This not only updates the FQN of the child nodes, but it also sets the property that stores the
- // the array of Path.Segment for the children (since the cache doesn't maintain order).
- updateChildList(newParent, newPath.getLastSegment().getName(), getExecutionContext());
+ copyNode(node, newParent, false, null, getExecutionContext());
}
@Override
@@ -499,11 +569,7 @@
// Look up the new parent, which must exist ...
Path newPath = command.getNewPath();
Node<Name, Object> newParent = getNode(newPath.getAncestor());
- copyNode(node, newParent, true, null);
- // Update the children to account for same-name siblings.
- // This not only updates the FQN of the child nodes, but it also sets the property that stores the
- // the array of Path.Segment for the children (since the cache doesn't maintain order).
- updateChildList(newParent, newPath.getLastSegment().getName(), getExecutionContext());
+ copyNode(node, newParent, true, null, getExecutionContext());
}
@Override
@@ -514,11 +580,8 @@
// Look up the new parent, which must exist ...
Path newPath = command.getNewPath();
Node<Name, Object> newParent = getNode(newPath.getAncestor());
- copyNode(node, newParent, recursive, uuidProperty);
- // Update the children to account for same-name siblings.
- // This not only updates the FQN of the child nodes, but it also sets the property that stores the
- // the array of Path.Segment for the children (since the cache doesn't maintain order).
- updateChildList(newParent, newPath.getLastSegment().getName(), getExecutionContext());
+ copyNode(node, newParent, recursive, uuidProperty, getExecutionContext());
+
// Now delete the old node ...
Node<Name, Object> oldParent = node.getParent();
boolean removed = oldParent.removeChild(node.getFqn().getLastElement());
Modified: trunk/connectors/dna-connector-jbosscache/src/test/java/org/jboss/dna/connector/jbosscache/JBossCacheConnectionTest.java
===================================================================
--- trunk/connectors/dna-connector-jbosscache/src/test/java/org/jboss/dna/connector/jbosscache/JBossCacheConnectionTest.java 2008-08-10 18:43:31 UTC (rev 413)
+++ trunk/connectors/dna-connector-jbosscache/src/test/java/org/jboss/dna/connector/jbosscache/JBossCacheConnectionTest.java 2008-08-11 20:30:45 UTC (rev 414)
@@ -45,9 +45,14 @@
import org.jboss.dna.spi.connector.BasicExecutionContext;
import org.jboss.dna.spi.connector.RepositorySourceListener;
import org.jboss.dna.spi.graph.Name;
+import org.jboss.dna.spi.graph.NameFactory;
import org.jboss.dna.spi.graph.Path;
import org.jboss.dna.spi.graph.PathFactory;
import org.jboss.dna.spi.graph.PathNotFoundException;
+import org.jboss.dna.spi.graph.Property;
+import org.jboss.dna.spi.graph.PropertyFactory;
+import org.jboss.dna.spi.graph.commands.impl.BasicCreateNodeCommand;
+import org.jboss.dna.spi.graph.commands.impl.BasicGetNodeCommand;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
@@ -63,6 +68,8 @@
private Cache<Name, Object> cache;
private ExecutionContext context;
private PathFactory pathFactory;
+ private NameFactory nameFactory;
+ private PropertyFactory propertyFactory;
@Mock
private JBossCacheSource source;
@@ -72,9 +79,13 @@
context = new BasicExecutionContext();
context.getNamespaceRegistry().register(DnaLexicon.Namespace.PREFIX, DnaLexicon.Namespace.URI);
pathFactory = context.getValueFactories().getPathFactory();
+ propertyFactory = context.getPropertyFactory();
+ nameFactory = context.getValueFactories().getNameFactory();
cacheFactory = new DefaultCacheFactory<Name, Object>();
cache = cacheFactory.createCache();
connection = new JBossCacheConnection(source, cache);
+ stub(source.getUuidPropertyName()).toReturn(DnaLexicon.UUID.getString(context.getNamespaceRegistry()));
+ stub(source.getName()).toReturn("the source name");
}
@Test( expected = AssertionError.class )
@@ -164,18 +175,18 @@
@Test
public void shouldCreateFullyQualifiedNodeOfPathSegmentsFromPath() {
Path path = pathFactory.create("/a/b/c/d");
- Fqn<Path.Segment> fqn = connection.getFullyQualifiedName(path);
+ Fqn<?> fqn = connection.getFullyQualifiedName(path);
assertThat(fqn.size(), is(4));
assertThat(fqn.isRoot(), is(false));
for (int i = 0; i != path.size(); ++i) {
- assertThat(fqn.get(i), is(path.getSegment(i)));
+ assertThat((Path.Segment)fqn.get(i), is(path.getSegment(i)));
}
}
@Test
public void shouldCreateFullyQualifiedNodeOfPathSegmentsFromRootPath() {
Path path = pathFactory.createRootPath();
- Fqn<Path.Segment> fqn = connection.getFullyQualifiedName(path);
+ Fqn<?> fqn = connection.getFullyQualifiedName(path);
assertThat(fqn.size(), is(0));
assertThat(fqn.isRoot(), is(true));
}
@@ -188,10 +199,10 @@
@Test
public void shouldCreateFullyQualifiedNodeFromPathSegment() {
Path.Segment segment = pathFactory.createSegment("a");
- Fqn<Path.Segment> fqn = connection.getFullyQualifiedName(segment);
+ Fqn<?> fqn = connection.getFullyQualifiedName(segment);
assertThat(fqn.size(), is(1));
assertThat(fqn.isRoot(), is(false));
- assertThat(fqn.get(0), is(segment));
+ assertThat((Path.Segment)fqn.get(0), is(segment));
}
@Test( expected = AssertionError.class )
@@ -202,21 +213,20 @@
@Test
public void shouldCreatePathFromFullyQualifiedNode() {
Path path = pathFactory.create("/a/b/c/d");
- Fqn<Path.Segment> fqn = connection.getFullyQualifiedName(path);
+ Fqn<?> fqn = connection.getFullyQualifiedName(path);
assertThat(connection.getPath(pathFactory, fqn), is(path));
}
@Test
public void shouldCreateRootPathFromRootFullyQualifiedNode() {
Path path = pathFactory.createRootPath();
- Fqn<Path.Segment> fqn = connection.getFullyQualifiedName(path);
+ Fqn<?> fqn = connection.getFullyQualifiedName(path);
assertThat(connection.getPath(pathFactory, fqn), is(path));
}
@Test
public void shouldGetNodeIfItExistsInCache() {
// Set up the cache with data ...
- stub(source.getUuidPropertyName()).toReturn(DnaLexicon.UUID.getString(context.getNamespaceRegistry()));
Name uuidProperty = connection.getUuidPropertyName(context);
Path[] paths = {pathFactory.create("/a"), pathFactory.create("/a/b"), pathFactory.create("/a/b/c")};
Path nonExistantPath = pathFactory.create("/a/d");
@@ -241,7 +251,6 @@
@Test
public void shouldThrowExceptionWithLowestExistingNodeFromGetNodeIfTheNodeDoesNotExist() {
// Set up the cache with data ...
- stub(source.getUuidPropertyName()).toReturn(DnaLexicon.UUID.getString(context.getNamespaceRegistry()));
Name uuidProperty = connection.getUuidPropertyName(context);
Path[] paths = {pathFactory.create("/a"), pathFactory.create("/a/b"), pathFactory.create("/a/b/c")};
Path nonExistantPath = pathFactory.create("/a/d");
@@ -268,7 +277,6 @@
@Test
public void shouldCopyNode() {
// Set up the cache with data ...
- stub(source.getUuidPropertyName()).toReturn(DnaLexicon.UUID.getString(context.getNamespaceRegistry()));
Name uuidProperty = connection.getUuidPropertyName(context);
Path[] paths = {pathFactory.create("/a"), pathFactory.create("/a/b"), pathFactory.create("/a/b/c"),
pathFactory.create("/a/d")};
@@ -297,7 +305,7 @@
assertThat(newNodeB, is(nullValue()));
assertThat(newNodeC, is(nullValue()));
// Copy node B and place under node D
- assertThat(connection.copyNode(nodeB, nodeD, true, uuidProperty), is(2));
+ assertThat(connection.copyNode(nodeB, nodeD, true, uuidProperty, context), is(2));
newNodeB = cache.getNode(Fqn.fromList(newPathB.getSegmentsList()));
newNodeC = cache.getNode(Fqn.fromList(newPathC.getSegmentsList()));
assertThat(newNodeB, is(notNullValue()));
@@ -307,4 +315,74 @@
assertThat(newNodeC.get(uuidProperty), is(not(nodeC.get(uuidProperty))));
}
+ @Test
+ public void shouldCreateSameNameSiblingsAndAutomaticallyManageSiblingIndexes() throws Exception {
+ // Set up the cache with some data, using different execute calls ...
+ Property prop1 = propertyFactory.create(nameFactory.create("dna:prop1"), "value1");
+ Property prop2 = propertyFactory.create(nameFactory.create("dna:prop2"), "value1");
+ Path pathA = pathFactory.create("/a");
+ BasicCreateNodeCommand createNode = new BasicCreateNodeCommand(pathA);
+ createNode.setProperties(prop1, prop2);
+ connection.execute(context, createNode);
+
+ for (int i = 0; i != 20; ++i) {
+ createNode = new BasicCreateNodeCommand(pathFactory.create("/a/b"));
+ createNode.setProperties(prop1, prop2);
+ connection.execute(context, createNode);
+ }
+
+ // Get the name that we'll use in later assertions ...
+ Name nameB = pathFactory.createSegment("b").getName();
+ assertThat(nameB.getLocalName(), is("b"));
+
+ // Now verify the content ...
+ BasicGetNodeCommand getNode = new BasicGetNodeCommand(pathA);
+ connection.execute(context, getNode);
+ int index = 1;
+ for (Path.Segment segment : getNode.getChildren()) {
+ assertThat(segment.getName(), is(nameB));
+ assertThat(segment.hasIndex(), is(true));
+ assertThat(segment.getIndex(), is(index));
+ ++index;
+ }
+ }
+
+ @Test
+ public void shouldCreateSameNameSiblingsAndAutomaticallyManageSiblingIndexesInterspersedWithSiblingsWithOtherNames()
+ throws Exception {
+ // Set up the cache with some data, using different execute calls ...
+ Property prop1 = propertyFactory.create(nameFactory.create("dna:prop1"), "value1");
+ Property prop2 = propertyFactory.create(nameFactory.create("dna:prop2"), "value1");
+ Path pathA = pathFactory.create("/a");
+ BasicCreateNodeCommand createNode = new BasicCreateNodeCommand(pathA);
+ createNode.setProperties(prop1, prop2);
+ connection.execute(context, createNode);
+
+ for (int i = 0; i != 20; ++i) {
+ String path = i % 5 == 0 ? "/a/b" : "/a/c" + i;
+ createNode = new BasicCreateNodeCommand(pathFactory.create(path));
+ createNode.setProperties(prop1, prop2);
+ connection.execute(context, createNode);
+ }
+
+ // Get the name that we'll use in later assertions ...
+ Name nameB = pathFactory.createSegment("b").getName();
+ assertThat(nameB.getLocalName(), is("b"));
+
+ // Now verify the content ...
+ BasicGetNodeCommand getNode = new BasicGetNodeCommand(pathA);
+ connection.execute(context, getNode);
+ int index = 1;
+ for (Path.Segment segment : getNode.getChildren()) {
+ if (segment.getName().getLocalName().equals("b")) {
+ assertThat(segment.getName(), is(nameB));
+ assertThat(segment.hasIndex(), is(true));
+ assertThat(segment.getIndex(), is(index));
+ ++index;
+ } else {
+ assertThat(segment.hasIndex(), is(false));
+ }
+ }
+ }
+
}
Modified: trunk/connectors/dna-connector-jbosscache/src/test/resources/log4j.properties
===================================================================
--- trunk/connectors/dna-connector-jbosscache/src/test/resources/log4j.properties 2008-08-10 18:43:31 UTC (rev 413)
+++ trunk/connectors/dna-connector-jbosscache/src/test/resources/log4j.properties 2008-08-11 20:30:45 UTC (rev 414)
@@ -9,6 +9,7 @@
# Set up the default logging to be INFO level, then override specific units
log4j.logger.org.jboss.dna=INFO
+#log4j.logger.org.jboss.dna.connector.jbosscache=TRACE
# JBoss Cache logging
log4j.logger.org.jboss.cache=WARN, stdout
Modified: trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutor.java
===================================================================
--- trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutor.java 2008-08-10 18:43:31 UTC (rev 413)
+++ trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutor.java 2008-08-11 20:30:45 UTC (rev 414)
@@ -121,11 +121,9 @@
// The command could implement multiple "get" behaviors
if (command instanceof GetNodeCommand) {
execute((GetNodeCommand)command);
- }
- if (command instanceof GetPropertiesCommand) {
+ } else if (command instanceof GetPropertiesCommand) {
execute((GetPropertiesCommand)command);
- }
- if (command instanceof GetChildrenCommand) {
+ } else if (command instanceof GetChildrenCommand) {
execute((GetChildrenCommand)command);
}
// The command could record the branch even if deleting or moving ...
Modified: trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/impl/BasicCreateNodeCommand.java
===================================================================
--- trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/impl/BasicCreateNodeCommand.java 2008-08-10 18:43:31 UTC (rev 413)
+++ trunk/dna-spi/src/main/java/org/jboss/dna/spi/graph/commands/impl/BasicCreateNodeCommand.java 2008-08-11 20:30:45 UTC (rev 414)
@@ -22,6 +22,7 @@
package org.jboss.dna.spi.graph.commands.impl;
import java.util.Collection;
+import java.util.LinkedList;
import net.jcip.annotations.NotThreadSafe;
import org.jboss.dna.common.util.StringUtil;
import org.jboss.dna.spi.graph.Path;
@@ -44,6 +45,13 @@
/**
* @param path the path to the node; may not be null
+ */
+ public BasicCreateNodeCommand( Path path ) {
+ this(path, new LinkedList<Property>(), NodeConflictBehavior.UPDATE);
+ }
+
+ /**
+ * @param path the path to the node; may not be null
* @param properties the properties of the node; may not be null
* @param conflictBehavior the desired behavior when a node exists at the <code>path</code>; may not be null
*/
@@ -92,6 +100,18 @@
this.properties.add(property);
}
+ public void setProperties( Property... properties ) {
+ for (Property property : properties) {
+ setProperty(property);
+ }
+ }
+
+ public void setProperties( Iterable<Property> properties ) {
+ for (Property property : properties) {
+ setProperty(property);
+ }
+ }
+
/**
* {@inheritDoc}
*/
Modified: trunk/dna-spi/src/test/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutorTest.java
===================================================================
--- trunk/dna-spi/src/test/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutorTest.java 2008-08-10 18:43:31 UTC (rev 413)
+++ trunk/dna-spi/src/test/java/org/jboss/dna/spi/graph/commands/executor/AbstractCommandExecutorTest.java 2008-08-11 20:30:45 UTC (rev 414)
@@ -121,8 +121,6 @@
verify(validator, times(1)).execute((GraphCommand)null);
verify(validator, times(1)).execute((GraphCommand)createNodeCommand);
verify(validator, times(2)).execute((GraphCommand)getNodeCommand);
- verify(validator, times(2)).execute((GetPropertiesCommand)getNodeCommand);
- verify(validator, times(2)).execute((GetChildrenCommand)getNodeCommand);
verify(validator, times(1)).execute(createNodeCommand);
verify(validator, times(2)).execute(getNodeCommand);
verifyNoMoreInteractions(validator);
@@ -138,8 +136,6 @@
verify(validator, times(1)).execute(command);
verify(validator, times(1)).execute((GraphCommand)createNodeCommand);
verify(validator, times(2)).execute((GraphCommand)getNodeCommand);
- verify(validator, times(2)).execute((GetPropertiesCommand)getNodeCommand);
- verify(validator, times(2)).execute((GetChildrenCommand)getNodeCommand);
verify(validator, times(1)).execute(createNodeCommand);
verify(validator, times(2)).execute(getNodeCommand);
verifyNoMoreInteractions(validator);
@@ -150,8 +146,8 @@
GetNodeCommand getNodeCommand = mock(GetNodeCommand.class);
executor.execute((GraphCommand)getNodeCommand);
verify(validator, times(1)).execute((GraphCommand)getNodeCommand);
- verify(validator, times(1)).execute((GetPropertiesCommand)getNodeCommand);
- verify(validator, times(1)).execute((GetChildrenCommand)getNodeCommand);
+ verify(validator, times(0)).execute((GetPropertiesCommand)getNodeCommand);
+ verify(validator, times(0)).execute((GetChildrenCommand)getNodeCommand);
verify(validator, times(1)).execute(getNodeCommand);
verifyNoMoreInteractions(validator);
}
15 years, 10 months
DNA SVN: r413 - trunk/sequencers/dna-sequencer-java/src/test/workspace/projectX/src/org/acme.
by dna-commits@lists.jboss.org
Author: spagop
Date: 2008-08-10 14:43:31 -0400 (Sun, 10 Aug 2008)
New Revision: 413
Modified:
trunk/sequencers/dna-sequencer-java/src/test/workspace/projectX/src/org/acme/MySource.java
Log:
more new of java spec
Modified: trunk/sequencers/dna-sequencer-java/src/test/workspace/projectX/src/org/acme/MySource.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/test/workspace/projectX/src/org/acme/MySource.java 2008-08-10 18:42:32 UTC (rev 412)
+++ trunk/sequencers/dna-sequencer-java/src/test/workspace/projectX/src/org/acme/MySource.java 2008-08-10 18:43:31 UTC (rev 413)
@@ -31,13 +31,18 @@
public class MySource {
private int i, j;
- private double a;
+ private static double a;
private List<String> l;
- private A<String>.B<Integer> o;
+ private A<Integer> o;
private X x;
- public MySource() {
+ MySource() {
}
+ public MySource(int i, int j) {
+ this.i = i;
+ this.j = j;
+ }
+
public int getI() {
return this.i;
@@ -51,11 +56,12 @@
this.j = j;
}
- public void doSomething() {
+ public void doSomething(int p1, int p2) {
l = new ArrayList<String>();
l.add("N1");
}
+ // nested class
class A<E> {
E e;
15 years, 10 months
DNA SVN: r412 - trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata.
by dna-commits@lists.jboss.org
Author: spagop
Date: 2008-08-10 14:42:32 -0400 (Sun, 10 Aug 2008)
New Revision: 412
Added:
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ModifierMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ReturnType.java
Modified:
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/FieldMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodTypeMemberMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ParameterizedFieldMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/PrimitiveFieldMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/SimpleFieldMetadata.java
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java
Log:
enhance abstract meta data to support modifiers, return type and parameters of methods and more and also test units
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ConstructorMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -21,6 +21,8 @@
*/
package org.jboss.dna.sequencer.java.metadata;
+import java.util.List;
+
/**
*
*/
@@ -38,4 +40,5 @@
public boolean isContructor() {
return true;
}
+
}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/FieldMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/FieldMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/FieldMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -28,9 +28,14 @@
* @author Serge Pagop
*/
public class FieldMetadata {
-
- /** The name */
+
+ /** The type of the field */
+ private String type;
+
+ /** The variables */
private List<Variable> variables = new ArrayList<Variable>();
+
+ private List<ModifierMetadata> modifierMetadatas = new ArrayList<ModifierMetadata>();
/**
* @return variables
@@ -45,4 +50,32 @@
public void setVariables( List<Variable> variables ) {
this.variables = variables;
}
+
+ /**
+ * @return type
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * @param type Sets type to the specified value.
+ */
+ public void setType( String type ) {
+ this.type = type;
+ }
+
+ /**
+ * @return modifierMetadatas
+ */
+ public List<ModifierMetadata> getModifiers() {
+ return modifierMetadatas;
+ }
+
+ /**
+ * @param modifierMetadatas Sets modifierMetadatas to the specified value.
+ */
+ public void setModifiers( List<ModifierMetadata> modifierMetadatas ) {
+ this.modifierMetadatas = modifierMetadatas;
+ }
}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -21,11 +21,24 @@
*/
package org.jboss.dna.sequencer.java.metadata;
+import java.util.ArrayList;
+import java.util.List;
+
/**
- *
+ * MethodMetadata
*/
-public class MethodMetadata {
+public abstract class MethodMetadata {
+
private String name;
+
+ private ReturnType returnType;
+
+ public abstract boolean isContructor();
+
+ private List<ModifierMetadata> modifiers = new ArrayList<ModifierMetadata>();
+
+ private List<FieldMetadata> parameters = new ArrayList<FieldMetadata>();
+
/**
* @return name
*/
@@ -41,9 +54,44 @@
}
/**
- * @return isContructor
+ * @return modifiers
*/
- public boolean isContructor() {
- return false;
- }
+ public List<ModifierMetadata> getModifiers() {
+ return modifiers;
+ }
+
+ /**
+ * @param modifiers Sets modifiers to the specified value.
+ */
+ public void setModifiers( List<ModifierMetadata> modifiers ) {
+ this.modifiers = modifiers;
+ }
+
+ /**
+ * @return parameters
+ */
+ public List<FieldMetadata> getParameters() {
+ return parameters;
+ }
+
+ /**
+ * @param parameters Sets parameters to the specified value.
+ */
+ public void setParameters( List<FieldMetadata> parameters ) {
+ this.parameters = parameters;
+ }
+
+ /**
+ * @return returnType
+ */
+ public ReturnType getReturnType() {
+ return returnType;
+ }
+
+ /**
+ * @param returnType Sets returnType to the specified value.
+ */
+ public void setReturnType( ReturnType returnType ) {
+ this.returnType = returnType;
+ }
}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodTypeMemberMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodTypeMemberMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/MethodTypeMemberMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -26,4 +26,14 @@
*/
public class MethodTypeMemberMetadata extends MethodMetadata {
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.dna.sequencer.java.metadata.MethodMetadata#isContructor()
+ */
+ @Override
+ public boolean isContructor() {
+ return false;
+ }
+
}
Added: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ModifierMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ModifierMetadata.java (rev 0)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ModifierMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -0,0 +1,29 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dna.sequencer.java.metadata;
+
+/**
+ *
+ */
+public class ModifierMetadata extends AnnotationMetadata {
+
+}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ParameterizedFieldMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ParameterizedFieldMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ParameterizedFieldMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -25,22 +25,7 @@
/**
* Field meta data for parameterized type.
*/
-public class ParameterizedFieldMetadata extends FieldMetadata {
+public class ParameterizedFieldMetadata extends ReferenceFieldMetadata {
- private String name;
- /**
- * @param name
- */
- public void setName( String name ) {
- this.name = name;
- }
-
- /**
- * @return name
- */
- public String getName() {
- return name;
- }
-
}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/PrimitiveFieldMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/PrimitiveFieldMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/PrimitiveFieldMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -26,21 +26,4 @@
*/
public class PrimitiveFieldMetadata extends FieldMetadata {
- /** The code */
- private String code;
-
- /**
- * @return code
- */
- public String getCode() {
- return code;
- }
-
- /**
- * @param code Sets code to the specified value.
- */
- public void setCode( String code ) {
- this.code = code;
- }
-
}
Added: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ReturnType.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ReturnType.java (rev 0)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/ReturnType.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dna.sequencer.java.metadata;
+
+/**
+ *
+ */
+public class ReturnType {
+ private String name;
+
+ /**
+ * @return name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name Sets name to the specified value.
+ */
+ public void setName( String name ) {
+ this.name = name;
+ }
+}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/SimpleFieldMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/SimpleFieldMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/SimpleFieldMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -24,22 +24,6 @@
/**
* field meta data for simple type.
*/
-public class SimpleFieldMetadata extends FieldMetadata {
+public class SimpleFieldMetadata extends ReferenceFieldMetadata {
- private String name;
-
- /**
- * @param name
- */
- public void setName( String name ) {
- this.name = name;
- }
-
- /**
- * @return name
- */
- public String getName() {
- return name;
- }
-
}
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java 2008-08-10 18:41:55 UTC (rev 411)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/metadata/TypeMetadata.java 2008-08-10 18:42:32 UTC (rev 412)
@@ -39,7 +39,7 @@
private String name;
/** All modifiers of a top level type */
- private Map<Integer, String> modifiers = new HashMap<Integer, String>();
+ private List<ModifierMetadata> modifiers = new ArrayList<ModifierMetadata>();
/** All annotations of a top level type */
private List<AnnotationMetadata> annotations = new ArrayList<AnnotationMetadata>();
@@ -86,14 +86,14 @@
*
* @return modifiers
*/
- public Map<Integer, String> getModifiers() {
+ public List<ModifierMetadata> getModifiers() {
return modifiers;
}
/**
* @param modifiers Sets modifiers to the specified value.
*/
- public void setModifiers( Map<Integer, String> modifiers ) {
+ public void setModifiers( List<ModifierMetadata> modifiers ) {
this.modifiers = modifiers;
}
15 years, 10 months
DNA SVN: r411 - trunk/sequencers/dna-sequencer-java/src/main/resources/org/jboss/dna/sequencer/java.
by dna-commits@lists.jboss.org
Author: spagop
Date: 2008-08-10 14:41:55 -0400 (Sun, 10 Aug 2008)
New Revision: 411
Modified:
trunk/sequencers/dna-sequencer-java/src/main/resources/org/jboss/dna/sequencer/java/java-source-artifact.cnd
Log:
modifier as child node of a class declaration
Modified: trunk/sequencers/dna-sequencer-java/src/main/resources/org/jboss/dna/sequencer/java/java-source-artifact.cnd
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/resources/org/jboss/dna/sequencer/java/java-source-artifact.cnd 2008-08-10 18:40:47 UTC (rev 410)
+++ trunk/sequencers/dna-sequencer-java/src/main/resources/org/jboss/dna/sequencer/java/java-source-artifact.cnd 2008-08-10 18:41:55 UTC (rev 411)
@@ -191,6 +191,9 @@
[java:importDeclaration] > nt:unstructured
+ java:singleImport (java:singleTypeImportDeclaration) = java:singleTypeImportDeclaration
+ java:importOnDemand (java:typeImportOnDemandDeclaration) = java:typeImportOnDemandDeclaration
+
+ [java:modifierDeclaration] > nt:unstructured
+ - java:name (string) mandatory
/**
* Class declaration
@@ -200,10 +203,7 @@
*/
[java:normalClassDeclaration] > nt:unstructured
- java:description (string)
- - java:modifier (string)
- < 'public'
- - java:declaredAs (string)
- < 'abstract', 'final'
+ + java:modifier (java:modifierDeclaration) = java:modifierDeclaration
- java:name (string) mandatory
+ java:field (java:fieldType) = java:fieldType multiple
+ java:method (java:methodDeclaration) = java:methodDeclaration multiple
15 years, 10 months
DNA SVN: r410 - trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java.
by dna-commits@lists.jboss.org
Author: spagop
Date: 2008-08-10 14:40:47 -0400 (Sun, 10 Aug 2008)
New Revision: 410
Modified:
trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataSequencerTest.java
trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java
Log:
enhance abstract meta data to support modifiers, return type and parameters of methods and more and also test units
Modified: trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataSequencerTest.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataSequencerTest.java 2008-08-10 18:39:35 UTC (rev 409)
+++ trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataSequencerTest.java 2008-08-10 18:40:47 UTC (rev 410)
@@ -104,8 +104,8 @@
is(new Object[] {"java.util"}));
// sequence class definition
- assertThat(output.getPropertyValues("java:compilationUnit/java:unitType/java:classDeclaration/java:normalClass/java:normalClassDeclaration",
- "java:modifier"),
+ assertThat(output.getPropertyValues("java:compilationUnit/java:unitType/java:classDeclaration/java:normalClass/java:normalClassDeclaration/java:modifier/java:modifierDeclaration[1]",
+ "java:name"),
is(new Object[] {"public"}));
assertThat(output.getPropertyValues("java:compilationUnit/java:unitType/java:classDeclaration/java:normalClass/java:normalClassDeclaration",
"java:name"),
Modified: trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java 2008-08-10 18:39:35 UTC (rev 409)
+++ trunk/sequencers/dna-sequencer-java/src/test/java/org/jboss/dna/sequencer/java/JavaMetadataTest.java 2008-08-10 18:40:47 UTC (rev 410)
@@ -23,6 +23,7 @@
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNull.notNullValue;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -46,11 +47,11 @@
import org.jboss.dna.sequencer.java.metadata.MethodMetadata;
import org.jboss.dna.sequencer.java.metadata.MethodTypeMemberMetadata;
import org.jboss.dna.sequencer.java.metadata.PackageMetadata;
-import org.jboss.dna.sequencer.java.metadata.ParameterizedFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.PrimitiveFieldMetadata;
-import org.jboss.dna.sequencer.java.metadata.SimpleFieldMetadata;
+import org.jboss.dna.sequencer.java.metadata.ReferenceFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.SingleImportMetadata;
import org.jboss.dna.sequencer.java.metadata.TypeMetadata;
+import org.jboss.dna.sequencer.java.metadata.Variable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -138,18 +139,15 @@
public void shouldCreateTopLevelTypeMetadata() throws Exception {
List<TypeMetadata> data = javaMetadata.createTypeMetadata((CompilationUnit)rootNode);
assertTrue(data.size() > 0);
-
for (TypeMetadata typeMetadata : data) {
// meta data of a top level class
if (typeMetadata instanceof ClassMetadata) {
ClassMetadata classMetadata = (ClassMetadata)typeMetadata;
assertThat(classMetadata.getName(), is("MySource"));
// modifiers of the top level class
- Map<Integer, String> modifiers = classMetadata.getModifiers();
- assertNotNull(modifiers);
- assertTrue(!modifiers.isEmpty());
- assertThat(modifiers.get(ClassMetadata.PUBLIC_MODIFIER), is("public"));
-
+ assertNotNull(classMetadata.getModifiers());
+ assertTrue(!classMetadata.getModifiers().isEmpty());
+ assertThat(classMetadata.getModifiers().get(0).getName(), is("public"));
// annotations of the top level class
List<AnnotationMetadata> annotations = classMetadata.getAnnotations();
for (AnnotationMetadata annotationMetadata : annotations) {
@@ -159,54 +157,87 @@
assertThat(marker.getName(), is("MyClassAnnotation"));
}
}
-
// get fields
List<FieldMetadata> fields = classMetadata.getFields();
assertNotNull(fields);
assertTrue(fields.size() == 5);
PrimitiveFieldMetadata primitiveFieldMetadata = (PrimitiveFieldMetadata)fields.get(0);
- assertThat(primitiveFieldMetadata.getCode(), is("int"));
+ assertTrue(primitiveFieldMetadata.getModifiers().size() == 1);
+ assertThat(primitiveFieldMetadata.getType(), is("int"));
assertThat(primitiveFieldMetadata.getVariables().get(0).getName(), is("i"));
assertThat(primitiveFieldMetadata.getVariables().get(1).getName(), is("j"));
- ParameterizedFieldMetadata parameterizedFieldMetadata1 = (ParameterizedFieldMetadata)fields.get(2);
+ PrimitiveFieldMetadata primitiveFieldMetadata2 = (PrimitiveFieldMetadata)fields.get(1);
+ assertTrue(primitiveFieldMetadata2.getModifiers().size() == 2);
+ assertThat(primitiveFieldMetadata2.getType(), is("double"));
+ assertThat(primitiveFieldMetadata2.getVariables().get(0).getName(), is("a"));
+
+ ReferenceFieldMetadata parameterizedFieldMetadata1 = (ReferenceFieldMetadata)fields.get(2);
assertNotNull(parameterizedFieldMetadata1);
- assertThat(parameterizedFieldMetadata1.getName(), is("List"));
+ assertTrue(parameterizedFieldMetadata1.getModifiers().size() == 1);
+ assertThat(parameterizedFieldMetadata1.getType(), is("List"));
assertThat(parameterizedFieldMetadata1.getVariables().get(0).getName(), is("l"));
- ParameterizedFieldMetadata parameterizedFieldMetadata2 = (ParameterizedFieldMetadata)fields.get(3);
+ ReferenceFieldMetadata parameterizedFieldMetadata2 = (ReferenceFieldMetadata)fields.get(3);
assertNotNull(parameterizedFieldMetadata2);
- assertThat(parameterizedFieldMetadata2.getName(), is("B"));
+ assertTrue(parameterizedFieldMetadata2.getModifiers().size() == 1);
+ assertThat(parameterizedFieldMetadata2.getType(), is("A"));
assertThat(parameterizedFieldMetadata2.getVariables().get(0).getName(), is("o"));
- SimpleFieldMetadata simpleFieldMetadata = (SimpleFieldMetadata)fields.get(4);
+ ReferenceFieldMetadata simpleFieldMetadata = (ReferenceFieldMetadata)fields.get(4);
assertNotNull(simpleFieldMetadata);
- assertThat(simpleFieldMetadata.getName(), is("X"));
+ assertTrue(simpleFieldMetadata.getModifiers().size() == 1);
+ assertThat(simpleFieldMetadata.getType(), is("X"));
assertThat(simpleFieldMetadata.getVariables().get(0).getName(), is("x"));
// get methods
List<MethodMetadata> methods = classMetadata.getMethods();
assertNotNull(methods);
- assertTrue(methods.size() == 5);
+ assertTrue(methods.size() == 6);
MethodMetadata methodMetadata = methods.get(0);
- assertTrue(methodMetadata.isContructor());
ConstructorMetadata constructorMetadata = (ConstructorMetadata)methodMetadata;
assertNotNull(constructorMetadata);
+ assertTrue(constructorMetadata.getModifiers().size() == 0);
assertThat(constructorMetadata.getName(), is("MySource"));
+ assertTrue(constructorMetadata.getParameters().size() == 0);
- MethodTypeMemberMetadata methodTypeMemberMetadata1 = (MethodTypeMemberMetadata)methods.get(1);
+ MethodMetadata methodMetadata2 = methods.get(1);
+ ConstructorMetadata constructorMetadata2 = (ConstructorMetadata)methodMetadata2;
+ assertNotNull(constructorMetadata2);
+ assertTrue(constructorMetadata2.getModifiers().size() == 1);
+ assertThat(constructorMetadata2.getName(), is("MySource"));
+ assertTrue(constructorMetadata2.getParameters().size() == 2);
+
+ MethodTypeMemberMetadata methodTypeMemberMetadata1 = (MethodTypeMemberMetadata)methods.get(2);
+ assertTrue(methodTypeMemberMetadata1.getModifiers().size() == 1);
+ assertEquals(methodTypeMemberMetadata1.getReturnType().getName(), "int");
assertNotNull(methodTypeMemberMetadata1);
assertThat(methodTypeMemberMetadata1.getName(), is("getI"));
+ assertTrue(methodTypeMemberMetadata1.getParameters().size() == 0);
- MethodTypeMemberMetadata methodTypeMemberMetadata2 = (MethodTypeMemberMetadata)methods.get(2);
- assertNotNull(methodTypeMemberMetadata2);
- assertThat(methodTypeMemberMetadata2.getName(), is("setI"));
+ MethodTypeMemberMetadata methodTypeMemberMetadata3 = (MethodTypeMemberMetadata)methods.get(3);
+ assertTrue(methodTypeMemberMetadata3.getModifiers().size() == 1);
+ assertEquals(methodTypeMemberMetadata3.getReturnType().getName(), "void");
+ assertNotNull(methodTypeMemberMetadata3);
+ assertThat(methodTypeMemberMetadata3.getName(), is("setI"));
+ assertTrue(methodTypeMemberMetadata3.getParameters().size() == 1);
+
- MethodTypeMemberMetadata methodTypeMemberMetadata3 = (MethodTypeMemberMetadata)methods.get(4);
- assertNotNull(methodTypeMemberMetadata3);
- assertThat(methodTypeMemberMetadata3.getName(), is("doSomething"));
+ MethodTypeMemberMetadata methodTypeMemberMetadata4 = (MethodTypeMemberMetadata)methods.get(4);
+ assertTrue(methodTypeMemberMetadata4.getModifiers().size() == 1);
+ assertEquals(methodTypeMemberMetadata4.getReturnType().getName(), "void");
+ assertNotNull(methodTypeMemberMetadata4);
+ assertThat(methodTypeMemberMetadata4.getName(), is("setJ"));
+ assertTrue(methodTypeMemberMetadata4.getParameters().size() == 1);
+
+ MethodTypeMemberMetadata methodTypeMemberMetadata5 = (MethodTypeMemberMetadata)methods.get(5);
+ assertTrue(methodTypeMemberMetadata5.getModifiers().size() == 1);
+ assertEquals(methodTypeMemberMetadata5.getReturnType().getName(), "void");
+ assertNotNull(methodTypeMemberMetadata5);
+ assertThat(methodTypeMemberMetadata5.getName(), is("doSomething"));
+ assertTrue(methodTypeMemberMetadata5.getParameters().size() == 2);
}
}
}
15 years, 10 months
DNA SVN: r409 - trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java.
by dna-commits@lists.jboss.org
Author: spagop
Date: 2008-08-10 14:39:35 -0400 (Sun, 10 Aug 2008)
New Revision: 409
Modified:
trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java
Log:
start with the support of the enhanced meta data
Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java 2008-08-10 18:38:48 UTC (rev 408)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/JavaMetadataSequencer.java 2008-08-10 18:39:35 UTC (rev 409)
@@ -37,9 +37,10 @@
import org.jboss.dna.sequencer.java.metadata.MarkerAnnotationMetadata;
import org.jboss.dna.sequencer.java.metadata.MethodMetadata;
import org.jboss.dna.sequencer.java.metadata.MethodTypeMemberMetadata;
+import org.jboss.dna.sequencer.java.metadata.ModifierMetadata;
import org.jboss.dna.sequencer.java.metadata.NormalAnnotationMetadata;
import org.jboss.dna.sequencer.java.metadata.PackageMetadata;
-import org.jboss.dna.sequencer.java.metadata.ParameterizedFieldMetadata;
+import org.jboss.dna.sequencer.java.metadata.ReferenceFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.PrimitiveFieldMetadata;
import org.jboss.dna.sequencer.java.metadata.SingleImportMetadata;
import org.jboss.dna.sequencer.java.metadata.SingleMemberAnnotationMetadata;
@@ -155,7 +156,9 @@
public static final String JAVA_NORMAL_CLASS_CHILD_NODE = "java:normalClass";
public static final String JAVA_NORMAL_CLASS_DECLARATION_CHILD_NODE = "java:normalClassDeclaration";
public static final String JAVA_CLASS_NAME = "java:name";
- public static final String JAVA_PUBLIC_CLASS_MODIFIER = "java:modifier";
+ public static final String JAVA_MODIFIER_CHILD_NODE = "java:modifier";
+ public static final String JAVA_MODIFIER_DECLARATION_CHILD_NODE = "java:modifierDeclaration";
+ public static final String JAVA_MODIFIER_NAME = "java:name";
public static final String JAVA_TYPE_NAME = "java:name";
// primitive type
@@ -175,6 +178,8 @@
public static final String JAVA_CONSTRUCTOR_CHILD_NODE = "java:constructor";
public static final String JAVA_CONSTRUCTOR_DECLARATION_CHILD_NODE = "java:constructorDeclaration";
+
+
/**
* {@inheritDoc}
*
@@ -317,13 +322,21 @@
output.setProperty(classChildNode, nameFactory.create(JAVA_CLASS_NAME), classMetadata.getName());
// process modifiers of the class declaration
- Map<Integer, String> classModifiers = classMetadata.getModifiers();
- if (!classModifiers.isEmpty()) {
- String publicModifier = classModifiers.get(TypeMetadata.PUBLIC_MODIFIER);
- if (publicModifier != null) {
- output.setProperty(classChildNode, nameFactory.create(JAVA_PUBLIC_CLASS_MODIFIER), publicModifier);
- }
+ List<ModifierMetadata> classModifiers = classMetadata.getModifiers();
+ int modifierIndex = 1;
+ for (ModifierMetadata modifierMetadata : classModifiers) {
+
+ Path classModifierChildNode = pathFactory.create(JAVA_COMPILATION_UNIT_NODE + SLASH
+ + JAVA_UNIT_TYPE_CHILD_NODE + SLASH
+ + JAVA_CLASS_DECLARATION_CHILD_NODE + SLASH
+ + JAVA_NORMAL_CLASS_CHILD_NODE + SLASH
+ + JAVA_NORMAL_CLASS_DECLARATION_CHILD_NODE + SLASH
+ + JAVA_MODIFIER_CHILD_NODE + SLASH + JAVA_MODIFIER_DECLARATION_CHILD_NODE + "["
+ + modifierIndex + "]");
+
+ output.setProperty(classModifierChildNode, nameFactory.create(JAVA_MODIFIER_NAME), modifierMetadata.getName());
}
+
// process fields of the class unit.
List<FieldMetadata> fields = classMetadata.getFields();
int primitiveIndex = 1;
@@ -346,8 +359,8 @@
primitiveIndex++;
}
}
- if (fieldMetadata instanceof ParameterizedFieldMetadata) {
- // ParameterizedFieldMetadata parameterizedFieldMetadata = (ParameterizedFieldMetadata)fieldMetadata;
+ if (fieldMetadata instanceof ReferenceFieldMetadata) {
+ // ReferenceFieldMetadata parameterizedFieldMetadata = (ReferenceFieldMetadata)fieldMetadata;
// TODO
}
}
15 years, 10 months