[jbosstools-commits] JBoss Tools SVN: r6998 - in trunk/core: plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Mar 18 19:20:48 EDT 2008


Author: rob.stryker at jboss.com
Date: 2008-03-18 19:20:48 -0400 (Tue, 18 Mar 2008)
New Revision: 6998

Modified:
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveNode.java
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveActionImpl.java
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFileSetImpl.java
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFolderImpl.java
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveImpl.java
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveModelNode.java
   trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveNodeImpl.java
   trunk/core/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelCreationTest.java
Log:
Validation and testing for model

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveNode.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveNode.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchiveNode.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -182,4 +182,10 @@
 	 * @return
 	 */
 	public void clearDelta();
+	
+	/**
+	 * Validating the model
+	 * @return true if it's ok, false if it should fail
+	 */
+	public boolean validateModel();
 }

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveActionImpl.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveActionImpl.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveActionImpl.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -22,6 +22,7 @@
 package org.jboss.ide.eclipse.archives.core.model.internal;
 
 import org.eclipse.core.runtime.IPath;
+import org.jboss.ide.eclipse.archives.core.model.IArchive;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveAction;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbAction;
@@ -86,4 +87,17 @@
 		actionDelegate.setType(type);
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.ide.eclipse.archives.core.model.internal.ArchiveNodeImpl#validateChild(org.jboss.ide.eclipse.archives.core.model.IArchiveNode)
+	 */
+	public boolean validateModel() {
+		if( getAllChildren().length != 0 ) return false;
+		if( getParent() != null && getModelRootNode() != null && 
+			(getParent().getNodeType() != IArchiveNode.TYPE_ARCHIVE || 
+				!((IArchive)getParent()).isTopLevel()))
+			return false;
+		return true;
+	}
+
 }
\ No newline at end of file

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFileSetImpl.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFileSetImpl.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFileSetImpl.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -250,7 +250,7 @@
 	public IPath getPathRelativeToParent(IPath inputFile) {
 		String s = inputFile.toOSString().substring(getGlobalSourcePath().toOSString().length()+1);
 		return new Path(s);
-}
+	}
 
 
 	/*
@@ -259,4 +259,13 @@
 	public void resetScanner() {
 		rescanRequired = true;
 	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.ide.eclipse.archives.core.model.internal.ArchiveNodeImpl#validateChild(org.jboss.ide.eclipse.archives.core.model.IArchiveNode)
+	 */
+	public boolean validateModel() {
+		return getAllChildren().length == 0 ? true : false; 
+	}
+
 }

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFolderImpl.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFolderImpl.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveFolderImpl.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -21,11 +21,14 @@
  */
 package org.jboss.ide.eclipse.archives.core.model.internal;
 
+import java.util.ArrayList;
+
 import org.eclipse.core.runtime.IPath;
 import org.jboss.ide.eclipse.archives.core.model.IArchive;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
+import org.jboss.ide.eclipse.archives.core.model.INamedContainerArchiveNode;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbFolder;
 
 /**
@@ -114,4 +117,23 @@
 	public IPath getRootArchiveRelativePath() {
 		return getParent().getRootArchiveRelativePath().append(getName());
 	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.ide.eclipse.archives.core.model.internal.ArchiveNodeImpl#validateChild(org.jboss.ide.eclipse.archives.core.model.IArchiveNode)
+	 */
+	public boolean validateModel() {
+		ArrayList<String> list = new ArrayList<String>();
+		IArchiveNode[] children = getAllChildren();
+		for( int i = 0; i < children.length; i++ ) {
+			if( children[i] instanceof INamedContainerArchiveNode) {
+				if( list.contains(((INamedContainerArchiveNode)children[i]).getName()))
+						return false;
+				else
+					list.add(((INamedContainerArchiveNode)children[i]).getName());
+			}
+		}
+		return super.validateModel();
+	}
+
 }

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveImpl.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveImpl.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveImpl.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -21,6 +21,8 @@
  */
 package org.jboss.ide.eclipse.archives.core.model.internal;
 
+import java.util.ArrayList;
+
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.jboss.ide.eclipse.archives.core.ArchivesCore;
@@ -29,7 +31,9 @@
 import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeVisitor;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveType;
+import org.jboss.ide.eclipse.archives.core.model.INamedContainerArchiveNode;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbPackage;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbPackages;
 import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
@@ -214,10 +218,6 @@
 		attributeChanged(PACKAGE_TYPE_ATTRIBUTE, getArchiveTypeId(), type == null ? null : type.getId());
 		packageDelegate.setPackageType(type.getId());
 	}
-	
-	protected XbPackage getPackageDelegate () {
-		return packageDelegate;
-	}
 
 	/*
 	 * @see IArchive#setArchiveType(String)
@@ -246,5 +246,23 @@
 			return new Path(getName());
 		return getParent().getRootArchiveRelativePath().append(getName());
 	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.ide.eclipse.archives.core.model.internal.ArchiveNodeImpl#validateChild(org.jboss.ide.eclipse.archives.core.model.IArchiveNode)
+	 */
+	public boolean validateModel() {
+		ArrayList<String> list = new ArrayList<String>();
+		IArchiveNode[] children = getAllChildren();
+		for( int i = 0; i < children.length; i++ ) {
+			if( children[i] instanceof INamedContainerArchiveNode) {
+				if( list.contains(((INamedContainerArchiveNode)children[i]).getName()))
+						return false;
+				else
+					list.add(((INamedContainerArchiveNode)children[i]).getName());
+			}
+		}
+		return super.validateModel();
+	}
 
 }

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveModelNode.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveModelNode.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveModelNode.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -21,14 +21,18 @@
  */
 package org.jboss.ide.eclipse.archives.core.model.internal;
 
+import java.util.ArrayList;
+
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.jboss.ide.eclipse.archives.core.model.ArchivesModelException;
 import org.jboss.ide.eclipse.archives.core.model.EventManager;
+import org.jboss.ide.eclipse.archives.core.model.IArchive;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveModel;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveModelRootNode;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeDelta;
+import org.jboss.ide.eclipse.archives.core.model.INamedContainerArchiveNode;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XbPackages;
 import org.jboss.ide.eclipse.archives.core.model.internal.xb.XMLBinding.XbException;
@@ -162,4 +166,24 @@
 		clearDelta();
 		EventManager.fireDelta(delta);
 	}
+	
+	public boolean validateModel() {
+		if( getChildren(IArchiveNode.TYPE_ARCHIVE).length < getAllChildren().length)
+			return false;
+		ArrayList<IPath> list = new ArrayList<IPath>();
+		IArchiveNode[] children = getChildren(IArchiveNode.TYPE_ARCHIVE);
+		IArchive child;
+		for( int i = 0; i < children.length; i++ ) {
+			child = (IArchive)children[i];
+			if( child.getGlobalDestinationPath() != null ) {
+				IPath p = child.getGlobalDestinationPath().append(child.getName());
+				if( list.contains(p))
+						return false;
+				else
+					list.add(p);
+			}
+		}
+
+		return super.validateModel();
+	}
 }

Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveNodeImpl.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveNodeImpl.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/internal/ArchiveNodeImpl.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -241,7 +241,7 @@
 	 * (non-Javadoc)
 	 * @see org.jboss.ide.eclipse.archives.core.model.IArchiveNode#addChild(org.jboss.ide.eclipse.archives.core.model.IArchiveNode)
 	 */
-	public void addChild(IArchiveNode node) throws ArchivesModelException {
+	public final void addChild(IArchiveNode node) throws ArchivesModelException {
 		addChild(node, true);
 	}
 
@@ -250,9 +250,7 @@
 	 * @param child
 	 * @param addInDelegate
 	 */
-	public void addChild(IArchiveNode child, boolean addInDelegate) throws ArchivesModelException {
-		if( !validateChild(child) ) 
-			throw new ArchivesModelException("Unable to add child node");
+	public final void addChild(IArchiveNode child, boolean addInDelegate) throws ArchivesModelException {
 		Assert.isNotNull(child);
 		ArchiveNodeImpl childImpl = (ArchiveNodeImpl) child;
 		children.add(childImpl);
@@ -260,9 +258,17 @@
 		if( addInDelegate )
 			nodeDelegate.addChild(childImpl.nodeDelegate);
 		childChanges(child, IArchiveNodeDelta.CHILD_ADDED);
+		if( !validateModel()) {
+			removeChild(child);
+			throw new ArchivesModelException("Unable to add child node");
+		}
 	}
 
-	protected boolean validateChild(IArchiveNode child) {
+	public boolean validateModel() {
+		IArchiveNode[] kids = getAllChildren();
+		for( int i = 0; i < kids.length; i++ ) 
+			if( !kids[i].validateModel() ) 
+				return false;
 		return true;
 	}
 	

Modified: trunk/core/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelCreationTest.java
===================================================================
--- trunk/core/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelCreationTest.java	2008-03-18 20:22:52 UTC (rev 6997)
+++ trunk/core/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelCreationTest.java	2008-03-18 23:20:48 UTC (rev 6998)
@@ -30,6 +30,7 @@
 import org.jboss.ide.eclipse.archives.core.model.ArchivesModel;
 import org.jboss.ide.eclipse.archives.core.model.ArchivesModelException;
 import org.jboss.ide.eclipse.archives.core.model.IArchive;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveAction;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveFileSet;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
 import org.jboss.ide.eclipse.archives.core.model.IArchiveModel;
@@ -53,11 +54,16 @@
 	}
 
 	public void testSimpleCreation() {
-		createModelNode();
+		createEmptyModelNode();
 	}
 	
-	public void testAddToModel() {
-		ArchiveModelNode modelNode = createModelNode();
+	
+	/*
+	 * Testing the validity of adding certain types
+	 * of nodes to others. 
+	 */
+	public void testRegisterInModel() {
+		ArchiveModelNode modelNode = createEmptyModelNode();
 		modelNode.getModel().registerProject(modelNode, new NullProgressMonitor());
 		assertEquals(modelNode,modelNode.getModel().getRoot(project));
 		assertNotSame(null, modelListener.getDelta());
@@ -65,72 +71,439 @@
 		modelNode.getModel().registerProject(modelNode, new NullProgressMonitor());
 	}
 	
-	protected ArchiveModelNode createModelNode() {
+	
+	// Add everything to the root model
+	
+	public void testAddFolderToModel() {
 		try {
-			XbPackages packs = new XbPackages();
-			XbPackage pack = new XbPackage();
-			packs.addChild(pack);
-			ArchiveModelNode model = getModel(packs);
-			ModelUtil.fillArchiveModel(packs, model);
-			assertEquals(project, model.getProjectPath());
-			assertEquals(IArchiveNode.TYPE_MODEL_ROOT, model.getNodeType());
-			assertEquals(null, model.getParent());
-			assertEquals(packs, model.getNodeDelegate());
-			assertTrue(model.hasChildren());
-			assertEquals(1, model.getAllChildren().length);
-			assertEquals(null, ArchivesModel.instance().getRoot(project));
-			assertEquals(null, modelListener.getDelta());
-			return model;
+			createEmptyModelNode().addChild(createFolder("testFolder"));
 		} catch( ArchivesModelException ame ) {
-			fail(ame.getMessage());
+			return;
 		}
-		return null;
+		fail();
 	}
 	
-	public void testAddFolderToModel() {
+	public void testAddFilesetToModel() {
 		try {
-			ArchiveModelNode modelNode = createModelNode();
-			IArchiveFolder folder = ArchiveNodeFactory.createFolder();
-			folder.setName("testFolder");
-			modelNode.addChild(folder);
+			createEmptyModelNode().addChild(createFileSet("*", "blah"));
 		} catch( ArchivesModelException ame ) {
 			return;
 		}
 		fail();
 	}
 	
-	public void testAddFilesetToModel() {
+	public void testAddActionToModel() {
 		try {
-			ArchiveModelNode modelNode = createModelNode();
-			IArchiveFileSet fs = ArchiveNodeFactory.createFileset();
-			fs.setIncludesPattern("*");
-			fs.setSourcePath(new Path("blah"));
-			modelNode.addChild(fs);
+			createEmptyModelNode().addChild(createAction());;
 		} catch( ArchivesModelException ame ) {
 			return;
 		}
 		fail();
 	}
 	
+	public void testAddArchiveToModel() {
+		try {
+			createEmptyModelNode().addChild(createArchive("someName.war", "test"));
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
 
-	public void testAddActionToModel() {
+	/*
+	 * Let's make sure all 4 types can be added to an archive.
+	 */
+	public void testAddArchiveToArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName.war2", "test2");
+			archive.addChild(archive2);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+	
+	public void testAddFolderToArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFolder folder = createFolder("test3");
+			archive.addChild(folder);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+
+	public void testAddFilesetToArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFileSet fs = createFileSet("*", "blah");
+			archive.addChild(fs);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+
+	public void testAddActionToArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveAction action = createAction();
+			archive.addChild(action);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+	
+	
+
+	/*
+	 * Let's make sure all 4 types can be added to an INNER archive.
+	 */
+	public void testAddArchiveToInnerArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName.war2", "test2");
+			IArchive archive3 = createArchive("someName.war3", "test3");
+			archive.addChild(archive2);
+			archive2.addChild(archive3);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+	
+	public void testAddFolderToInnerArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName.war2", "test2");
+			IArchiveFolder folder = createFolder("test3");
+			archive.addChild(archive2);
+			archive2.addChild(folder);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+
+	public void testAddFilesetToInnerArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName.war2", "test2");
+			IArchiveFileSet fs = createFileSet("*", "blah");
+			archive.addChild(archive2);
+			archive2.addChild(fs);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+	}
+
+	public void testAddActionToInnerArchive() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName.war2", "test2");
+			IArchiveAction action = createAction();
+
+			archive.addChild(archive2);
+			archive2.addChild(action);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
 		fail();
 	}
+
 	
-	public void testAddArchiveToModel() {
+	// Add all to INNER-folder
+	
+	public void testAddArchiveToInnerFolder() {
 		try {
-			ArchiveModelNode modelNode = createModelNode();
-			IArchive archive = ArchiveNodeFactory.createArchive();
-			archive.setName("someName.war");
-			archive.setDestinationPath(new Path("test"));
-			modelNode.addChild(archive);
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName.war2", "test2");
+			IArchiveFolder folder = createFolder("test3");
+
+			archive.addChild(folder);
+			folder.addChild(archive2);
+			createEmptyModelNode().addChild(archive);
 		} catch( ArchivesModelException ame ) {
 			fail();
 		}
+		return;
 	}
 	
+	public void testAddFolderToInnerFolder() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFolder folder = createFolder("folder");
+			IArchiveFolder folder2 = createFolder("folder2");
+
+			archive.addChild(folder);
+			folder.addChild(folder2);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+		return;
+	}
+
+	public void testAddFilesetToInnerFolder() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchive archive2 = createArchive("someName2.war", "test2");
+			IArchiveFolder folder = createFolder("test3");
+
+			archive.addChild(folder);
+			folder.addChild(archive2);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+		return;
+	}
 	
+
+	public void testAddActionToInnerFolder() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFolder folder = createFolder("folder");
+			IArchiveAction action = createAction();
+
+			archive.addChild(folder);
+			folder.addChild(action);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
 	
+	// add all to action
+	public void testAddArchiveToAction() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveAction action = createAction();
+			IArchiveNode child = createArchive("someName2.war", "test2");
+			archive.addChild(action);
+			action.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	public void testAddFolderToAction() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveAction action = createAction();
+			IArchiveNode child = createFolder("test");
+			archive.addChild(action);
+			action.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	public void testAddFilesetToAction() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveAction action = createAction();
+			IArchiveNode child = createFileSet("*", "path");
+			archive.addChild(action);
+			action.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+
+	public void testAddActionToAction() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveAction action = createAction();
+			IArchiveNode child = createAction();
+			archive.addChild(action);
+			action.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	// add all to fileset
+	public void testAddArchiveToFileset() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFileSet fs = createFileSet("*", "path");
+			IArchiveNode child = createArchive("someName.war", "test");
+			archive.addChild(fs);
+			fs.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	public void testAddFolderToFileset() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFileSet fs = createFileSet("*", "path");
+			IArchiveNode child = createFolder("test");
+			archive.addChild(fs);
+			fs.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	public void testAddFilesetToFileset() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFileSet fs = createFileSet("*", "path");
+			IArchiveNode child = createFileSet("*", "path");
+			archive.addChild(fs);
+			fs.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	public void testAddActionToFileset() {
+		try {
+			IArchive archive = createArchive("someName.war", "test");
+			IArchiveFileSet fs = createFileSet("*", "path");
+			IArchiveNode child = createAction();
+			archive.addChild(fs);
+			fs.addChild(child);
+			createEmptyModelNode().addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}	
+	
+	
+	
+	// Test purposely matching archive / folder names
+	public void testAddFolderClashingFolder() {
+		IArchive root = createArchive("root.war", "blah");
+		IArchiveFolder folder1 = createFolder("folder");
+		IArchiveFolder folder2 = createFolder("folder");
+		ArchiveModelNode model = createEmptyModelNode();
+		try {
+			model.addChild(root);
+			root.addChild(folder1);
+		} catch( ArchivesModelException ame ) {
+			fail(ame.getMessage());
+		}
+		
+		try {
+			root.addChild(folder2);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+
+	public void testAddFolderClashingArchive() {
+		IArchive root = createArchive("root.war", "blah");
+		IArchive archive = createArchive("test.war", "dest");
+		IArchiveFolder folder = createFolder("test.war");
+		ArchiveModelNode model = createEmptyModelNode();
+		try {
+			model.addChild(root);
+			root.addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			fail(ame.getMessage());
+		}
+		
+		try {
+			root.addChild(folder);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+
+	public void testAddArchiveClashingFolder() {
+		IArchive root = createArchive("root.war", "blah");
+		IArchive archive = createArchive("test.war", "dest");
+		IArchiveFolder folder = createFolder("test.war");
+		ArchiveModelNode model = createEmptyModelNode();
+		try {
+			model.addChild(root);
+			root.addChild(folder);
+		} catch( ArchivesModelException ame ) {
+			fail(ame.getMessage());
+		}
+		
+		try {
+			root.addChild(archive);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+
+	public void testAddArchiveClashingArchive() {
+		IArchive root = createArchive("root.war", "blah");
+		IArchiveFolder folder = createFolder("folder");
+		IArchiveFolder folder2 = createFolder("folder");
+		ArchiveModelNode model = createEmptyModelNode();
+		try {
+			model.addChild(root);
+			root.addChild(folder);
+		} catch( ArchivesModelException ame ) {
+			fail(ame.getMessage());
+		}
+		
+		try {
+			root.addChild(folder2);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	// should clash, same destinations
+	public void testArchiveClashingArchiveInModel() {
+		ArchiveModelNode model = createEmptyModelNode();
+		IArchive root = createArchive("root.war", "blah");
+		IArchive root2 = createArchive("root.war", "blah");
+		try {
+			model.addChild(root);
+			model.addChild(root2);
+		} catch( ArchivesModelException ame ) {
+			return;
+		}
+		fail();
+	}
+	
+	// Should not clash, different destinations
+	public void testArchiveNotClashingArchiveInModel() {
+		ArchiveModelNode model = createEmptyModelNode();
+		IArchive root = createArchive("root.war", "blah");
+		IArchive root2 = createArchive("root.war", "blah2");
+		try {
+			model.addChild(root);
+			model.addChild(root2);
+		} catch( ArchivesModelException ame ) {
+			fail();
+		}
+		return;
+	}
 //	public void testDeltas() {
 //		try {
 //			ArchiveModelNode model = createModelNode();
@@ -145,6 +518,82 @@
 //		}
 //	}
 	
+	
+	
+	
+	/*
+	 * Utility methods
+	 */
+	protected IArchiveFolder createFolder(String name) {
+		IArchiveFolder folder = ArchiveNodeFactory.createFolder();
+		folder.setName(name);
+		return folder;
+	}
+	
+	protected IArchiveFileSet createFileSet(String includes, String path) {
+		IArchiveFileSet fs = ArchiveNodeFactory.createFileset();
+		fs.setIncludesPattern(includes);
+		fs.setSourcePath(new Path(path));
+		return fs;
+	}
+	
+	protected IArchiveAction createAction() {
+		IArchiveAction action = ArchiveNodeFactory.createAction();
+		action.setTime(IArchiveAction.POST_BUILD);
+		action.setType("ant");
+		return action;
+	}
+	
+	protected IArchive createArchive(String name, String dest) {
+		IArchive archive = ArchiveNodeFactory.createArchive();
+		archive.setName(name);
+		archive.setDestinationPath(new Path(dest));
+		return archive;
+	}
+	
+	
+	protected ArchiveModelNode createModelNode() {
+		try {
+			XbPackages packs = new XbPackages();
+			XbPackage pack = new XbPackage();
+			packs.addChild(pack);
+			ArchiveModelNode model = getModel(packs);
+			ModelUtil.fillArchiveModel(packs, model);
+			assertEquals(project, model.getProjectPath());
+			assertEquals(IArchiveNode.TYPE_MODEL_ROOT, model.getNodeType());
+			assertEquals(null, model.getParent());
+			assertEquals(packs, model.getNodeDelegate());
+			assertTrue(model.hasChildren());
+			assertEquals(1, model.getAllChildren().length);
+			assertEquals(null, ArchivesModel.instance().getRoot(project));
+			assertEquals(null, modelListener.getDelta());
+			return model;
+		} catch( ArchivesModelException ame ) {
+			fail(ame.getMessage());
+		}
+		return null;
+	}
+	
+	protected ArchiveModelNode createEmptyModelNode() {
+		try {
+			XbPackages packs = new XbPackages();
+			ArchiveModelNode model = getModel(packs);
+			ModelUtil.fillArchiveModel(packs, model);
+			assertEquals(project, model.getProjectPath());
+			assertEquals(IArchiveNode.TYPE_MODEL_ROOT, model.getNodeType());
+			assertEquals(null, model.getParent());
+			assertEquals(packs, model.getNodeDelegate());
+			assertFalse(model.hasChildren());
+			assertEquals(0, model.getAllChildren().length);
+			assertEquals(null, ArchivesModel.instance().getRoot(project));
+			assertEquals(null, modelListener.getDelta());
+			return model;
+		} catch( ArchivesModelException ame ) {
+			fail(ame.getMessage());
+		}
+		return null;
+	}
+	
 	protected ArchiveModelNode getModel(XbPackages packs) {
 		IArchiveModel model = new ArchivesModel();
 		model.addModelListener(modelListener);




More information about the jbosstools-commits mailing list