[jboss-svn-commits] JBL Code SVN: r29589 - in labs/jbossrules/trunk: drools-guvnor/src/main/java/org/drools/guvnor/client/packages and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 13 06:59:01 EDT 2009


Author: jervisliu
Date: 2009-10-13 06:59:00 -0400 (Tue, 13 Oct 2009)
New Revision: 29589

Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/PackageBuilderWidget.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/builder/ContentPackageAssembler.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/selector/SelectorManager.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/builder/ContentPackageAssemblerTest.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/PackageDeploymentServletTest.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/selector/SelectorManagerTest.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/LinkedAssetItem.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
Log:
https://jira.jboss.org/jira/browse/GUVNOR-109: add possibility to choose selectors from a list

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -1957,4 +1957,11 @@
     
     String NewLinkedAssetDesc3();
     
+    String BuildWholePackageTip();
+    
+    String BuiltInSelectorTip();
+
+    String BuildWholePackage();
+    
+    String BuiltInSelector();    
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties	2009-10-13 10:59:00 UTC (rev 29589)
@@ -463,7 +463,7 @@
 ThisWillValidateAndCompileAllTheAssetsInAPackage=This will validate and compile all the assets in a package.
 OptionalSelectorName=(Optional) selector name
 CustomSelector=Custom selector
-SelectorTip=A selector is configured by administrators to choose what assets form part of a package build. This is configured on the server side. See the WEB-INF/classes/selectors.properties for details.
+SelectorTip=A selector is configured by administrators to choose what assets form part of a package build. If no selector is chosen, the whole package will be built. This is configured on the server side. See the WEB-INF/classes/selectors.properties for details.
 BuildBinaryPackage=Build binary package:
 BuildingPackageNote=Building a package will collect all the assets, validate and compile into a deployable package.
 CreateSnapshotForDeployment=Create snapshot for deployment
@@ -931,3 +931,7 @@
 NewLinkedAssetDesc1=This will create a new asset that links to an existing one. To create a linked asset,
 NewLinkedAssetDesc2=you need to open the existing asset that you want to link to, copy and paste its 
 NewLinkedAssetDesc3=UUID to the text box above.
+BuildWholePackageTip=This will build the whole package.  
+BuiltInSelectorTip=The built-in selector allows you to choose what assets form part of a package build according to asset's status, category and meta data. Please use a custom selector if the built-in selector does not satisfy your requirement.
+BuildWholePackage=Build whole package  
+BuiltInSelector=Built-in selector
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/PackageBuilderWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/PackageBuilderWidget.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/packages/PackageBuilderWidget.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -25,6 +25,7 @@
 import org.drools.guvnor.client.common.GenericCallback;
 import org.drools.guvnor.client.common.InfoPopup;
 import org.drools.guvnor.client.common.LoadingPopup;
+import org.drools.guvnor.client.common.SmartViewWizard;
 import org.drools.guvnor.client.rpc.BuilderResult;
 import org.drools.guvnor.client.rpc.PackageConfigData;
 import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
@@ -44,6 +45,7 @@
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.KeyboardListener;
 import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.RadioButton;
 import com.google.gwt.user.client.ui.SimplePanel;
@@ -78,8 +80,14 @@
 	public FormStyleLayout layout;
 	private PackageConfigData conf;
 	private EditItemEvent editEvent;
-    private static Constants constants;
+    private static Constants constants = GWT.create(Constants.class);
 
+    
+    private final FormStyleLayout buildWholePackageLayout     = new FormStyleLayout();
+    private final FormStyleLayout builtInSelectorLayout     = new FormStyleLayout();
+    private final FormStyleLayout customSelectorLayout     = new FormStyleLayout();
+    private String buildMode = "buildWholePackage";
+
     public PackageBuilderWidget(final PackageConfigData conf,
 			EditItemEvent editEvent) {
 		layout = new FormStyleLayout();
@@ -88,27 +96,109 @@
 
 		final SimplePanel buildResults = new SimplePanel();
 
+		RadioButton wholePackageRadioButton = new RadioButton("action", "Build whole package"); 
+		RadioButton builtInSelectorRadioButton = new RadioButton("action", "Use built-in selector"); 
+		RadioButton customSelectorRadioButton = new RadioButton("action", "Use custom selector"); 
+		wholePackageRadioButton.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				buildWholePackageLayout.setVisible(true);
+				builtInSelectorLayout.setVisible(false);
+				customSelectorLayout.setVisible(false);
+				buildMode = "buildWholePackage";
+			}
+		});
+		builtInSelectorRadioButton.addClickListener(new ClickListener() {
+			public void onClick(Widget w) {
+				buildWholePackageLayout.setVisible(false);
+				builtInSelectorLayout.setVisible(true);
+				customSelectorLayout.setVisible(false);
+				buildMode = "builtInSelector";
+			}
+		});
+		customSelectorRadioButton.addClickListener(new ClickListener() {
+			public void onClick(Widget arg0) {
+				buildWholePackageLayout.setVisible(false);
+				builtInSelectorLayout.setVisible(false);
+				customSelectorLayout.setVisible(true);
+				buildMode = "customSelector";
+			}
+		});
+		
+		VerticalPanel verticalPanel = new VerticalPanel();
+		
+        HorizontalPanel wholePackageRadioButtonPanel = new HorizontalPanel();
+        wholePackageRadioButtonPanel.add(wholePackageRadioButton); 
+        wholePackageRadioButtonPanel.add( new InfoPopup(constants.BuildWholePackage(), constants.BuildWholePackageTip()) );
+		verticalPanel.add(wholePackageRadioButtonPanel);
+		
+	    HorizontalPanel builtInSelectorRadioButtonPanel = new HorizontalPanel();
+	    builtInSelectorRadioButtonPanel.add(builtInSelectorRadioButton); 
+	    builtInSelectorRadioButtonPanel.add( new InfoPopup(constants.BuiltInSelector(), constants.BuiltInSelectorTip()) );  		
+		verticalPanel.add(builtInSelectorRadioButtonPanel);
+		
+	    HorizontalPanel customSelectorRadioButtonPanel = new HorizontalPanel();
+	    customSelectorRadioButtonPanel.add(customSelectorRadioButton); 
+	    customSelectorRadioButtonPanel.add( new InfoPopup(constants.CustomSelector(), constants.SelectorTip()) );  		
+		verticalPanel.add(customSelectorRadioButtonPanel);
 
-        final TextBox selector = new TextBox();
-        constants = ((Constants) GWT.create(Constants.class));
+		layout.addAttribute("", verticalPanel);		
+		wholePackageRadioButton.setChecked(true);	
+		
+		buildWholePackageLayout.setVisible(true);
+		builtInSelectorLayout.setVisible(false);
+		customSelectorLayout.setVisible(false);
+		
+		//Build whole package layout
+		layout.addRow(buildWholePackageLayout);
+
+
+		//Built-in selector layout
+        HorizontalPanel builtInSelectorPanel = new HorizontalPanel();
+        builtInSelectorPanel.add( new HTML("&nbsp;&nbsp;<i>" + "Status" + ": </i>") ); 
+        
+        final ListBox operator = new ListBox();
+        String[] vals = new String[]{"=", "!=", "<", ">"};
+        for ( int i = 0; i < vals.length; i++ ) {
+        	operator.addItem( vals[i], vals[i]);
+        }
+        builtInSelectorPanel.add( operator );
+        
+        final TextBox statusValue = new TextBox();
+        statusValue.setTitle( constants.WildCardsSearchTip() );
+        builtInSelectorPanel.add(statusValue );                  
+ 
+        builtInSelectorLayout.addRow(builtInSelectorPanel);
+        layout.addRow( builtInSelectorLayout );
+        
+        
+		//Custom selector layout
+        customSelectorLayout.setVisible(false);
+        HorizontalPanel customSelectorPanel = new HorizontalPanel();
+        customSelectorPanel.add( new HTML("&nbsp;&nbsp;<i>" + "Custom Selector" + ": </i>") ); //NON-NLS
+         
+        final ListBox customSelector = new ListBox();
+        customSelector.setTitle( constants.WildCardsSearchTip() );
+        customSelectorPanel.add(customSelector);  
+        loadCustomSelectorList(customSelector);        
+          
+        customSelectorLayout.addRow(customSelectorPanel);   
+        layout.addRow( customSelectorLayout );
+
+
         final Button b = new Button(constants.BuildPackage());
 		b.setTitle(constants.ThisWillValidateAndCompileAllTheAssetsInAPackage());
 		b.addClickListener(new ClickListener() {
 			public void onClick(Widget w) {
-				doBuild(buildResults, selector.getText());
+				doBuild(buildResults, operator.getValue(operator.getSelectedIndex()), statusValue.getText(), customSelector.getSelectedIndex() != -1?customSelector.getValue(customSelector.getSelectedIndex()):null);
 			}
 		});
 
 
         HorizontalPanel buildStuff = new HorizontalPanel();
         buildStuff.add( b );
-        buildStuff.add( new HTML("&nbsp;&nbsp;<i>" + constants.OptionalSelectorName() + ": </i>") ); //NON-NLS
-        buildStuff.add( selector );
-        buildStuff.add( new InfoPopup(constants.CustomSelector(), constants.SelectorTip()) );
-
+ 
 		layout.addAttribute(constants.BuildBinaryPackage(), buildStuff);
-		layout
-				.addRow(new HTML("<i><small>" + constants.BuildingPackageNote() + "</small></i>"));//NON-NLS
+		layout.addRow(new HTML("<i><small>" + constants.BuildingPackageNote() + "</small></i>"));//NON-NLS
 		layout.addRow(buildResults);
 
 		Button snap = new Button(constants.CreateSnapshotForDeployment());
@@ -127,6 +217,50 @@
 		initWidget(layout);
 	}
 
+	private void loadCustomSelectorList(final ListBox customSelector) {
+		RepositoryServiceFactory.getService().getCustomSelectors( new GenericCallback<String[]>() {
+
+            public void onSuccess(String[] list) {
+                for ( int i = 0; i < list.length; i++ ) {
+                	customSelector.addItem( list[i], list[i]);
+                }
+            }
+        });
+	}
+	
+	private void doBuild(final Panel buildResults, final String operator, final String statusValue, final String customSelector) {
+		buildResults.clear();
+
+		final HorizontalPanel busy = new HorizontalPanel();
+		busy.add(new Label(constants.ValidatingAndBuildingPackagePleaseWait()));
+		busy.add(new Image("images/red_anime.gif")); //NON-NLS
+
+        //LoadingPopup.showMessage(constants.PleaseWaitDotDotDot());
+		buildResults.add(busy);
+
+		DeferredCommand.addCommand(new Command() {
+			public void execute() {
+				RepositoryServiceFactory.getService().buildPackage(conf.uuid, true, buildMode, operator, statusValue, customSelector, 
+						new GenericCallback<BuilderResult[]>() {
+							public void onSuccess(BuilderResult[] result) {
+                                LoadingPopup.close();
+								if (result == null) {
+									showSuccessfulBuild(buildResults);
+								} else {
+									showBuilderErrors(result, buildResults, editEvent);
+								}
+							}
+
+							public void onFailure(Throwable t) {
+								buildResults.clear();
+								super.onFailure(t);
+							}
+						});
+			}
+		});
+
+	}
+
 	/**
 	 * Actually build the source, and display it.
 	 */
@@ -185,47 +319,6 @@
 	}
 
 	/**
-	 * Actually do the building.
-	 *
-	 * @param buildResults
-	 *            The panel to stuff the results in.
-	 * @param selectorName
-	 */
-	private void doBuild(final Panel buildResults, final String selectorName) {
-
-		buildResults.clear();
-
-		final HorizontalPanel busy = new HorizontalPanel();
-		busy.add(new Label(constants.ValidatingAndBuildingPackagePleaseWait()));
-		busy.add(new Image("images/red_anime.gif")); //NON-NLS
-
-        //LoadingPopup.showMessage(constants.PleaseWaitDotDotDot());
-		buildResults.add(busy);
-
-		DeferredCommand.addCommand(new Command() {
-			public void execute() {
-				RepositoryServiceFactory.getService().buildPackage(conf.uuid, selectorName, true,
-						new GenericCallback<BuilderResult[]>() {
-							public void onSuccess(BuilderResult[] result) {
-                                LoadingPopup.close();
-								if (result == null) {
-									showSuccessfulBuild(buildResults);
-								} else {
-									showBuilderErrors(result, buildResults, editEvent);
-								}
-							}
-
-							public void onFailure(Throwable t) {
-								buildResults.clear();
-								super.onFailure(t);
-							}
-						});
-			}
-		});
-
-	}
-
-	/**
 	 * This is called to display the success (and a download option).
 	 *
 	 * @param buildResults
@@ -266,8 +359,6 @@
 	public static void showBuilderErrors(BuilderResult[] results, Panel buildResults, final EditItemEvent editEvent) {
 		buildResults.clear();
 
-
-
 		Object[][] data = new Object[results.length][4];
 		for (int i = 0; i < results.length; i++) {
 			BuilderResult res = results[i];
@@ -350,9 +441,6 @@
         });
 
 		buildResults.add(g);
-
-
-
 	}
 
 	/**

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -291,9 +291,15 @@
      * in the systems selectors.properties file. This will then apply the filter to the
      * package being built.
      */
-    public BuilderResult[] buildPackage(String packageUUID, String selectorName, boolean force) throws SerializableException;
+    public BuilderResult[] buildPackage(String packageUUID,  boolean force, String buildMode, String operator, String statusDescriptionValue, 
+			String customSelectorName) throws SerializableException;
 
     /**
+     * return custom selector names
+     */
+    public String[] getCustomSelectors() throws SerializableException;
+
+    /**
      * This will return the effective DRL for a package.
      * This would be the equivalent if all the rules were written by hand in the one file.
      * It may not actually be compiled this way in the implementation, so this is for display and

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -71,7 +71,8 @@
 	public void quickFindAsset(java.lang.String p0, int p1, boolean p2, AsyncCallback<org.drools.guvnor.client.rpc.TableDataResult> cb);
 	public void removeCategory(java.lang.String p0, AsyncCallback cb);
 	public void loadSuggestionCompletionEngine(java.lang.String p0, AsyncCallback<org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine> cb);
-	public void buildPackage(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback<org.drools.guvnor.client.rpc.BuilderResult[]> cb);
+	public void buildPackage(java.lang.String p0, boolean p1, java.lang.String p2, java.lang.String p3, java.lang.String p4, java.lang.String p5, AsyncCallback<org.drools.guvnor.client.rpc.BuilderResult[]> cb);
+	public void getCustomSelectors(AsyncCallback<java.lang.String[]> cb);
 	public void buildPackageSource(java.lang.String p0, AsyncCallback<java.lang.String> cb);
 	public void buildAssetSource(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback<java.lang.String> cb);
 	public void buildAsset(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback<org.drools.guvnor.client.rpc.BuilderResult[]> cb);

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -205,9 +205,12 @@
 	public org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine loadSuggestionCompletionEngine(java.lang.String p0) throws com.google.gwt.user.client.rpc.SerializableException {
 		 return getService().loadSuggestionCompletionEngine( p0);
 	}
-	public org.drools.guvnor.client.rpc.BuilderResult[] buildPackage(java.lang.String p0, java.lang.String p1, boolean p2) throws com.google.gwt.user.client.rpc.SerializableException {
-		 return getService().buildPackage( p0,  p1,  p2);
+	public org.drools.guvnor.client.rpc.BuilderResult[] buildPackage(java.lang.String p0, boolean p1, java.lang.String p2, java.lang.String p3 ,java.lang.String p4, java.lang.String p5) throws com.google.gwt.user.client.rpc.SerializableException {
+		 return getService().buildPackage( p0,  p1,  p2, p3, p4, p5);
 	}
+	public java.lang.String[] getCustomSelectors() throws com.google.gwt.user.client.rpc.SerializableException {
+		 return getService().getCustomSelectors();
+	}
 	public java.lang.String buildPackageSource(java.lang.String p0) throws com.google.gwt.user.client.rpc.SerializableException {
 		 return getService().buildPackageSource( p0);
 	}

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -72,6 +72,7 @@
 import org.drools.guvnor.server.security.PackageNameType;
 import org.drools.guvnor.server.security.PackageUUIDType;
 import org.drools.guvnor.server.security.RoleTypes;
+import org.drools.guvnor.server.selector.SelectorManager;
 import org.drools.guvnor.server.util.AssetFormatHelper;
 import org.drools.guvnor.server.util.AssetLockManager;
 import org.drools.guvnor.server.util.BRMSSuggestionCompletionLoader;
@@ -1434,39 +1435,55 @@
         }
         return result;
     }
-
+    
     @WebRemote
     @Restrict("#{identity.loggedIn}")
-    public BuilderResult[] buildPackage(String packageUUID,
-                                        String selectorConfigName,
-                                        boolean force) throws SerializableException {
-        if ( Contexts.isSessionContextActive() ) {
-            Identity.instance().checkPermission( new PackageUUIDType( packageUUID ),
-                                                 RoleTypes.PACKAGE_DEVELOPER );
-        }
-        PackageItem item = repository.loadPackageByUUID( packageUUID );
-        try {
-            return buildPackage( selectorConfigName,
-                                 force,
-                                 item );
-        } catch ( NoClassDefFoundError e ) {
-            throw new DetailedSerializableException( "Unable to find a class that was needed when building the package  [" + e.getMessage() + "]",
-                                                     "Perhaps you are missing them from the model jars, or from the BRMS itself (lib directory)." );
-        } catch ( UnsupportedClassVersionError e ) {
-            throw new DetailedSerializableException( "Can not build the package. One or more of the classes that are needed were compiled with an unsupported Java version.",
-                                                     "For example the pojo classes were compiled with Java 1.6 and Guvnor is running on Java 1.5. [" + e.getMessage() + "]" );
-        }
-    }
-
-    private BuilderResult[] buildPackage(String selectorConfigName,
-                                         boolean force,
-                                         PackageItem item) throws DetailedSerializableException {
+    public BuilderResult[] buildPackage(String packageUUID, boolean force)
+			throws SerializableException {
+		return buildPackage(packageUUID, force, null, null, null, null);
+	}
+    
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public BuilderResult[] buildPackage(String packageUUID, boolean force, String buildMode, String operator, String statusDescriptionValue, 
+			String customSelectorName)
+			throws SerializableException {
+		if (Contexts.isSessionContextActive()) {
+			Identity.instance().checkPermission(
+					new PackageUUIDType(packageUUID),
+					RoleTypes.PACKAGE_DEVELOPER);
+		}
+		PackageItem item = repository.loadPackageByUUID(packageUUID);
+		try {
+			return buildPackage(item, force, buildMode, operator, statusDescriptionValue, customSelectorName);
+		} catch (NoClassDefFoundError e) {
+			throw new DetailedSerializableException(
+					"Unable to find a class that was needed when building the package  ["
+							+ e.getMessage() + "]",
+					"Perhaps you are missing them from the model jars, or from the BRMS itself (lib directory).");
+		} catch (UnsupportedClassVersionError e) {
+			throw new DetailedSerializableException(
+					"Can not build the package. One or more of the classes that are needed were compiled with an unsupported Java version.",
+					"For example the pojo classes were compiled with Java 1.6 and Guvnor is running on Java 1.5. ["
+							+ e.getMessage() + "]");
+		}
+	}
+    
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String[] getCustomSelectors()
+			throws SerializableException {
+		return SelectorManager.getInstance().getCustomSelectors();
+	}
+    
+    private BuilderResult[] buildPackage(PackageItem item, boolean force, String buildMode,
+			String operator, String statusDescriptionValue,
+			String selectorConfigName) throws DetailedSerializableException {
         if ( !force && item.isBinaryUpToDate() ) {
             // we can just return all OK if its up to date.
             return null;
         }
-        ContentPackageAssembler asm = new ContentPackageAssembler( item,
-                                                                   selectorConfigName );
+        ContentPackageAssembler asm = new ContentPackageAssembler( item, true, buildMode, operator, statusDescriptionValue, selectorConfigName );
         if ( asm.hasErrors() ) {
             BuilderResult[] result = generateBuilderResults( asm );
             return result;
@@ -1755,8 +1772,7 @@
                 PackageItem snap = repository.loadPackageSnapshot( pkg.getName(),
                                                                    snapName );
                 BuilderResult[] res = this.buildPackage( snap.getUUID(),
-                                                         "",
-                                                         true );
+                                                         true, null, null, null, null );
                 if ( res != null ) {
                     StringBuffer buf = new StringBuffer();
                     for ( int i = 0; i < res.length; i++ ) {
@@ -1917,9 +1933,7 @@
                 this.ruleBaseCache.put( item.getUUID(),
                                         rb );
             } else {
-                BuilderResult[] errs = this.buildPackage( null,
-                                                          false,
-                                                          item );
+                BuilderResult[] errs = this.buildPackage(item, false, null, null, null, null);
                 if ( errs == null || errs.length == 0 ) {
                     rb = loadRuleBase( item,
                                        buildCl );
@@ -1946,9 +1960,7 @@
             log.error( e );
             log.info( "...but trying to rebuild binaries..." );
             try {
-                BuilderResult[] res = this.buildPackage( "",
-                                                         true,
-                                                         item );
+                BuilderResult[] res = this.buildPackage(item, true, null, null, null, null);
                 if ( res != null && res.length > 0 ) {
                     throw new DetailedSerializableException( "There were errors when rebuilding the knowledgebase.",
                                                              "" );
@@ -2064,9 +2076,7 @@
                                             loadRuleBase( item,
                                                           cl ) );
                 } else {
-                    BuilderResult[] errs = this.buildPackage( null,
-                                                              false,
-                                                              item );
+                    BuilderResult[] errs = this.buildPackage(item, false, null, null, null, null);
                     if ( errs == null || errs.length == 0 ) {
                         this.ruleBaseCache.put( item.getUUID(),
                                                 loadRuleBase( item,
@@ -2291,8 +2301,7 @@
             PackageItem pkg = (PackageItem) pkit.next();
             try {
                 BuilderResult[] res = this.buildPackage( pkg.getUUID(),
-                                                         "",
-                                                         true );
+                                                         true, null, null, null, null );
                 if ( res != null ) {
                     errs.append( "Unable to build package name [" + pkg.getName() + "]\n" );
                     StringBuffer buf = new StringBuffer();

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/builder/ContentPackageAssembler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/builder/ContentPackageAssembler.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/builder/ContentPackageAssembler.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
 import org.drools.builder.conf.DefaultPackageNameOption;
 import org.drools.compiler.DroolsError;
 import org.drools.compiler.DroolsParserException;
@@ -33,6 +34,8 @@
 import org.drools.guvnor.server.contenthandler.IRuleAsset;
 import org.drools.guvnor.server.selector.AssetSelector;
 import org.drools.guvnor.server.selector.SelectorManager;
+import org.drools.guvnor.server.selector.BuiltInSelector;
+import org.drools.guvnor.server.util.LoggingHelper;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.repository.AssetItem;
 import org.drools.repository.AssetItemIterator;
@@ -49,6 +52,7 @@
  * @author Michael Neale
  */
 public class ContentPackageAssembler {
+	private static final Logger log  = LoggingHelper.getLogger( ContentPackageAssembler.class );
 
 	private PackageItem pkg;
 
@@ -61,7 +65,10 @@
 
 	BRMSPackageBuilder builder;
 
-	private String selectorConfigName;
+	private String customSelectorName;
+	private String buildMode;
+	private String operator;
+	private String statusDescriptionValue;
 
 	/**
 	 * Use this if you want to build the whole package.
@@ -70,7 +77,7 @@
 	 *            The package.
 	 */
 	public ContentPackageAssembler(PackageItem pkg) {
-		this(pkg, null);
+		this(pkg, true);
 	}
 
 	/**
@@ -81,7 +88,7 @@
 	 *            source.
 	 */
 	public ContentPackageAssembler(PackageItem pkg, boolean compile) {
-		this(pkg, compile, null);
+		this(pkg, compile, null, null, null, null);
 	}
 
 	/**
@@ -92,11 +99,14 @@
 	 *            source.
 	 * @param selectorConfigName
 	 */
-	public ContentPackageAssembler(PackageItem assetPackage, boolean compile,
-			String selectorConfigName) {
+	public ContentPackageAssembler(PackageItem assetPackage, boolean compile, String buildMode,
+			String operator, String statusDescriptionValue, String selectorConfigName) {
 
 		this.pkg = assetPackage;
-		this.selectorConfigName = selectorConfigName;
+		this.customSelectorName = selectorConfigName;
+		this.buildMode = buildMode;
+		this.operator = operator;
+		this.statusDescriptionValue = statusDescriptionValue;
 
 		createBuilder();
 
@@ -106,18 +116,6 @@
 	}
 
 	/**
-	 * Use this if you want to build the whole package.
-	 * 
-	 * @param assetPackage
-	 *            The package to build
-	 * 
-	 */
-	public ContentPackageAssembler(PackageItem assetPackage,
-			String selectorConfigName) {
-		this(assetPackage, true, selectorConfigName);
-	}
-
-	/**
 	 * Use this if you want to build and compile just the one asset.
 	 */
 	public ContentPackageAssembler(AssetItem assetToBuild) {
@@ -161,20 +159,33 @@
      * This will always prioritise DRL before other assets.
 	 */
 	private void buildPackage() {
-		AssetSelector selector = SelectorManager.getInstance().getSelector(
-				selectorConfigName);
+		AssetSelector selector = null;
+		if("customSelector".equals(buildMode)) {
+			selector = SelectorManager.getInstance().getSelector(customSelectorName);			
+		} else if ("builtInSelector".equals(buildMode)) {
+			selector = (BuiltInSelector)SelectorManager.getInstance().getSelector(
+			"BuiltInSelector");
+	        ((BuiltInSelector)selector).setOperator(operator);
+	        ((BuiltInSelector)selector).setStatus(statusDescriptionValue);			
+		} else {
+			//return the NilSelector, i.e., allows everything
+			selector = SelectorManager.getInstance().getSelector(null);				
+		}
+		
 		if (selector == null) {
 			this.errors.add(new ContentAssemblyError(this.pkg,
-					"The selector named " + selectorConfigName
+					"The selector named " + customSelectorName
 							+ " is not available."));
 			return;
 		}
         
+		StringBuffer includedAssets = new StringBuffer("Following assets have been included in package build: ");
         Iterator<AssetItem> drls = pkg.listAssetsByFormat(new String[]{AssetFormats.DRL});
         while (drls.hasNext()) {
             AssetItem asset = (AssetItem) drls.next();
             if (!asset.isArchived() && (selector.isAssetAllowed(asset))) {
                 buildAsset(asset);
+                includedAssets.append(asset.getName() + ", ");
             }
         }
 		Iterator<AssetItem> it = pkg.getAssets();
@@ -182,8 +193,10 @@
 			AssetItem asset = (AssetItem) it.next();
 			if (!asset.getFormat().equals(AssetFormats.DRL) && !asset.isArchived() && (selector.isAssetAllowed(asset))) {
 				buildAsset(asset);
+	            includedAssets.append(asset.getName() + ", ");
 			}
 		}
+		log.info(includedAssets.toString());
 	}
 
 	/**

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/selector/SelectorManager.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/selector/SelectorManager.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/selector/SelectorManager.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -1,10 +1,13 @@
 package org.drools.guvnor.server.selector;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 import org.apache.log4j.Logger;
 import org.drools.repository.AssetItem;
@@ -21,13 +24,12 @@
      */
 	public final Map<String, AssetSelector> selectors = new HashMap<String, AssetSelector>();
 
-
-
 	SelectorManager(String configPath) {
 		log.debug("Loading selectors");
 		Properties props = new Properties();
 		try {
 			props.load(this.getClass().getResourceAsStream(configPath));
+		    props.put("BuiltInSelector", "org.drools.guvnor.server.selector.BuiltInSelector");
 			for (Iterator iter = props.keySet().iterator(); iter.hasNext();) {
 				String selectorName = (String) iter.next();
 				String val = props.getProperty(selectorName);
@@ -37,7 +39,7 @@
                     } else {
                         selectors.put(selectorName, loadSelectorImplementation( val ));
                     }
-                } catch (RuntimeException e) {
+                } catch (Exception e) {
                     log.error("Unable to load a selector [" + val + "]", e);
                 }
 			}
@@ -48,14 +50,13 @@
 
     /**
      * Return a selector. If the name is null or empty it will return a nil/default selector
-     * (one that lets everything through). If the selector iis not found, it will return null;
+     * (one that lets everything through). If the selector is not found, it will return null;
      */
     public AssetSelector getSelector(String name) {
         if (name == null || "".equals(name.trim())) {
             return nilSelector();
         } else {
             if (this.selectors.containsKey( name )) {
-
                 return this.selectors.get( name );
             } else {
                 log.debug( "No selector found by the name of " + name );
@@ -63,9 +64,16 @@
             }
         }
     }
+    
+    public String[] getCustomSelectors() {
+    	 Set<String> s = selectors.keySet();    	 
+    	 List<String> selectorList = new ArrayList<String>();
+    	 selectorList.addAll(s);    	 
+    	 selectorList.remove("BuiltInSelector");
+    	 String[] result = new String[selectorList.size()];
+    	 return selectorList.toArray(result);
+    }
 
-
-
 	private AssetSelector nilSelector() {
         return new AssetSelector() {
             public boolean isAssetAllowed(AssetItem asset) {
@@ -74,37 +82,16 @@
         };
     }
 
-    private AssetSelector loadSelectorImplementation(String val) throws IOException {
+    private AssetSelector loadSelectorImplementation(String val) throws Exception {
+        return (AssetSelector) Thread.currentThread().getContextClassLoader().loadClass( val ).newInstance();
+ 	}
 
-		try {
-            return (AssetSelector) Thread.currentThread().getContextClassLoader().loadClass( val ).newInstance();
-
-        } catch ( InstantiationException e ) {
-            log.error( e );
-            return null;
-        } catch ( IllegalAccessException e ) {
-            log.error( e );
-            return null;
-        } catch ( ClassNotFoundException e ) {
-            log.error( e );
-            return null;
-        }
-
-	}
-
-
-
-
 	private AssetSelector loadRuleSelector(String val) {
 
 		return new RuleBasedSelector(val);
 	}
 
-
-
-
 	public static SelectorManager getInstance() {
 		return INSTANCE;
 	}
-
 }

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/PopulateDataTest.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -67,7 +67,7 @@
 
         PackageItem pkg = serv.repository.loadPackage("com.billasurf.manufacturing.plant");
 
-        serv.buildPackage(pkg.getUUID(), null, true);
+        serv.buildPackage(pkg.getUUID(), true);
 
     }
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -1267,7 +1267,7 @@
 				.updateContent(" rule abc \n when \n then \n System.out.println(42); \n end");
 		item.checkin("");
 
-		BuilderResult[] res = impl.buildPackage(pkg.getUUID(), "", true);
+		BuilderResult[] res = impl.buildPackage(pkg.getUUID(), true, null, null, null, "");
 		assertNull(res);
 
 		impl.createPackageSnapshot("testSnapshotRebuild", "SNAP", false, "");
@@ -1598,7 +1598,7 @@
 		rule1.checkin("");
 		repo.save();
 
-		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), null, true);
+		BuilderResult[] results = impl.buildPackage(pkg.getUUID(),true);
 		assertNull(results);
 
 		pkg = repo.loadPackage("testBinaryPackageCompile");
@@ -1630,7 +1630,7 @@
 				.updateContent("rule 'rule1' \n when p:PersonX() \n then System.err.println(42); \n end");
 		rule1.checkin("");
 
-		results = impl.buildPackage(pkg.getUUID(), null, true);
+		results = impl.buildPackage(pkg.getUUID(), true);
 		assertNotNull(results);
 		assertEquals(1, results.length);
 		assertEquals(rule1.getName(), results[0].assetName);
@@ -1639,7 +1639,7 @@
 		assertEquals(rule1.getUUID(), results[0].uuid);
 
 		pkg = repo.loadPackageSnapshot("testBinaryPackageCompile", "SNAP1");
-		results = impl.buildPackage(pkg.getUUID(), null, true);
+		results = impl.buildPackage(pkg.getUUID(),true);
 		assertNull(results);
 
 	}
@@ -1681,7 +1681,7 @@
 		rule2.checkin("");
 		repo.save();
 
-		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), null, true);
+		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), true);
 		if (results != null) {
 			for (int i = 0; i < results.length; i++) {
 				System.err.println(results[i].message);
@@ -1725,7 +1725,7 @@
 		rule2.updateContent(BRXMLPersistence.getInstance().marshal(model));
 		rule2.checkin("");
 
-		results = impl.buildPackage(pkg.getUUID(), null, true);
+		results = impl.buildPackage(pkg.getUUID(), true);
 		assertNotNull(results);
 		assertTrue(results.length > 0);
 		// assertEquals(2, results.length);
@@ -1735,7 +1735,7 @@
 		assertEquals(rule2.getUUID(), results[0].uuid);
 
 		pkg = repo.loadPackageSnapshot("testBinaryPackageCompileBRL", "SNAP1");
-		results = impl.buildPackage(pkg.getUUID(), null, true);
+		results = impl.buildPackage(pkg.getUUID(), true);
 		assertNull(results);
 
 		// check that the rule name in the model is being set
@@ -2180,7 +2180,7 @@
 		assertFalse(impl.ruleBaseCache.containsKey(pkg.getUUID()));
 		impl.ruleBaseCache.remove("XXX");
 
-		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), null, true);
+		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), true);
 		assertNull(results);
 
 		pkg = repo.loadPackage("testBinaryPackageUpToDate");
@@ -2200,7 +2200,7 @@
 				.getBoolean());
 		assertFalse(impl.ruleBaseCache.containsKey(pkg.getUUID()));
 
-		impl.buildPackage(pkg.getUUID(), null, false);
+		impl.buildPackage(pkg.getUUID(), false);
 
 		assertTrue(pkg.getNode().getProperty("drools:binaryUpToDate")
 				.getBoolean());
@@ -2212,7 +2212,7 @@
 		assertFalse(pkg.getNode().getProperty("drools:binaryUpToDate")
 				.getBoolean());
 		assertFalse(pkg.isBinaryUpToDate());
-		impl.buildPackage(pkg.getUUID(), null, false);
+		impl.buildPackage(pkg.getUUID(), false);
 		assertTrue(pkg.getNode().getProperty("drools:binaryUpToDate")
 				.getBoolean());
 		assertTrue(pkg.isBinaryUpToDate());
@@ -2778,7 +2778,7 @@
 		ass.content = dt;
 		impl.checkinVersion(ass);
 
-		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), null, true);
+		BuilderResult[] results = impl.buildPackage(pkg.getUUID(), true);
 		assertNull(results);
 
 		pkg = repo.loadPackage("testGuidedDTCompile");

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/builder/ContentPackageAssemblerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/builder/ContentPackageAssemblerTest.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/builder/ContentPackageAssemblerTest.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -599,7 +599,7 @@
 
         ContentPackageAssembler asm = new ContentPackageAssembler( pkg,
                                                                    false,
-                                                                   null );
+                                                                   null, null, null, null );
         String drl = asm.getDRL();
 
         assertNotNull( drl );
@@ -710,7 +710,7 @@
 
         ContentPackageAssembler asm = new ContentPackageAssembler( pkg,
                                                                    true,
-                                                                   null );
+                                                                   null, null, null, null );
         assertFalse( asm.hasErrors() );
         Package p = asm.builder.getPackage();
 
@@ -938,8 +938,8 @@
                               }
                           } );
 
-        ContentPackageAssembler asm = new ContentPackageAssembler( pkg,
-                                                                   "testSelect" );
+        ContentPackageAssembler asm = new ContentPackageAssembler( pkg, true, 
+                                                                   "customSelector", null, null, "testSelect");
 
         Package pk = asm.getBinaryPackage();
         assertEquals( 1,
@@ -948,12 +948,12 @@
                       pk.getRules()[0].getName() );
 
         asm = new ContentPackageAssembler( pkg,
-                                           null );
+                                           true );
         pk = asm.getBinaryPackage();
         assertEquals( 2,
                       pk.getRules().length );
 
-        asm = new ContentPackageAssembler( pkg,
+        asm = new ContentPackageAssembler( pkg, true, "customSelector", null, null,
                                            "nothing valid" );
         assertTrue( asm.hasErrors() );
         assertEquals( 1,
@@ -961,7 +961,7 @@
         assertEquals( pkg,
                       asm.getErrors().get( 0 ).itemInError );
 
-        asm = new ContentPackageAssembler( pkg,
+        asm = new ContentPackageAssembler( pkg, true, "customSelector", null, null,
                                            "" );
         pk = asm.getBinaryPackage();
         assertEquals( 2,
@@ -969,15 +969,11 @@
 
     }
 
-
-
-
     private void assertContains(String sub,
                                 String text) {
         if ( text.indexOf( sub ) == -1 ) {
             fail( "the text: '" + sub + "' was not found." );
         }
-
     }
 
     private void assertDoesNotContain(String sub,

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/PackageDeploymentServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/PackageDeploymentServletTest.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/files/PackageDeploymentServletTest.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -49,7 +49,7 @@
 		asset.updateFormat(AssetFormats.DRL);
 		asset.checkin("");
 
-		assertNull(impl.buildPackage(pkg.getUUID(), null, true));
+		assertNull(impl.buildPackage(pkg.getUUID(), true));
 
 
 
@@ -228,7 +228,7 @@
         asset.updateFormat(AssetFormats.DRL);
         asset.checkin("");
 
-        assertNull(impl.buildPackage(pkg.getUUID(), null, true));
+        assertNull(impl.buildPackage(pkg.getUUID(), true));
 
 
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/selector/SelectorManagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/selector/SelectorManagerTest.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/selector/SelectorManagerTest.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -42,11 +42,24 @@
 
 
         assertSame( SelectorManager.getInstance(), SelectorManager.getInstance());
+    }
 
+    public void testGetBuiltInSelector() {
+        SelectorManager sm = SelectorManager.getInstance();
+        assertNotNull(sm);
+        assertNotNull(sm.selectors);
 
+        assertTrue(sm.getSelector( "BuiltInSelector" ) instanceof BuiltInSelector);
+    }
+    
+    public void testGetCustomSelectors() {
+        SelectorManager sm = SelectorManager.getInstance();
+        assertNotNull(sm);
+        assertNotNull(sm.selectors);
 
+        assertEquals(2, sm.getCustomSelectors().length);
     }
-
+    
     public void testBadConfig() throws Exception {
         SelectorManager sm = new SelectorManager("/badselectors.properties");
 

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/LinkedAssetItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/LinkedAssetItem.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/LinkedAssetItem.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -75,6 +75,13 @@
                null );
     }
     
+    public boolean isLinkedAssetItem() {
+		if (wrapperNode == null) {
+			return false;
+		} 
+		return true;    	
+    }
+    
     /**
      * @return A unique identifier for this items content node.
      * return the UUID of the wrapper node. 

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2009-10-13 10:56:59 UTC (rev 29588)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/PackageItemTest.java	2009-10-13 10:59:00 UTC (rev 29589)
@@ -609,6 +609,40 @@
         assertTrue(list2.get( 2 ) instanceof AssetItem);
     }
 
+    public void testSearchLinkedAssetByFormat() throws Exception {
+        PackageItem pkg1 = getRepo().createPackage( "testSearchLinkedAssetByFormat1", "" );
+        PackageItem pkg2 = getRepo().createPackage( "testSearchLinkedAssetByFormat2", "" );
+        getRepo().save();
+
+        AssetItem item = pkg1.addAsset( "testSearchLinkedAssetByFormatAsset1", "" );
+        item.updateFormat( "xyz" );
+        item.checkin( "la" );
+        
+        AssetItem linkedItem = pkg2.addLinkedAsset( "testSearchLinkedAssetByFormatAsset2", item.getUUID(), null);
+        linkedItem.updateFormat( "xyz" );
+        linkedItem.checkin( "la" );
+
+        Thread.sleep( 150 );
+
+        AssetItemIterator it = pkg1.queryAssets( "drools:format='xyz'" );
+        List list = iteratorToList( it );
+        assertEquals(1, list.size());
+        assertTrue(list.get( 0 ) instanceof AssetItem);
+ 
+        linkedItem = pkg2.loadAsset("testSearchLinkedAssetByFormatAsset2");
+        assertNotNull(linkedItem);
+        assertTrue(linkedItem instanceof LinkedAssetItem);
+        assertTrue(((LinkedAssetItem)linkedItem).isLinkedAssetItem());
+        assertEquals("testSearchLinkedAssetByFormat2", linkedItem.getPackageName());
+       	
+        it = pkg2.queryAssets( "drools:format='xyz'" );
+        list = iteratorToList( it );
+        
+        //REVISIT: Not working yet.
+        //assertEquals(1, list.size());
+        //assertTrue(list.get( 0 ) instanceof AssetItem);
+    }
+    
     public void testListArchivedAssets() throws Exception {
         PackageItem pkg = getRepo().createPackage( "org.drools.archivedtest", "" );
         getRepo().save();



More information about the jboss-svn-commits mailing list