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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Nov 5 03:26:50 EST 2008


Author: Rikkola
Date: 2008-11-05 03:26:50 -0500 (Wed, 05 Nov 2008)
New Revision: 23707

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StatusEditor.java
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StateManager.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-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
Log:
GUVNOR-51: Add rename/delete status

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StateManager.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StateManager.java	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StateManager.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -1,4 +1,5 @@
 package org.drools.guvnor.client.admin;
+
 /*
  * Copyright 2005 JBoss Inc
  *
@@ -15,13 +16,13 @@
  * limitations under the License.
  */
 
-
-
 import org.drools.guvnor.client.common.GenericCallback;
 import org.drools.guvnor.client.common.LoadingPopup;
 import org.drools.guvnor.client.common.PrettyFormLayout;
 import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
 
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
@@ -35,26 +36,105 @@
 
     private ListBox currentStatuses;
 
-
     public StateManager() {
         PrettyFormLayout form = new PrettyFormLayout();
-        form.addHeader("images/status_large.png", new HTML("<b>Manage statuses</b>"));
-        form.startSection("Status tags are for the lifecycle of an asset.");
+        form.addHeader( "images/status_large.png",
+                        new HTML( "<b>Manage statuses</b>" ) );
+        form.startSection( "Status tags are for the lifecycle of an asset." );
 
-
         currentStatuses = new ListBox();
         currentStatuses.setVisibleItemCount( 7 );
         currentStatuses.setWidth( "50%" );
 
-        refreshList( );
+        refreshList();
 
-        form.addAttribute( "Current statuses:", currentStatuses );
+        form.addAttribute( "Current statuses:",
+                           currentStatuses );
 
-        form.addAttribute( "Add new status:", newStatusEditor() );
+        HorizontalPanel hPanel = new HorizontalPanel();
+        Button create = new Button( "New status" );
+        create.setTitle( "Create a new category" );
+        create.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                StatusEditor newCat = new StatusEditor( new Command() {
+                    public void execute() {
+                        refreshList();
+                    }
+                } );
+
+                newCat.show();
+            }
+        } );
+
+        Button edit = new Button( "Rename selected" );
+        edit.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+
+                if ( !currentStatuses.isItemSelected( currentStatuses.getSelectedIndex() ) ) {
+                    Window.alert( "Please select a status to rename." );
+                    return;
+                }
+                renameSelected();
+
+            }
+        } );
+
+        Button remove = new Button( "Delete selected" );
+        remove.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+
+                if ( !currentStatuses.isItemSelected( currentStatuses.getSelectedIndex() ) ) {
+                    Window.alert( "Please select a status to remove." );
+                    return;
+                }
+                
+                removeStatus();
+
+            }
+
+        } );
+        hPanel.add( create );
+        hPanel.add( edit );
+        hPanel.add( remove );
+
+        form.addAttribute( "Add new status:",
+                           hPanel );
+
         form.endSection();
         initWidget( form );
     }
 
+    private void removeStatus() {
+        String name = currentStatuses.getItemText( currentStatuses.getSelectedIndex() );
+
+        RepositoryServiceFactory.getService().removeState( name,
+                                                           new GenericCallback() {
+                                                               public void onSuccess(Object data) {
+                                                                   Window.alert( "Status removed." );
+                                                                   refreshList();
+                                                               }
+                                                           } );
+    }
+    
+    private void renameSelected() {
+
+        String newName = Window.prompt( "Please enter the name you would like to change this status to",
+                                        "" );
+
+        String oldName = currentStatuses.getItemText( currentStatuses.getSelectedIndex() );
+
+        if ( newName != null ) {
+            RepositoryServiceFactory.getService().renameState( oldName,
+                                                               newName,
+                                                               new GenericCallback() {
+                                                                   public void onSuccess(Object data) {
+                                                                       Window.alert( "Status renamed." );
+                                                                       refreshList();
+                                                                   }
+                                                               } );
+        }
+    }
+
     private void refreshList() {
         LoadingPopup.showMessage( "Loading statuses..." );
         RepositoryServiceFactory.getService().listStates( new GenericCallback() {
@@ -66,37 +146,7 @@
                 }
                 LoadingPopup.close();
             }
-        });
+        } );
     }
 
-    private Widget newStatusEditor() {
-        HorizontalPanel horiz = new HorizontalPanel();
-        final TextBox box = new TextBox();
-
-        Button create = new Button("Create");
-        create.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                createStatus(box);
-            }
-        });
-
-        horiz.add( box );
-        horiz.add( create );
-
-        return horiz;
-    }
-
-
-    private void createStatus(final TextBox box) {
-        LoadingPopup.showMessage( "Creating status" );
-        RepositoryServiceFactory.getService().createState( box.getText(), new GenericCallback() {
-            public void onSuccess(Object data) {
-                box.setText( "" );
-                refreshList();
-                LoadingPopup.close();
-            }
-        });
-
-    }
-
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StatusEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StatusEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StatusEditor.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -0,0 +1,94 @@
+package org.drools.guvnor.client.admin;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.guvnor.client.common.ErrorPopup;
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.common.GenericCallback;
+import org.drools.guvnor.client.common.LoadingPopup;
+import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This provides a popup for editing a status (name etc).
+ * Mainly this is for creating a new status.
+ */
+public class StatusEditor extends FormStylePopup {
+
+    private TextBox name = new TextBox();
+    private Command refresh;
+
+    public StatusEditor(Command refresh) {
+        super( "images/edit_category.gif",
+               "Create new status" );
+        // TODO: Edit status image
+        this.refresh = refresh;
+
+        addAttribute( "Status name",
+                      name );
+
+        Button ok = new Button( "OK" );
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget arg0) {
+                ok();
+            }
+
+        } );
+        addAttribute( "",
+                      ok );
+    }
+
+    void ok() {
+
+        if ( "".equals( this.name.getText() ) ) {
+            ErrorPopup.showMessage( "Can't have an empty status name." );
+        } else {
+            createStatus( name );
+        }
+    }
+
+    private void createStatus(final TextBox box) {
+        LoadingPopup.showMessage( "Creating status" );
+        RepositoryServiceFactory.getService().createState( box.getText(),
+                                                           new GenericCallback() {
+                                                               public void onSuccess(Object data) {
+                                                                   if ( data != null ) {
+                                                                       if ( refresh != null ) {
+                                                                           box.setText( "" );
+                                                                           LoadingPopup.close();
+                                                                           hide();
+                                                                           refresh.execute();
+                                                                       }
+                                                                   } else {
+
+                                                                       ErrorPopup.showMessage( "Status was not successfully created. " );
+
+                                                                   }
+                                                               }
+                                                           } );
+
+    }
+
+    void cancel() {
+        hide();
+    }
+}
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/StatusEditor.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

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	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -172,6 +172,21 @@
      * @return the UUID of the created StateItem.
      */
     public String createState(String name) throws SerializableException;
+    
+    /**
+     * Renames a state.
+     * @param oldName states old name.
+     * @param newName states new name.
+     * @throws SerializableException
+     */
+    public void renameState(String oldName, String newName) throws SerializableException;
+    
+    /**
+     * Removes a state.
+     * @param name state name that will be removed.
+     * @throws SerializableException
+     */
+    public void removeState(String name) throws SerializableException;
 
 
     /**

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	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -32,69 +32,69 @@
     extends
     RemoteService {
 
-	/** PLACE THE FOLLOWING IN RepositoryServiceAsync.java **/
+    /** PLACE THE FOLLOWING IN RepositoryServiceAsync.java **/
 
-	/** PLACE THE FOLLOWING IN RepositoryServiceAsync.java **/
-
-	/** Generated by AsyncInterfaceGenerator hackery */
-	public void loadChildCategories(java.lang.String p0, AsyncCallback cb);
-	public void loadRuleListForCategories(java.lang.String p0, int p1, int p2, java.lang.String p3, AsyncCallback cb);
-	public void loadRuleListForState(java.lang.String p0, int p1, int p2, java.lang.String p3, AsyncCallback cb);
-	public void loadTableConfig(java.lang.String p0, AsyncCallback cb);
-	public void createCategory(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
-	public void createNewRule(java.lang.String p0, java.lang.String p1, java.lang.String p2, java.lang.String p3, java.lang.String p4, AsyncCallback cb);
-	public void deleteUncheckedRule(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
-	public void clearRulesRepository(AsyncCallback cb);
-	public void listPackages(AsyncCallback cb);
-	public void listArchivedPackages(AsyncCallback cb);
-	public void loadRuleAsset(java.lang.String p0, AsyncCallback cb);
-	public void loadAssetHistory(java.lang.String p0, AsyncCallback cb);
-	public void loadArchivedAssets(int p0, int p1, AsyncCallback cb);
-	public void checkinVersion(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback cb);
-	public void restoreVersion(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
-	public void createPackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
-	public void loadPackageConfig(java.lang.String p0, AsyncCallback cb);
-	public void savePackage(org.drools.guvnor.client.rpc.PackageConfigData p0, AsyncCallback cb);
-	public void listAssets(java.lang.String p0, java.lang.String[] p1, int p2, int p3, java.lang.String p4, AsyncCallback cb);
-	public void listStates(AsyncCallback cb);
-	public void createState(java.lang.String p0, AsyncCallback cb);
-	public void changeState(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback cb);
-	public void changeAssetPackage(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
-	public void copyAsset(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
-	public void copyPackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
-	public void listSnapshots(java.lang.String p0, AsyncCallback cb);
-	public void createPackageSnapshot(java.lang.String p0, java.lang.String p1, boolean p2, java.lang.String p3, AsyncCallback cb);
-	public void copyOrRemoveSnapshot(java.lang.String p0, java.lang.String p1, boolean p2, java.lang.String p3, AsyncCallback cb);
-	public void quickFindAsset(java.lang.String p0, int p1, boolean p2, AsyncCallback cb);
-	public void removeCategory(java.lang.String p0, AsyncCallback cb);
-	public void loadSuggestionCompletionEngine(java.lang.String p0, AsyncCallback cb);
-	public void buildPackage(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback cb);
-	public void buildPackageSource(java.lang.String p0, AsyncCallback cb);
-	public void buildAssetSource(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback cb);
-	public void buildAsset(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback cb);
-	public void renameAsset(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
-	public void renameCategory(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
-	public void archiveAsset(java.lang.String p0, boolean p1, AsyncCallback cb);
-	public void removeAsset(java.lang.String p0, AsyncCallback cb);
-	public void removePackage(java.lang.String p0, AsyncCallback cb);
-	public void renamePackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
-	public void rebuildSnapshots(AsyncCallback cb);
-	public void rebuildPackages(AsyncCallback cb);
-	public void listRulesInPackage(java.lang.String p0, AsyncCallback cb);
-	public void runScenario(java.lang.String p0, org.drools.guvnor.client.modeldriven.testing.Scenario p1, AsyncCallback<SingleScenarioResult> cb);
-	public void runScenariosInPackage(java.lang.String p0, AsyncCallback cb);
-	public void analysePackage(java.lang.String p0, AsyncCallback cb);
-	public void listTypesInPackage(java.lang.String p0, AsyncCallback cb);
-	public void showLog(AsyncCallback cb);
-	public void loadDropDownExpression(java.lang.String[] p0, java.lang.String p1, AsyncCallback cb);
-	public void queryFullText(java.lang.String p0, boolean p1, int p2, int p3, AsyncCallback cb);
-	public void queryMetaData(org.drools.guvnor.client.rpc.MetaDataQuery[] p0, java.util.Date p1, java.util.Date p2, java.util.Date p3, java.util.Date p4, boolean p5, int p6, int p7, AsyncCallback cb);
-	public void listUserPermissions(AsyncCallback cb);
-	public void retrieveUserPermissions(java.lang.String p0, AsyncCallback cb);
-	public void updateUserPermissions(java.lang.String p0, java.util.Map p1, AsyncCallback cb);
-	public void listAvailablePermissionTypes(AsyncCallback cb);
-	public void deleteUser(java.lang.String p0, AsyncCallback cb);
-	public void getAssetLockerUserName(java.lang.String p0, AsyncCallback cb);
+    /** Generated by AsyncInterfaceGenerator hackery */
+    public void loadChildCategories(java.lang.String p0, AsyncCallback cb);
+    public void loadRuleListForCategories(java.lang.String p0, int p1, int p2, java.lang.String p3, AsyncCallback cb);
+    public void loadRuleListForState(java.lang.String p0, int p1, int p2, java.lang.String p3, AsyncCallback cb);
+    public void loadTableConfig(java.lang.String p0, AsyncCallback cb);
+    public void createCategory(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
+    public void createNewRule(java.lang.String p0, java.lang.String p1, java.lang.String p2, java.lang.String p3, java.lang.String p4, AsyncCallback cb);
+    public void deleteUncheckedRule(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void clearRulesRepository(AsyncCallback cb);
+    public void listPackages(AsyncCallback cb);
+    public void listArchivedPackages(AsyncCallback cb);
+    public void loadRuleAsset(java.lang.String p0, AsyncCallback cb);
+    public void loadAssetHistory(java.lang.String p0, AsyncCallback cb);
+    public void loadArchivedAssets(int p0, int p1, AsyncCallback cb);
+    public void checkinVersion(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback cb);
+    public void restoreVersion(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
+    public void createPackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void loadPackageConfig(java.lang.String p0, AsyncCallback cb);
+    public void savePackage(org.drools.guvnor.client.rpc.PackageConfigData p0, AsyncCallback cb);
+    public void listAssets(java.lang.String p0, java.lang.String[] p1, int p2, int p3, java.lang.String p4, AsyncCallback cb);
+    public void listStates(AsyncCallback cb);
+    public void createState(java.lang.String p0, AsyncCallback cb);
+    public void renameState(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void removeState(java.lang.String p0, AsyncCallback cb);
+    public void changeState(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback cb);
+    public void changeAssetPackage(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
+    public void copyAsset(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
+    public void copyPackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void listSnapshots(java.lang.String p0, AsyncCallback cb);
+    public void createPackageSnapshot(java.lang.String p0, java.lang.String p1, boolean p2, java.lang.String p3, AsyncCallback cb);
+    public void copyOrRemoveSnapshot(java.lang.String p0, java.lang.String p1, boolean p2, java.lang.String p3, AsyncCallback cb);
+    public void quickFindAsset(java.lang.String p0, int p1, boolean p2, AsyncCallback cb);
+    public void removeCategory(java.lang.String p0, AsyncCallback cb);
+    public void loadSuggestionCompletionEngine(java.lang.String p0, AsyncCallback cb);
+    public void buildPackage(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback cb);
+    public void buildPackageSource(java.lang.String p0, AsyncCallback cb);
+    public void buildAssetSource(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback cb);
+    public void buildAsset(org.drools.guvnor.client.rpc.RuleAsset p0, AsyncCallback cb);
+    public void renameAsset(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void renameCategory(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void archiveAsset(java.lang.String p0, boolean p1, AsyncCallback cb);
+    public void removeAsset(java.lang.String p0, AsyncCallback cb);
+    public void removePackage(java.lang.String p0, AsyncCallback cb);
+    public void renamePackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
+    public void rebuildSnapshots(AsyncCallback cb);
+    public void rebuildPackages(AsyncCallback cb);
+    public void listRulesInPackage(java.lang.String p0, AsyncCallback cb);
+    public void runScenario(java.lang.String p0, org.drools.guvnor.client.modeldriven.testing.Scenario p1, AsyncCallback cb);
+    public void runScenariosInPackage(java.lang.String p0, AsyncCallback cb);
+    public void analysePackage(java.lang.String p0, AsyncCallback cb);
+    public void listTypesInPackage(java.lang.String p0, AsyncCallback cb);
+    public void showLog(AsyncCallback cb);
+    public void loadDropDownExpression(java.lang.String[] p0, java.lang.String p1, AsyncCallback cb);
+    public void queryFullText(java.lang.String p0, boolean p1, int p2, int p3, AsyncCallback cb);
+    public void queryMetaData(org.drools.guvnor.client.rpc.MetaDataQuery[] p0, java.util.Date p1, java.util.Date p2, java.util.Date p3, java.util.Date p4, boolean p5, int p6, int p7, AsyncCallback cb);
+    public void listUserPermissions(AsyncCallback cb);
+    public void retrieveUserPermissions(java.lang.String p0, AsyncCallback cb);
+    public void updateUserPermissions(java.lang.String p0, java.util.Map p1, AsyncCallback cb);
+    public void listAvailablePermissionTypes(AsyncCallback cb);
+    public void deleteUser(java.lang.String p0, AsyncCallback cb);
+    public void getAssetLockerUserName(java.lang.String p0, AsyncCallback cb);
     public void lockAsset(java.lang.String p0, AsyncCallback cb);
     public void unLockAsset(java.lang.String p0, AsyncCallback 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	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -14,6 +14,7 @@
 import org.jboss.seam.contexts.Contexts;
 import org.jboss.seam.security.AuthorizationException;
 
+import com.google.gwt.user.client.rpc.SerializableException;
 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 
 /**
@@ -128,6 +129,12 @@
 	public java.lang.String createState(java.lang.String p0) throws com.google.gwt.user.client.rpc.SerializableException {
 		 return getService().createState( p0);
 	}
+    public void removeState(String name) throws SerializableException {
+        getService().removeState( name );
+    }
+    public void renameState(String oldName, String newName) throws SerializableException {
+        getService().renameState( oldName, newName );
+    }
 	public void changeState(java.lang.String p0, java.lang.String p1, boolean p2)  {
 		getService().changeState( p0,  p1,  p2);
 	}
@@ -269,4 +276,5 @@
 
 
 
+
 }

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	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -38,6 +38,7 @@
 import java.util.regex.Pattern;
 
 import javax.jcr.ItemExistsException;
+import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
 import org.apache.commons.io.IOUtils;
@@ -139,1955 +140,1999 @@
  */
 @Name("org.drools.guvnor.client.rpc.RepositoryService")
 @AutoCreate
-public class ServiceImplementation implements RepositoryService {
+public class ServiceImplementation
+    implements
+    RepositoryService {
 
-	@In
-	public RulesRepository repository;
+    @In
+    public RulesRepository          repository;
 
-	private static final long serialVersionUID = 400L;
+    private static final long       serialVersionUID = 400L;
 
-	private static final DateFormat dateFormatter = DateFormat.getInstance();
+    private static final DateFormat dateFormatter    = DateFormat.getInstance();
 
-	private static final Logger log = LoggingHelper.getLogger();
+    private static final Logger     log              = LoggingHelper.getLogger();
 
-	private MetaDataMapper metaDataMapper = new MetaDataMapper();
+    private MetaDataMapper          metaDataMapper   = new MetaDataMapper();
 
-	/**
-	 * Used for a simple cache of binary packages to avoid serialization from
-	 * the database - for test scenarios.
-	 */
-	static Map<String, RuleBase> ruleBaseCache = Collections
-			.synchronizedMap(new HashMap<String, RuleBase>());
+    /**
+     * Used for a simple cache of binary packages to avoid serialization from
+     * the database - for test scenarios.
+     */
+    static Map<String, RuleBase>    ruleBaseCache    = Collections.synchronizedMap( new HashMap<String, RuleBase>() );
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String[] loadChildCategories(String categoryPath) {
-		List<String> resultList = new ArrayList<String>();
-		CategoryFilter filter = new CategoryFilter();
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String[] loadChildCategories(String categoryPath) {
+        List<String> resultList = new ArrayList<String>();
+        CategoryFilter filter = new CategoryFilter();
 
-		CategoryItem item = repository.loadCategory(categoryPath);
-		List children = item.getChildTags();
-		for (int i = 0; i < children.size(); i++) {
-			String childCategoryName = ((CategoryItem) children.get(i)).getName();
-			if (filter.acceptNavigate(categoryPath, childCategoryName)) {
-				resultList.add(childCategoryName);
-			}
-		}
+        CategoryItem item = repository.loadCategory( categoryPath );
+        List children = item.getChildTags();
+        for ( int i = 0; i < children.size(); i++ ) {
+            String childCategoryName = ((CategoryItem) children.get( i )).getName();
+            if ( filter.acceptNavigate( categoryPath,
+                                        childCategoryName ) ) {
+                resultList.add( childCategoryName );
+            }
+        }
 
-		String[] resultArr = resultList.toArray(new String[resultList.size()]);
-		return resultArr;
-	}
+        String[] resultArr = resultList.toArray( new String[resultList.size()] );
+        return resultArr;
+    }
 
-	@WebRemote
-	public Boolean createCategory(String path, String name, String description) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+    @WebRemote
+    public Boolean createCategory(String path,
+                                  String name,
+                                  String description) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CREATING cateogory: [" + name + "] in path [" + path + "]");
+        log.info( "USER:" + repository.getSession().getUserID() + " CREATING cateogory: [" + name + "] in path [" + path + "]" );
 
-		if (path == null || "".equals(path)) {
-			path = "/";
-		}
+        if ( path == null || "".equals( path ) ) {
+            path = "/";
+        }
 
-		CategoryItem item = repository.loadCategory(path);
-		item.addCategory(name, description);
-		repository.save();
-		return Boolean.TRUE;
-	}
+        CategoryItem item = repository.loadCategory( path );
+        item.addCategory( name,
+                          description );
+        repository.save();
+        return Boolean.TRUE;
+    }
 
-	/**
-	 * This will create a new asset. It will be saved, but not checked in. The
-	 * initial state will be the draft state.
-	 */
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String createNewRule(String ruleName, String description,
-			String initialCategory, String initialPackage, String format)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(initialPackage),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+    /**
+     * This will create a new asset. It will be saved, but not checked in. The
+     * initial state will be the draft state.
+     */
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String createNewRule(String ruleName,
+                                String description,
+                                String initialCategory,
+                                String initialPackage,
+                                String format) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( initialPackage ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CREATING new asset name [" + ruleName + "] in package ["
-				+ initialPackage + "]");
+        log.info( "USER:" + repository.getSession().getUserID() + " CREATING new asset name [" + ruleName + "] in package [" + initialPackage + "]" );
 
-		try {
+        try {
 
-			PackageItem pkg = repository.loadPackage(initialPackage);
-			AssetItem asset = pkg.addAsset(ruleName, description,
-					initialCategory, format);
+            PackageItem pkg = repository.loadPackage( initialPackage );
+            AssetItem asset = pkg.addAsset( ruleName,
+                                            description,
+                                            initialCategory,
+                                            format );
 
-			applyPreBuiltTemplates(ruleName, format, asset);
-			repository.save();
+            applyPreBuiltTemplates( ruleName,
+                                    format,
+                                    asset );
+            repository.save();
 
-			return asset.getUUID();
-		} catch (RulesRepositoryException e) {
-			if (e.getCause() instanceof ItemExistsException) {
-				return "DUPLICATE";
-			} else {
-				log.error(e);
-				throw new SerializableException(e.getMessage());
-			}
-		}
+            return asset.getUUID();
+        } catch ( RulesRepositoryException e ) {
+            if ( e.getCause() instanceof ItemExistsException ) {
+                return "DUPLICATE";
+            } else {
+                log.error( e );
+                throw new SerializableException( e.getMessage() );
+            }
+        }
 
-	}
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void deleteUncheckedRule(String uuid, String initialPackage) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.PACKAGE_ADMIN);
-		}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void deleteUncheckedRule(String uuid,
+                                    String initialPackage) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.PACKAGE_ADMIN );
+        }
 
-		AssetItem asset = repository.loadAssetByUUID(uuid);
-		asset.remove();
-		repository.save();
-	}
+        AssetItem asset = repository.loadAssetByUUID( uuid );
+        asset.remove();
+        repository.save();
+    }
 
-	/**
-	 * For some format types, we add some sugar by adding a new template.
-	 */
-	private void applyPreBuiltTemplates(String ruleName, String format,
-			AssetItem asset) {
-		if (format.equals(AssetFormats.DSL_TEMPLATE_RULE)) {
-			asset.updateContent("when\n\nthen\n");
-		} else if (format.equals(AssetFormats.FUNCTION)) {
-			asset.updateContent("function <returnType> " + ruleName
-					+ "(<args here>) {\n\n\n}");
-		} else if (format.equals(AssetFormats.DSL)) {
-			asset.updateContent("[when]Condition sentence template {var}="
-					+ "rule language mapping {var}\n"
-					+ "[then]Action sentence template=rule language mapping");
-		} else if (format.equals(AssetFormats.DECISION_SPREADSHEET_XLS)) {
-			asset.updateBinaryContentAttachment(this.getClass()
-					.getResourceAsStream("/SampleDecisionTable.xls"));
-			asset
-					.updateBinaryContentAttachmentFileName("SampleDecisionTable.xls");
-		} else if (format.equals(AssetFormats.DRL)) {
-			asset.updateContent("when\n\t#conditions\nthen\n\t#actions");
-		} else if (format.equals(AssetFormats.ENUMERATION)) {
+    /**
+     * For some format types, we add some sugar by adding a new template.
+     */
+    private void applyPreBuiltTemplates(String ruleName,
+                                        String format,
+                                        AssetItem asset) {
+        if ( format.equals( AssetFormats.DSL_TEMPLATE_RULE ) ) {
+            asset.updateContent( "when\n\nthen\n" );
+        } else if ( format.equals( AssetFormats.FUNCTION ) ) {
+            asset.updateContent( "function <returnType> " + ruleName + "(<args here>) {\n\n\n}" );
+        } else if ( format.equals( AssetFormats.DSL ) ) {
+            asset.updateContent( "[when]Condition sentence template {var}=" + "rule language mapping {var}\n" + "[then]Action sentence template=rule language mapping" );
+        } else if ( format.equals( AssetFormats.DECISION_SPREADSHEET_XLS ) ) {
+            asset.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/SampleDecisionTable.xls" ) );
+            asset.updateBinaryContentAttachmentFileName( "SampleDecisionTable.xls" );
+        } else if ( format.equals( AssetFormats.DRL ) ) {
+            asset.updateContent( "when\n\t#conditions\nthen\n\t#actions" );
+        } else if ( format.equals( AssetFormats.ENUMERATION ) ) {
 
-		}
-	}
+        }
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public PackageConfigData[] listPackages() {
-		RepositoryFilter pf = new PackageFilter();
-		return listPackages(false, pf);
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public PackageConfigData[] listPackages() {
+        RepositoryFilter pf = new PackageFilter();
+        return listPackages( false,
+                             pf );
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public PackageConfigData[] listArchivedPackages() {
-		RepositoryFilter pf = new PackageFilter();
-		return listPackages(true, pf);
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public PackageConfigData[] listArchivedPackages() {
+        RepositoryFilter pf = new PackageFilter();
+        return listPackages( true,
+                             pf );
+    }
 
-	private PackageConfigData[] listPackages(boolean archive,
-			RepositoryFilter filter) {
-		List<PackageConfigData> result = new ArrayList<PackageConfigData>();
-		PackageIterator pkgs = repository.listPackages();
-		pkgs.setArchivedIterator(archive);
-		while (pkgs.hasNext()) {
-			PackageItem pkg = (PackageItem) pkgs.next();
+    private PackageConfigData[] listPackages(boolean archive,
+                                             RepositoryFilter filter) {
+        List<PackageConfigData> result = new ArrayList<PackageConfigData>();
+        PackageIterator pkgs = repository.listPackages();
+        pkgs.setArchivedIterator( archive );
+        while ( pkgs.hasNext() ) {
+            PackageItem pkg = (PackageItem) pkgs.next();
 
-			PackageConfigData data = new PackageConfigData();
-			data.uuid = pkg.getUUID();
-			data.name = pkg.getName();
-			data.archived = pkg.isArchived();
-			if (!archive
-					&& (filter == null || filter.accept(data,
-							RoleTypes.PACKAGE_READONLY))) {
-				result.add(data);
-			} else if (archive
-					&& data.archived
-					&& (filter == null || filter.accept(data,
-							RoleTypes.PACKAGE_READONLY))) {
-				result.add(data);
-			}
-		}
+            PackageConfigData data = new PackageConfigData();
+            data.uuid = pkg.getUUID();
+            data.name = pkg.getName();
+            data.archived = pkg.isArchived();
+            if ( !archive && (filter == null || filter.accept( data,
+                                                               RoleTypes.PACKAGE_READONLY )) ) {
+                result.add( data );
+            } else if ( archive && data.archived && (filter == null || filter.accept( data,
+                                                                                      RoleTypes.PACKAGE_READONLY )) ) {
+                result.add( data );
+            }
+        }
 
-		sortPackages(result);
-		PackageConfigData[] resultArr = result
-				.toArray(new PackageConfigData[result.size()]);
-		return resultArr;
-	}
+        sortPackages( result );
+        PackageConfigData[] resultArr = result.toArray( new PackageConfigData[result.size()] );
+        return resultArr;
+    }
 
-	void sortPackages(List<PackageConfigData> result) {
-		Collections.sort(result, new Comparator<Object>() {
+    void sortPackages(List<PackageConfigData> result) {
+        Collections.sort( result,
+                          new Comparator<Object>() {
 
-			public int compare(final Object o1, final Object o2) {
-				final PackageConfigData d1 = (PackageConfigData) o1;
-				final PackageConfigData d2 = (PackageConfigData) o2;
-				return d1.name.compareTo(d2.name);
-			}
+                              public int compare(final Object o1,
+                                                 final Object o2) {
+                                  final PackageConfigData d1 = (PackageConfigData) o1;
+                                  final PackageConfigData d2 = (PackageConfigData) o2;
+                                  return d1.name.compareTo( d2.name );
+                              }
 
-		});
-	}
+                          } );
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	/**
-	 * loadRuleListForCategories
-	 *
-	 * Role-based Authorization check: This method can be accessed if user has
-	 * following permissions:
-	 * 1. The user has Analyst role and this role has permission to access the category
-	 * Or.
-	 * 2. The user has one of the following roles: package.readonly|package.admin|package.developer.
-	 * In this case, this method only returns assets that belong to packages the role has at least
-	 * package.readonly permission to access.
-	 */
-	public TableDataResult loadRuleListForCategories(String categoryPath,
-			int skip, int numRows, String tableConfig)
-			throws SerializableException {
-		// love you
-		// long time = System.currentTimeMillis();
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    /**
+     * loadRuleListForCategories
+     *
+     * Role-based Authorization check: This method can be accessed if user has
+     * following permissions:
+     * 1. The user has Analyst role and this role has permission to access the category
+     * Or.
+     * 2. The user has one of the following roles: package.readonly|package.admin|package.developer.
+     * In this case, this method only returns assets that belong to packages the role has at least
+     * package.readonly permission to access.
+     */
+    public TableDataResult loadRuleListForCategories(String categoryPath,
+                                                     int skip,
+                                                     int numRows,
+                                                     String tableConfig) throws SerializableException {
+        // love you
+        // long time = System.currentTimeMillis();
 
-		// First check the user has permission to access this categoryPath.
-		if (Contexts.isSessionContextActive()) {
-			if (!Identity.instance().hasPermission(new CategoryPathType(categoryPath), RoleTypes.ANALYST_READ)) {
-				TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
-				return handler.loadRuleListTable(new AssetPageList());
-			}
-		}
+        // First check the user has permission to access this categoryPath.
+        if ( Contexts.isSessionContextActive() ) {
+            if ( !Identity.instance().hasPermission( new CategoryPathType( categoryPath ),
+                                                     RoleTypes.ANALYST_READ ) ) {
+                TableDisplayHandler handler = new TableDisplayHandler( tableConfig );
+                return handler.loadRuleListTable( new AssetPageList() );
+            }
+        }
 
-		//use AssetItemFilter to enforce package-based permissions.
-		RepositoryFilter filter = new AssetItemFilter();
-		AssetPageList list = repository.findAssetsByCategory(categoryPath,
-				false, skip, numRows, filter);
-		TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
-		// log.debug("time for load: " + (System.currentTimeMillis() - time) );
-		return handler.loadRuleListTable(list);
+        //use AssetItemFilter to enforce package-based permissions.
+        RepositoryFilter filter = new AssetItemFilter();
+        AssetPageList list = repository.findAssetsByCategory( categoryPath,
+                                                              false,
+                                                              skip,
+                                                              numRows,
+                                                              filter );
+        TableDisplayHandler handler = new TableDisplayHandler( tableConfig );
+        // log.debug("time for load: " + (System.currentTimeMillis() - time) );
+        return handler.loadRuleListTable( list );
 
-	}
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult loadRuleListForState(String stateName, int skip,
-			int numRows, String tableConfig) throws SerializableException {
-		// love you
-		// long time = System.currentTimeMillis();
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult loadRuleListForState(String stateName,
+                                                int skip,
+                                                int numRows,
+                                                String tableConfig) throws SerializableException {
+        // love you
+        // long time = System.currentTimeMillis();
 
-		RepositoryFilter filter = new AssetItemFilter();
-		AssetPageList list = repository.findAssetsByState(stateName, false,
-				skip, numRows, filter);
-		TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
-		// log.debug("time for load: " + (System.currentTimeMillis() - time) );
-		return handler.loadRuleListTable(list);
+        RepositoryFilter filter = new AssetItemFilter();
+        AssetPageList list = repository.findAssetsByState( stateName,
+                                                           false,
+                                                           skip,
+                                                           numRows,
+                                                           filter );
+        TableDisplayHandler handler = new TableDisplayHandler( tableConfig );
+        // log.debug("time for load: " + (System.currentTimeMillis() - time) );
+        return handler.loadRuleListTable( list );
 
-	}
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableConfig loadTableConfig(String listName) {
-		TableDisplayHandler handler = new TableDisplayHandler(listName);
-		return handler.loadTableConfig();
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableConfig loadTableConfig(String listName) {
+        TableDisplayHandler handler = new TableDisplayHandler( listName );
+        return handler.loadTableConfig();
+    }
 
-	/**
-	 * This actually does the hard work of loading up an asset based on its
-	 * format.
-	 *
-	 * Role-based Authorization check: This method can be accessed if user has
-	 * following permissions:
-	 * 1. The user has Analyst role and this role has permission to access the category
-	 * which the asset belongs to.
-	 * Or.
-	 * 2. The user has package.readonly role (or package.admin, package.developer)
-	 * and this role has permission to access the package which the asset belongs to.
-	 */
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public RuleAsset loadRuleAsset(String uuid) throws SerializableException {
-		AssetItem item = repository.loadAssetByUUID(uuid);
-		RuleAsset asset = new RuleAsset();
+    /**
+     * This actually does the hard work of loading up an asset based on its
+     * format.
+     *
+     * Role-based Authorization check: This method can be accessed if user has
+     * following permissions:
+     * 1. The user has Analyst role and this role has permission to access the category
+     * which the asset belongs to.
+     * Or.
+     * 2. The user has package.readonly role (or package.admin, package.developer)
+     * and this role has permission to access the package which the asset belongs to.
+     */
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public RuleAsset loadRuleAsset(String uuid) throws SerializableException {
+        AssetItem item = repository.loadAssetByUUID( uuid );
+        RuleAsset asset = new RuleAsset();
 
-		asset.uuid = uuid;
+        asset.uuid = uuid;
 
-		// load standard meta data
-		asset.metaData = populateMetaData(item);
+        // load standard meta data
+        asset.metaData = populateMetaData( item );
 
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(asset.metaData.packageName),
-					RoleTypes.PACKAGE_READONLY);
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( asset.metaData.packageName ),
+                                                 RoleTypes.PACKAGE_READONLY );
 
-			if(asset.metaData.categories.length == 0) {
-				Identity.instance().checkPermission(
-						new CategoryPathType(null),
-						RoleTypes.ANALYST_READ);
-			} else {
-				boolean passed = false;
-				RuntimeException exception = null;
+            if ( asset.metaData.categories.length == 0 ) {
+                Identity.instance().checkPermission( new CategoryPathType( null ),
+                                                     RoleTypes.ANALYST_READ );
+            } else {
+                boolean passed = false;
+                RuntimeException exception = null;
 
-				for (String cat : asset.metaData.categories) {
-					try {
-						Identity.instance().checkPermission(
-								new CategoryPathType(cat), RoleTypes.ANALYST_READ);
-						passed = true;
-					} catch (RuntimeException e) {
-						exception = e;
-					}
-				}
-				if (!passed) {
-					throw exception;
-				}
-			}
-		}
+                for ( String cat : asset.metaData.categories ) {
+                    try {
+                        Identity.instance().checkPermission( new CategoryPathType( cat ),
+                                                             RoleTypes.ANALYST_READ );
+                        passed = true;
+                    } catch ( RuntimeException e ) {
+                        exception = e;
+                    }
+                }
+                if ( !passed ) {
+                    throw exception;
+                }
+            }
+        }
 
+        // get package header
 
-		// get package header
+        //		PackageItem pkgItem = repository
+        //				.loadPackage(asset.metaData.packageName);
+        PackageItem pkgItem = item.getPackage();
 
+        // load the content
+        ContentHandler handler = ContentManager.getHandler( asset.metaData.format );
+        handler.retrieveAssetContent( asset,
+                                      pkgItem,
+                                      item );
+        if ( pkgItem.isSnapshot() ) {
+            asset.isreadonly = true;
+        }
+        return asset;
 
-//		PackageItem pkgItem = repository
-//				.loadPackage(asset.metaData.packageName);
-		PackageItem pkgItem = item.getPackage();
+    }
 
+    private RuleAsset loadAsset(AssetItem item) throws SerializableException {
+        RuleAsset asset = new RuleAsset();
+        asset.uuid = item.getUUID();
+        // load standard meta data
+        asset.metaData = populateMetaData( item );
+        // get package header
+        PackageItem pkgItem = item.getPackage();
+        // load the content
+        ContentHandler handler = ContentManager.getHandler( asset.metaData.format );
+        handler.retrieveAssetContent( asset,
+                                      pkgItem,
+                                      item );
+        return asset;
+    }
 
-		// load the content
-		ContentHandler handler = ContentManager
-				.getHandler(asset.metaData.format);
-		handler.retrieveAssetContent(asset, pkgItem, item);
-		if (pkgItem.isSnapshot()) {
-			asset.isreadonly = true;
-		}
-		return asset;
+    /**
+     * read in the meta data, populating all dublin core and versioning stuff.
+     */
+    MetaData populateMetaData(VersionableItem item) {
+        MetaData meta = new MetaData();
 
-	}
+        meta.status = (item.getState() != null) ? item.getState().getName() : "";
 
-	private RuleAsset loadAsset(AssetItem item) throws SerializableException {
-		RuleAsset asset = new RuleAsset();
-		asset.uuid = item.getUUID();
-		// load standard meta data
-		asset.metaData = populateMetaData(item);
-		// get package header
-		PackageItem pkgItem = item.getPackage();
-		// load the content
-		ContentHandler handler = ContentManager
-				.getHandler(asset.metaData.format);
-		handler.retrieveAssetContent(asset, pkgItem, item);
-		return asset;
-	}
+        metaDataMapper.copyToMetaData( meta,
+                                       item );
 
-	/**
-	 * read in the meta data, populating all dublin core and versioning stuff.
-	 */
-	MetaData populateMetaData(VersionableItem item) {
-		MetaData meta = new MetaData();
+        meta.createdDate = calendarToDate( item.getCreatedDate() );
+        meta.lastModifiedDate = calendarToDate( item.getLastModified() );
 
-		meta.status = (item.getState() != null) ? item.getState().getName()
-				: "";
+        return meta;
+    }
 
-		metaDataMapper.copyToMetaData(meta, item);
+    /**
+     * Populate meta data with asset specific info.
+     */
+    MetaData populateMetaData(AssetItem item) {
+        MetaData meta = populateMetaData( (VersionableItem) item );
+        meta.packageName = item.getPackageName();
 
-		meta.createdDate = calendarToDate(item.getCreatedDate());
-		meta.lastModifiedDate = calendarToDate(item.getLastModified());
+        List cats = item.getCategories();
+        meta.categories = new String[cats.size()];
+        for ( int i = 0; i < meta.categories.length; i++ ) {
+            CategoryItem cat = (CategoryItem) cats.get( i );
+            meta.categories[i] = cat.getFullPath();
+        }
+        meta.dateEffective = calendarToDate( item.getDateEffective() );
+        meta.dateExpired = calendarToDate( item.getDateExpired() );
+        return meta;
 
-		return meta;
-	}
+    }
 
-	/**
-	 * Populate meta data with asset specific info.
-	 */
-	MetaData populateMetaData(AssetItem item) {
-		MetaData meta = populateMetaData((VersionableItem) item);
-		meta.packageName = item.getPackageName();
+    private Date calendarToDate(Calendar createdDate) {
+        if ( createdDate == null ) return null;
+        return createdDate.getTime();
+    }
 
-		List cats = item.getCategories();
-		meta.categories = new String[cats.size()];
-		for (int i = 0; i < meta.categories.length; i++) {
-			CategoryItem cat = (CategoryItem) cats.get(i);
-			meta.categories[i] = cat.getFullPath();
-		}
-		meta.dateEffective = calendarToDate(item.getDateEffective());
-		meta.dateExpired = calendarToDate(item.getDateExpired());
-		return meta;
+    private Calendar dateToCalendar(Date date) {
+        if ( date == null ) return null;
+        Calendar cal = Calendar.getInstance();
+        cal.setTime( date );
+        return cal;
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    /**
+     *
+     * Role-based Authorization check: This method can be accessed if user has
+     * following permissions:
+     * 1. The user has Analyst role and this role has permission to access the category
+     * which the asset belongs to.
+     * Or.
+     * 2. The user has package.readonly role (or package.admin, package.developer)
+     * and this role has permission to access the package which the asset belongs to.
+     */
+    public String checkinVersion(RuleAsset asset) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( asset.metaData.packageName ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
 
-	private Date calendarToDate(Calendar createdDate) {
-		if (createdDate == null)
-			return null;
-		return createdDate.getTime();
-	}
+            if ( asset.metaData.categories.length == 0 ) {
+                Identity.instance().checkPermission( new CategoryPathType( null ),
+                                                     RoleTypes.ANALYST );
+            } else {
+                boolean passed = false;
+                RuntimeException exception = null;
 
-	private Calendar dateToCalendar(Date date) {
-		if (date == null)
-			return null;
-		Calendar cal = Calendar.getInstance();
-		cal.setTime(date);
-		return cal;
-	}
+                for ( String cat : asset.metaData.categories ) {
+                    try {
+                        Identity.instance().checkPermission( new CategoryPathType( cat ),
+                                                             RoleTypes.ANALYST );
+                        passed = true;
+                    } catch ( RuntimeException e ) {
+                        exception = e;
+                    }
+                }
+                if ( !passed ) {
+                    throw exception;
+                }
+            }
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	/**
-	 *
-	 * Role-based Authorization check: This method can be accessed if user has
-	 * following permissions:
-	 * 1. The user has Analyst role and this role has permission to access the category
-	 * which the asset belongs to.
-	 * Or.
-	 * 2. The user has package.readonly role (or package.admin, package.developer)
-	 * and this role has permission to access the package which the asset belongs to.
-	 */
-	public String checkinVersion(RuleAsset asset) throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(asset.metaData.packageName),
-					RoleTypes.PACKAGE_DEVELOPER);
+        log.info( "USER:" + repository.getSession().getUserID() + " CHECKING IN asset: [" + asset.metaData.name + "] UUID: [" + asset.uuid + "]  ARCHIVED [" + asset.archived + "]" );
 
-			if(asset.metaData.categories.length == 0) {
-				Identity.instance().checkPermission(
-						new CategoryPathType(null),
-						RoleTypes.ANALYST);
-			} else {
-				boolean passed = false;
-				RuntimeException exception = null;
+        AssetItem repoAsset = repository.loadAssetByUUID( asset.uuid );
+        if ( asset.metaData.lastModifiedDate.before( repoAsset.getLastModified().getTime() ) ) {
+            return "ERR: Unable to save this asset, as it has been recently updated by [" + repoAsset.getLastContributor() + "]";
+        }
 
-				for (String cat : asset.metaData.categories) {
-					try {
-						Identity.instance().checkPermission(
-								new CategoryPathType(cat), RoleTypes.ANALYST);
-						passed = true;
-					} catch (RuntimeException e) {
-						exception = e;
-					}
-				}
-				if (!passed) {
-					throw exception;
-				}
-			}
-		}
+        repoAsset.archiveItem( asset.archived );
+        MetaData meta = asset.metaData;
 
+        metaDataMapper.copyFromMetaData( meta,
+                                         repoAsset );
 
+        repoAsset.updateDateEffective( dateToCalendar( meta.dateEffective ) );
+        repoAsset.updateDateExpired( dateToCalendar( meta.dateExpired ) );
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CHECKING IN asset: [" + asset.metaData.name + "] UUID: ["
-				+ asset.uuid + "]  ARCHIVED [" + asset.archived + "]");
+        repoAsset.updateCategoryList( meta.categories );
+        ContentHandler handler = ContentManager.getHandler( repoAsset.getFormat() );// new AssetContentFormatHandler();
+        handler.storeAssetContent( asset,
+                                   repoAsset );
 
-		AssetItem repoAsset = repository.loadAssetByUUID(asset.uuid);
-		if (asset.metaData.lastModifiedDate.before(repoAsset.getLastModified()
-				.getTime())) {
-			return "ERR: Unable to save this asset, as it has been recently updated by ["
-					+ repoAsset.getLastContributor() + "]";
-		}
+        if ( !(asset.metaData.format.equals( AssetFormats.TEST_SCENARIO )) || asset.metaData.format.equals( AssetFormats.ENUMERATION ) ) {
+            PackageItem pkg = repoAsset.getPackage();
+            pkg.updateBinaryUpToDate( false );
+            this.ruleBaseCache.remove( pkg.getUUID() );
 
-		repoAsset.archiveItem(asset.archived);
-		MetaData meta = asset.metaData;
+        }
 
-		metaDataMapper.copyFromMetaData(meta, repoAsset);
+        repoAsset.checkin( meta.checkinComment );
 
-		repoAsset.updateDateEffective(dateToCalendar(meta.dateEffective));
-		repoAsset.updateDateExpired(dateToCalendar(meta.dateExpired));
+        return repoAsset.getUUID();
+    }
 
-		repoAsset.updateCategoryList(meta.categories);
-		ContentHandler handler = ContentManager.getHandler(repoAsset
-				.getFormat());// new AssetContentFormatHandler();
-		handler.storeAssetContent(asset, repoAsset);
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult loadAssetHistory(String uuid) throws SerializableException {
 
-		if (!(asset.metaData.format.equals(AssetFormats.TEST_SCENARIO))
-				|| asset.metaData.format.equals(AssetFormats.ENUMERATION)) {
-			PackageItem pkg = repoAsset.getPackage();
-			pkg.updateBinaryUpToDate(false);
-			this.ruleBaseCache.remove(pkg.getUUID());
+        List<TableDataRow> result = new ArrayList<TableDataRow>();
 
-		}
+        AssetItem item = repository.loadAssetByUUID( uuid );
 
-		repoAsset.checkin(meta.checkinComment);
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( item.getPackage().getUUID() ),
+                                                 RoleTypes.PACKAGE_READONLY );
+        }
 
-		return repoAsset.getUUID();
-	}
+        AssetHistoryIterator it = item.getHistory();
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult loadAssetHistory(String uuid)
-			throws SerializableException {
+        // MN Note: this uses the lazy iterator, but then loads the whole lot
+        // up, and returns it.
+        // The reason for this is that the GUI needs to show things in numeric
+        // order by the version number.
+        // When a version is restored, its previous version is NOT what you
+        // thought it was - due to how JCR works
+        // (its more like CVS then SVN). So to get a linear progression of
+        // versions, we use the incrementing version number,
+        // and load it all up and sort it. This is not ideal.
+        // In future, we may do a "restore" instead just by copying content into
+        // a new version, not restoring a node,
+        // in which case the iterator will be in order (or you can just walk all
+        // the way back).
+        // So if there are performance problems with looking at lots of
+        // historical versions, look at this nasty bit of code.
+        while ( it.hasNext() ) {
+            AssetItem historical = (AssetItem) it.next();// new
+            // AssetItem(repo,
+            // element);
+            long versionNumber = historical.getVersionNumber();
+            if ( !(versionNumber == 0) && !(versionNumber == item.getVersionNumber()) ) {
+                TableDataRow row = new TableDataRow();
+                row.id = historical.getVersionSnapshotUUID();
+                row.values = new String[4];
+                row.values[0] = Long.toString( historical.getVersionNumber() );
+                row.values[1] = historical.getCheckinComment();
+                row.values[2] = dateFormatter.format( historical.getLastModified().getTime() );
+                row.values[3] = historical.getStateDescription();
+                result.add( row );
+            }
+        }
 
-		List<TableDataRow> result = new ArrayList<TableDataRow>();
+        if ( result.size() == 0 ) return null;
+        TableDataResult table = new TableDataResult();
+        table.data = result.toArray( new TableDataRow[result.size()] );
 
-		AssetItem item = repository.loadAssetByUUID(uuid);
+        return table;
+    }
 
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageUUIDType(item.getPackage().getUUID()),
-					RoleTypes.PACKAGE_READONLY);
-		}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult loadArchivedAssets(int skip,
+                                              int numRows) throws SerializableException {
+        List<TableDataRow> result = new ArrayList<TableDataRow>();
+        RepositoryFilter filter = new AssetItemFilter();
 
-		AssetHistoryIterator it = item.getHistory();
+        AssetItemIterator it = repository.findArchivedAssets();
+        it.skip( skip );
+        int count = 0;
+        while ( it.hasNext() ) {
 
-		// MN Note: this uses the lazy iterator, but then loads the whole lot
-		// up, and returns it.
-		// The reason for this is that the GUI needs to show things in numeric
-		// order by the version number.
-		// When a version is restored, its previous version is NOT what you
-		// thought it was - due to how JCR works
-		// (its more like CVS then SVN). So to get a linear progression of
-		// versions, we use the incrementing version number,
-		// and load it all up and sort it. This is not ideal.
-		// In future, we may do a "restore" instead just by copying content into
-		// a new version, not restoring a node,
-		// in which case the iterator will be in order (or you can just walk all
-		// the way back).
-		// So if there are performance problems with looking at lots of
-		// historical versions, look at this nasty bit of code.
-		while (it.hasNext()) {
-			AssetItem historical = (AssetItem) it.next();// new
-															// AssetItem(repo,
-															// element);
-			long versionNumber = historical.getVersionNumber();
-			if (!(versionNumber == 0)
-					&& !(versionNumber == item.getVersionNumber())) {
-				TableDataRow row = new TableDataRow();
-				row.id = historical.getVersionSnapshotUUID();
-				row.values = new String[4];
-				row.values[0] = Long.toString(historical.getVersionNumber());
-				row.values[1] = historical.getCheckinComment();
-				row.values[2] = dateFormatter.format(historical
-						.getLastModified().getTime());
-				row.values[3] = historical.getStateDescription();
-				result.add(row);
-			}
-		}
+            AssetItem archived = (AssetItem) it.next();
 
-		if (result.size() == 0)
-			return null;
-		TableDataResult table = new TableDataResult();
-		table.data = result.toArray(new TableDataRow[result.size()]);
+            if ( filter.accept( archived,
+                                "read" ) ) {
+                TableDataRow row = new TableDataRow();
+                row.id = archived.getUUID();
+                row.values = new String[5];
 
-		return table;
-	}
+                row.values[0] = archived.getFormat();
+                row.values[1] = archived.getPackageName();
+                row.values[2] = archived.getName();
+                row.values[3] = archived.getLastContributor();
+                row.values[4] = archived.getLastModified().getTime().toLocaleString();
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult loadArchivedAssets(int skip, int numRows)
-			throws SerializableException {
-		List<TableDataRow> result = new ArrayList<TableDataRow>();
-		RepositoryFilter filter = new AssetItemFilter();
+                result.add( row );
+                count++;
+            }
+            if ( count == numRows ) {
+                break;
+            }
+        }
 
-		AssetItemIterator it = repository.findArchivedAssets();
-		it.skip(skip);
-		int count = 0;
-		while (it.hasNext()) {
+        TableDataResult table = new TableDataResult();
+        table.data = result.toArray( new TableDataRow[result.size()] );
+        table.currentPosition = it.getPosition();
+        return table;
+    }
 
-			AssetItem archived = (AssetItem) it.next();
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void restoreVersion(String versionUUID,
+                               String assetUUID,
+                               String comment) {
+        AssetItem old = repository.loadAssetByUUID( versionUUID );
+        AssetItem head = repository.loadAssetByUUID( assetUUID );
 
-			if (filter.accept(archived, "read")) {
-				TableDataRow row = new TableDataRow();
-				row.id = archived.getUUID();
-				row.values = new String[5];
+        log.info( "USER:" + repository.getSession().getUserID() + " RESTORE of asset: [" + head.getName() + "] UUID: [" + head.getUUID() + "] with historical version number: [" + old.getVersionNumber() );
 
-				row.values[0] = archived.getFormat();
-				row.values[1] = archived.getPackageName();
-				row.values[2] = archived.getName();
-				row.values[3] = archived.getLastContributor();
-				row.values[4] = archived.getLastModified().getTime()
-						.toLocaleString();
+        repository.restoreHistoricalAsset( old,
+                                           head,
+                                           comment );
 
-				result.add(row);
-				count++;
-			}
-			if (count == numRows) {
-				break;
-			}
-		}
+    }
 
-		TableDataResult table = new TableDataResult();
-		table.data = result.toArray(new TableDataRow[result.size()]);
-		table.currentPosition = it.getPosition();
-		return table;
-	}
+    @WebRemote
+    public String createPackage(String name,
+                                String description) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void restoreVersion(String versionUUID, String assetUUID,
-			String comment) {
-		AssetItem old = repository.loadAssetByUUID(versionUUID);
-		AssetItem head = repository.loadAssetByUUID(assetUUID);
+        log.info( "USER:" + repository.getSession().getUserID() + " CREATING package [" + name + "]" );
+        PackageItem item = repository.createPackage( name,
+                                                     description );
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " RESTORE of asset: [" + head.getName() + "] UUID: ["
-				+ head.getUUID() + "] with historical version number: ["
-				+ old.getVersionNumber());
+        return item.getUUID();
+    }
 
-		repository.restoreHistoricalAsset(old, head, comment);
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public PackageConfigData loadPackageConfig(String uuid) {
+        PackageItem item = repository.loadPackageByUUID( uuid );
+        // the uuid passed in is the uuid of that deployment bundle, not the
+        // package uudi.
+        // we have to figure out the package name.
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( item.getName() ),
+                                                 RoleTypes.PACKAGE_READONLY );
+        }
 
-	}
+        PackageConfigData data = new PackageConfigData();
+        data.uuid = item.getUUID();
+        data.header = getDroolsHeader( item );
+        data.externalURI = item.getExternalURI();
+        data.catRules = item.getCategoryRules();
+        //System.out.println("Cat Rules: " + data.catRules.toString());
+        data.description = item.getDescription();
+        data.name = item.getName();
+        data.lastModified = item.getLastModified().getTime();
+        data.dateCreated = item.getCreatedDate().getTime();
+        data.checkinComment = item.getCheckinComment();
+        data.lasContributor = item.getLastContributor();
+        data.state = item.getStateDescription();
+        data.isSnapshot = item.isSnapshot();
+        if ( data.isSnapshot ) {
+            data.snapshotName = item.getSnapshotName();
+        }
+        return data;
+    }
 
+    //make sure this stays the same order
+    private static String[] convertToObjectGraph(final Map map,
+                                                 boolean getKeys) {
+        List list = new ArrayList();
 
-	@WebRemote
-	public String createPackage(String name, String description)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+        for ( Iterator i = map.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry entry = (Map.Entry) i.next();
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CREATING package [" + name + "]");
-		PackageItem item = repository.createPackage(name, description);
+            if ( getKeys ) {
+                list.add( entry.getKey() );
+            } else {
+                list.add( entry.getValue() );
+            }
+        }
+        //System.out.println("(convertToObjectGraph)list: " + list.toString());
+        return (String[]) list.toArray( new String[0] );
+    }
 
-		return item.getUUID();
-	}
+    private static String convertMapToString(final Map map,
+                                             boolean getKeys) {
+        //System.out.println("(convertMapToString)map: " + map.toString());
+        String[] sArray = convertToObjectGraph( map,
+                                                getKeys );
+        String returnVal = new String();
+        for ( String string : sArray ) {
+            if ( returnVal.length() > 0 ) {
+                returnVal += ",";
+            }
+            returnVal += string;
+        }
+        //System.out.println("(convertMapToString)returnVal: " + returnVal);
+        return returnVal;
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public PackageConfigData loadPackageConfig(String uuid) {
-		PackageItem item = repository.loadPackageByUUID(uuid);
-		// the uuid passed in is the uuid of that deployment bundle, not the
-		// package uudi.
-		// we have to figure out the package name.
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(item.getName()),
-					RoleTypes.PACKAGE_READONLY);
-		}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public ValidatedResponse savePackage(PackageConfigData data) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( data.uuid ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-		PackageConfigData data = new PackageConfigData();
-		data.uuid = item.getUUID();
-		data.header = getDroolsHeader(item);
-		data.externalURI = item.getExternalURI();
-		data.catRules = item.getCategoryRules();
-		//System.out.println("Cat Rules: " + data.catRules.toString());
-		data.description = item.getDescription();
-		data.name = item.getName();
-		data.lastModified = item.getLastModified().getTime();
-		data.dateCreated = item.getCreatedDate().getTime();
-		data.checkinComment = item.getCheckinComment();
-		data.lasContributor = item.getLastContributor();
-		data.state = item.getStateDescription();
-		data.isSnapshot = item.isSnapshot();
-		if (data.isSnapshot) {
-			data.snapshotName = item.getSnapshotName();
-		}
-		return data;
-	}
-//make sure this stays the same order
-	private static String[] convertToObjectGraph(final Map map, boolean getKeys) {
-		    List list = new ArrayList();
+        log.info( "USER:" + repository.getSession().getUserID() + " SAVING package [" + data.name + "]" );
 
-		    for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
-		        Map.Entry entry = (Map.Entry) i.next();
+        PackageItem item = repository.loadPackage( data.name );
 
-		        if(getKeys){
-		        	list.add(entry.getKey());
-		        }else{
-		        	list.add(entry.getValue());
-		        }
-		    }
-		    //System.out.println("(convertToObjectGraph)list: " + list.toString());
-		    return (String[])list.toArray(new String[0]);
-	}
-	private static String convertMapToString(final Map map, boolean getKeys){
-		//System.out.println("(convertMapToString)map: " + map.toString());
-		String[] sArray = convertToObjectGraph(map,getKeys);
-		String returnVal = new String();
-		for (String string : sArray) {
-			if(returnVal.length() > 0){
-				returnVal += ",";
-			}
-			returnVal += string;
-		}
-		//System.out.println("(convertMapToString)returnVal: " + returnVal);
-		return returnVal;
-	}
+        updateDroolsHeader( data.header,
+                            item );
+        item.updateCategoryRules( convertMapToString( data.catRules,
+                                                      true ),
+                                  convertMapToString( data.catRules,
+                                                      false ) );
 
+        item.updateExternalURI( data.externalURI );
+        item.updateDescription( data.description );
+        item.archiveItem( data.archived );
+        item.updateBinaryUpToDate( false );
+        this.ruleBaseCache.remove( data.uuid );
+        item.checkin( data.description );
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public ValidatedResponse savePackage(PackageConfigData data)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(new PackageUUIDType(data.uuid),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
+        loader.getSuggestionEngine( item );
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " SAVING package [" + data.name + "]");
+        ValidatedResponse res = new ValidatedResponse();
+        if ( loader.hasErrors() ) {
+            res.hasErrors = true;
+            String err = "";
+            for ( Iterator iter = loader.getErrors().iterator(); iter.hasNext(); ) {
+                err += (String) iter.next();
+                if ( iter.hasNext() ) err += "\n";
+            }
+            res.errorHeader = "Package validation errors";
+            res.errorMessage = err;
+        }
 
-		PackageItem item = repository.loadPackage(data.name);
+        return res;
+    }
 
-		updateDroolsHeader(data.header, item);
-		item.updateCategoryRules(convertMapToString(data.catRules, true), convertMapToString(data.catRules, false));
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult listAssets(String uuid,
+                                      String formats[],
+                                      int skip,
+                                      int numRows,
+                                      String tableConfig) throws SerializableException {
+        // TODO: This does not work for package snapshot. package snspshot's
+        // UUID is different
+        // from its corresponding package. However we seem to expect to get same
+        // assets using the
+        // package snapshot UUID here
+        // Identity.instance().checkPermission("ignoredanyway", "read", uuid);
 
-		item.updateExternalURI(data.externalURI);
-		item.updateDescription(data.description);
-		item.archiveItem(data.archived);
-		item.updateBinaryUpToDate(false);
-		this.ruleBaseCache.remove(data.uuid);
-		item.checkin(data.description);
+        if ( numRows == 0 ) {
+            throw new DetailedSerializableException( "Unable to return zero results (bug)",
+                                                     "probably have the parameters around the wrong way, sigh..." );
+        }
+        long start = System.currentTimeMillis();
+        PackageItem pkg = repository.loadPackageByUUID( uuid );
+        AssetItemIterator it;
+        if ( formats.length > 0 ) {
+            it = pkg.listAssetsByFormat( formats );
+        } else {
+            it = pkg.listAssetsNotOfFormat( AssetFormatHelper.listRegisteredTypes() );
+        }
+        TableDisplayHandler handler = new TableDisplayHandler( tableConfig );
+        log.debug( "time for asset list load: " + (System.currentTimeMillis() - start) );
+        return handler.loadRuleListTable( it,
+                                          skip,
+                                          numRows );
+    }
 
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult queryFullText(String text,
+                                         boolean seekArchived,
+                                         int skip,
+                                         int numRows) throws SerializableException {
+        if ( numRows == 0 ) {
+            throw new DetailedSerializableException( "Unable to return zero results (bug)",
+                                                     "probably have the parameters around the wrong way, sigh..." );
+        }
+        AssetItemIterator it = repository.queryFullText( text,
+                                                         seekArchived );
 
-		BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
-		loader.getSuggestionEngine(item);
+        // Add filter for READONLY permission
+        List<AssetItem> resultList = new ArrayList<AssetItem>();
+        RepositoryFilter filter = new PackageFilter();
 
-		ValidatedResponse res = new ValidatedResponse();
-		if (loader.hasErrors()) {
-			res.hasErrors = true;
-			String err = "";
-			for (Iterator iter = loader.getErrors().iterator(); iter.hasNext();) {
-				err += (String) iter.next();
-				if (iter.hasNext())
-					err += "\n";
-			}
-			res.errorHeader = "Package validation errors";
-			res.errorMessage = err;
-		}
+        while ( it.hasNext() ) {
+            AssetItem ai = it.next();
+            if ( checkPackagePermissionHelper( filter,
+                                               ai,
+                                               RoleTypes.PACKAGE_READONLY ) ) {
+                resultList.add( ai );
+            }
+        }
 
-		return res;
-	}
+        TableDisplayHandler handler = new TableDisplayHandler( "searchresults" );
+        return handler.loadRuleListTable( resultList,
+                                          skip,
+                                          numRows );
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult listAssets(String uuid, String formats[], int skip,
-			int numRows, String tableConfig) throws SerializableException {
-		// TODO: This does not work for package snapshot. package snspshot's
-		// UUID is different
-		// from its corresponding package. However we seem to expect to get same
-		// assets using the
-		// package snapshot UUID here
-		// Identity.instance().checkPermission("ignoredanyway", "read", uuid);
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult queryMetaData(final MetaDataQuery[] qr,
+                                         Date createdAfter,
+                                         Date createdBefore,
+                                         Date modifiedAfter,
+                                         Date modifiedBefore,
+                                         boolean seekArchived,
+                                         int skip,
+                                         int numRows) throws SerializableException {
+        if ( numRows == 0 ) {
+            throw new DetailedSerializableException( "Unable to return zero results (bug)",
+                                                     "probably have the parameters around the wrong way, sigh..." );
+        }
+        Map<String, String[]> q = new HashMap<String, String[]>() {
+            {
+                for ( int i = 0; i < qr.length; i++ ) {
+                    String vals = (qr[i].valueList == null) ? "" : qr[i].valueList.trim();
+                    if ( vals.length() > 0 ) {
+                        put( qr[i].attribute,
+                             vals.split( ",\\s?" ) );
+                    }
+                }
+            }
+        };
 
-		if (numRows == 0) {
-			throw new DetailedSerializableException(
-					"Unable to return zero results (bug)",
-					"probably have the parameters around the wrong way, sigh...");
-		}
-		long start = System.currentTimeMillis();
-		PackageItem pkg = repository.loadPackageByUUID(uuid);
-		AssetItemIterator it;
-		if (formats.length > 0) {
-			it = pkg.listAssetsByFormat(formats);
-		} else {
-			it = pkg.listAssetsNotOfFormat(AssetFormatHelper.listRegisteredTypes());
-		}
-		TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
-		log.debug("time for asset list load: "
-				+ (System.currentTimeMillis() - start));
-		return handler.loadRuleListTable(it, skip, numRows);
-	}
+        DateQuery[] dates = new DateQuery[2];
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult queryFullText(String text, boolean seekArchived,
-			int skip, int numRows) throws SerializableException {
-		if (numRows == 0) {
-			throw new DetailedSerializableException(
-					"Unable to return zero results (bug)",
-					"probably have the parameters around the wrong way, sigh...");
-		}
-		AssetItemIterator it = repository.queryFullText(text, seekArchived);
+        dates[0] = new DateQuery( "jcr:created",
+                                  isoDate( createdAfter ),
+                                  isoDate( createdBefore ) );
+        dates[1] = new DateQuery( AssetItem.LAST_MODIFIED_PROPERTY_NAME,
+                                  isoDate( modifiedAfter ),
+                                  isoDate( modifiedBefore ) );
+        AssetItemIterator it = repository.query( q,
+                                                 seekArchived,
+                                                 dates );
 
-		// Add filter for READONLY permission
-		List<AssetItem> resultList = new ArrayList<AssetItem>();
-		RepositoryFilter filter = new PackageFilter();
+        // Add Filter to check Permission
+        List<AssetItem> resultList = new ArrayList<AssetItem>();
 
-		while (it.hasNext()) {
-			AssetItem ai = it.next();
-			if (checkPackagePermissionHelper(filter, ai, RoleTypes.PACKAGE_READONLY)) {
-				resultList.add(ai);
-			}
-		}
+        RepositoryFilter packageFilter = new PackageFilter();
+        RepositoryFilter categoryFilter = new CategoryFilter();
 
-		TableDisplayHandler handler = new TableDisplayHandler("searchresults");
-		return handler.loadRuleListTable(resultList, skip, numRows);
-	}
+        while ( it.hasNext() ) {
+            AssetItem ai = it.next();
+            if ( checkPackagePermissionHelper( packageFilter,
+                                               ai,
+                                               RoleTypes.PACKAGE_READONLY ) || checkCategoryPermissionHelper( categoryFilter,
+                                                                                                              ai,
+                                                                                                              RoleTypes.ANALYST_READ ) ) {
+                resultList.add( ai );
+            }
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult queryMetaData(final MetaDataQuery[] qr,
-			Date createdAfter, Date createdBefore, Date modifiedAfter,
-			Date modifiedBefore, boolean seekArchived, int skip, int numRows)
-			throws SerializableException {
-		if (numRows == 0) {
-			throw new DetailedSerializableException(
-					"Unable to return zero results (bug)",
-					"probably have the parameters around the wrong way, sigh...");
-		}
-		Map<String, String[]> q = new HashMap<String, String[]>() {
-			{
-				for (int i = 0; i < qr.length; i++) {
-					String vals = (qr[i].valueList == null) ? ""
-							: qr[i].valueList.trim();
-					if (vals.length() > 0) {
-						put(qr[i].attribute, vals.split(",\\s?"));
-					}
-				}
-			}
-		};
+        TableDisplayHandler handler = new TableDisplayHandler( "searchresults" );
+        return handler.loadRuleListTable( resultList,
+                                          skip,
+                                          numRows );
+    }
 
-		DateQuery[] dates = new DateQuery[2];
+    private boolean checkPackagePermissionHelper(RepositoryFilter filter,
+                                                 AssetItem item,
+                                                 String roleType) {
+        return filter.accept( getConfigDataHelper( item.getPackage().getUUID() ),
+                              roleType );
+    }
 
-		dates[0] = new DateQuery("jcr:created", isoDate(createdAfter),
-				isoDate(createdBefore));
-		dates[1] = new DateQuery(AssetItem.LAST_MODIFIED_PROPERTY_NAME,
-				isoDate(modifiedAfter), isoDate(modifiedBefore));
-		AssetItemIterator it = repository.query(q, seekArchived, dates);
+    private boolean checkCategoryPermissionHelper(RepositoryFilter filter,
+                                                  AssetItem item,
+                                                  String roleType) {
+        List<CategoryItem> tempCateList = item.getCategories();
+        for ( Iterator<CategoryItem> i = tempCateList.iterator(); i.hasNext(); ) {
+            CategoryItem categoryItem = i.next();
 
-		// Add Filter to check Permission
-		List<AssetItem> resultList = new ArrayList<AssetItem>();
+            if ( filter.accept( categoryItem.getName(),
+                                roleType ) ) {
+                return true;
+            }
+        }
 
-		RepositoryFilter packageFilter = new PackageFilter();
-		RepositoryFilter categoryFilter = new CategoryFilter();
+        return false;
+    }
 
-		while (it.hasNext()) {
-			AssetItem ai = it.next();
-			if (checkPackagePermissionHelper(packageFilter, ai, RoleTypes.PACKAGE_READONLY) ||
-					checkCategoryPermissionHelper(categoryFilter, ai, RoleTypes.ANALYST_READ)) {
-				resultList.add(ai);
-			}
-		}
+    private PackageConfigData getConfigDataHelper(String uuidStr) {
+        PackageConfigData data = new PackageConfigData();
+        data.uuid = uuidStr;
+        return data;
+    }
 
-		TableDisplayHandler handler = new TableDisplayHandler("searchresults");
-		return handler.loadRuleListTable(resultList, skip, numRows);
-	}
+    private String isoDate(Date d) {
+        if ( d != null ) {
+            Calendar cal = Calendar.getInstance();
+            cal.setTime( d );
+            return ISO8601.format( cal );
+        }
+        return null;
+    }
 
-	private boolean checkPackagePermissionHelper(
-			RepositoryFilter filter, AssetItem item, String roleType) {
-		return filter.accept(getConfigDataHelper(item.getPackage().getUUID()), roleType);
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String createState(String name) throws SerializableException {
+        log.info( "USER:" + repository.getSession().getUserID() + " CREATING state: [" + name + "]" );
+        try {
+            String uuid = repository.createState( name ).getNode().getUUID();
+            repository.save();
+            return uuid;
+        } catch ( RepositoryException e ) {
+            throw new SerializableException( "Unable to create the status." );
+        }
+    }
 
-	private boolean checkCategoryPermissionHelper(
-			RepositoryFilter filter, AssetItem item, String roleType) {
-		List<CategoryItem> tempCateList = item.getCategories();
-		for (Iterator<CategoryItem> i = tempCateList.iterator(); i.hasNext();) {
-			CategoryItem categoryItem = i.next();
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void removeState(String name) throws SerializableException {
+        log.info( "USER:" + repository.getSession().getUserID() + " REMOVING state: [" + name + "]" );
 
-			if (filter.accept(categoryItem.getName(), roleType)) {
-				return true;
-			}
-		}
+        try {
+            repository.loadState( name ).remove();
+            repository.save();
 
-		return false;
-	}
+        } catch ( RulesRepositoryException e ) {
+            throw new DetailedSerializableException( "Unable to remove status. It is probably still used (even by archived items).",
+                                                     e.getMessage() );
+        }
+    }
 
-	private PackageConfigData getConfigDataHelper(String uuidStr) {
-		PackageConfigData data = new PackageConfigData();
-		data.uuid = uuidStr;
-		return data;
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void renameState(String oldName,
+                            String newName) throws SerializableException {
+        log.info( "USER:" + repository.getSession().getUserID() + " RENAMING state: [" + oldName + "] to [" + newName + "]" );
+        repository.renameState( oldName,
+                                newName );
 
-	private String isoDate(Date d) {
-		if (d != null) {
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(d);
-			return ISO8601.format(cal);
-		}
-		return null;
-	}
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String createState(String name) throws SerializableException {
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CREATING state: [" + name + "]");
-		try {
-			String uuid = repository.createState(name).getNode().getUUID();
-			repository.save();
-			return uuid;
-		} catch (RepositoryException e) {
-			throw new SerializableException("Unable to create the status.");
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String[] listStates() throws SerializableException {
+        StateItem[] states = repository.listStates();
+        String[] result = new String[states.length];
+        for ( int i = 0; i < states.length; i++ ) {
+            result[i] = states[i].getName();
+        }
+        return result;
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String[] listStates() throws SerializableException {
-		StateItem[] states = repository.listStates();
-		String[] result = new String[states.length];
-		for (int i = 0; i < states.length; i++) {
-			result[i] = states[i].getName();
-		}
-		return result;
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void changeState(String uuid,
+                            String newState,
+                            boolean wholePackage) {
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void changeState(String uuid, String newState, boolean wholePackage) {
+        if ( !wholePackage ) {
 
-		if (!wholePackage) {
+            AssetItem asset = repository.loadAssetByUUID( uuid );
+            log.info( "USER:" + repository.getSession().getUserID() + " CHANGING ASSET STATUS. Asset name, uuid: " + "[" + asset.getName() + ", " + asset.getUUID() + "]" + " to [" + newState + "]" );
 
-			AssetItem asset = repository.loadAssetByUUID(uuid);
-			log.info("USER:" + repository.getSession().getUserID()
-					+ " CHANGING ASSET STATUS. Asset name, uuid: " + "["
-					+ asset.getName() + ", " + asset.getUUID() + "]" + " to ["
-					+ newState + "]");
+            if ( Contexts.isSessionContextActive() ) {
+                Identity.instance().checkPermission( new PackageUUIDType( asset.getPackage().getUUID() ),
+                                                     RoleTypes.PACKAGE_DEVELOPER );
+            }
 
-			if (Contexts.isSessionContextActive()) {
-				Identity.instance().checkPermission(
-						new PackageUUIDType(asset.getPackage().getUUID()),
-						RoleTypes.PACKAGE_DEVELOPER);
-			}
+            asset.updateState( newState );
+        } else {
+            if ( Contexts.isSessionContextActive() ) {
+                Identity.instance().checkPermission( new PackageUUIDType( uuid ),
+                                                     RoleTypes.PACKAGE_DEVELOPER );
+            }
 
-			asset.updateState(newState);
-		} else {
-			if (Contexts.isSessionContextActive()) {
-				Identity.instance().checkPermission(new PackageUUIDType(uuid),
-						RoleTypes.PACKAGE_DEVELOPER);
-			}
+            PackageItem pkg = repository.loadPackageByUUID( uuid );
+            log.info( "USER:" + repository.getSession().getUserID() + " CHANGING Package STATUS. Asset name, uuid: " + "[" + pkg.getName() + ", " + pkg.getUUID() + "]" + " to [" + newState + "]" );
+            pkg.changeStatus( newState );
+        }
+        repository.save();
+    }
 
-			PackageItem pkg = repository.loadPackageByUUID(uuid);
-			log.info("USER:" + repository.getSession().getUserID()
-					+ " CHANGING Package STATUS. Asset name, uuid: " + "["
-					+ pkg.getName() + ", " + pkg.getUUID() + "]" + " to ["
-					+ newState + "]");
-			pkg.changeStatus(newState);
-		}
-		repository.save();
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void changeAssetPackage(String uuid,
+                                   String newPackage,
+                                   String comment) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( newPackage ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void changeAssetPackage(String uuid, String newPackage,
-			String comment) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(newPackage),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        log.info( "USER:" + repository.getSession().getUserID() + " CHANGING PACKAGE OF asset: [" + uuid + "] to [" + newPackage + "]" );
+        repository.moveRuleItemPackage( newPackage,
+                                        uuid,
+                                        comment );
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CHANGING PACKAGE OF asset: [" + uuid + "] to ["
-				+ newPackage + "]");
-		repository.moveRuleItemPackage(newPackage, uuid, comment);
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String copyAsset(String assetUUID,
+                            String newPackage,
+                            String newName) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( newPackage ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String copyAsset(String assetUUID, String newPackage, String newName) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(newPackage),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        return repository.copyAsset( assetUUID,
+                                     newPackage,
+                                     newName );
+    }
 
-		return repository.copyAsset(assetUUID, newPackage, newName);
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public SnapshotInfo[] listSnapshots(String packageName) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( packageName ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public SnapshotInfo[] listSnapshots(String packageName) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(packageName),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        String[] snaps = repository.listPackageSnapshots( packageName );
+        SnapshotInfo[] res = new SnapshotInfo[snaps.length];
+        for ( int i = 0; i < snaps.length; i++ ) {
+            PackageItem snap = repository.loadPackageSnapshot( packageName,
+                                                               snaps[i] );
+            SnapshotInfo info = new SnapshotInfo();
+            res[i] = info;
+            info.comment = snap.getCheckinComment();
+            info.name = snaps[i];
+            info.uuid = snap.getUUID();
+        }
+        return res;
+    }
 
-		String[] snaps = repository.listPackageSnapshots(packageName);
-		SnapshotInfo[] res = new SnapshotInfo[snaps.length];
-		for (int i = 0; i < snaps.length; i++) {
-			PackageItem snap = repository.loadPackageSnapshot(packageName,
-					snaps[i]);
-			SnapshotInfo info = new SnapshotInfo();
-			res[i] = info;
-			info.comment = snap.getCheckinComment();
-			info.name = snaps[i];
-			info.uuid = snap.getUUID();
-		}
-		return res;
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void createPackageSnapshot(String packageName,
+                                      String snapshotName,
+                                      boolean replaceExisting,
+                                      String comment) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( packageName ),
+                                                 RoleTypes.PACKAGE_ADMIN );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void createPackageSnapshot(String packageName, String snapshotName,
-			boolean replaceExisting, String comment) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(packageName), RoleTypes.PACKAGE_ADMIN);
-		}
+        log.info( "USER:" + repository.getSession().getUserID() + " CREATING PACKAGE SNAPSHOT for package: [" + packageName + "] snapshot name: [" + snapshotName );
 
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " CREATING PACKAGE SNAPSHOT for package: [" + packageName
-				+ "] snapshot name: [" + snapshotName);
+        if ( replaceExisting ) {
+            repository.removePackageSnapshot( packageName,
+                                              snapshotName );
+        }
 
-		if (replaceExisting) {
-			repository.removePackageSnapshot(packageName, snapshotName);
-		}
+        repository.createPackageSnapshot( packageName,
+                                          snapshotName );
+        PackageItem item = repository.loadPackageSnapshot( packageName,
+                                                           snapshotName );
+        item.updateCheckinComment( comment );
+        repository.save();
 
-		repository.createPackageSnapshot(packageName, snapshotName);
-		PackageItem item = repository.loadPackageSnapshot(packageName,
-				snapshotName);
-		item.updateCheckinComment(comment);
-		repository.save();
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void copyOrRemoveSnapshot(String packageName,
+                                     String snapshotName,
+                                     boolean delete,
+                                     String newSnapshotName) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( packageName ),
+                                                 RoleTypes.PACKAGE_ADMIN );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void copyOrRemoveSnapshot(String packageName, String snapshotName,
-			boolean delete, String newSnapshotName)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(packageName), RoleTypes.PACKAGE_ADMIN);
-		}
+        if ( delete ) {
+            log.info( "USER:" + repository.getSession().getUserID() + " REMOVING SNAPSHOT for package: [" + packageName + "] snapshot: [" + snapshotName + "]" );
+            repository.removePackageSnapshot( packageName,
+                                              snapshotName );
+        } else {
+            if ( newSnapshotName.equals( "" ) ) {
+                throw new SerializableException( "Need to have a new snapshot name." );
+            }
+            log.info( "USER:" + repository.getSession().getUserID() + " COPYING SNAPSHOT for package: [" + packageName + "] snapshot: [" + snapshotName + "] to [" + newSnapshotName + "]" );
 
-		if (delete) {
-			log.info("USER:" + repository.getSession().getUserID()
-					+ " REMOVING SNAPSHOT for package: [" + packageName
-					+ "] snapshot: [" + snapshotName + "]");
-			repository.removePackageSnapshot(packageName, snapshotName);
-		} else {
-			if (newSnapshotName.equals("")) {
-				throw new SerializableException(
-						"Need to have a new snapshot name.");
-			}
-			log.info("USER:" + repository.getSession().getUserID()
-					+ " COPYING SNAPSHOT for package: [" + packageName
-					+ "] snapshot: [" + snapshotName + "] to ["
-					+ newSnapshotName + "]");
+            repository.copyPackageSnapshot( packageName,
+                                            snapshotName,
+                                            newSnapshotName );
+        }
 
-			repository.copyPackageSnapshot(packageName, snapshotName,
-					newSnapshotName);
-		}
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public TableDataResult quickFindAsset(String searchText,
+                                          int max,
+                                          boolean searchArchived) {
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public TableDataResult quickFindAsset(String searchText, int max,
-			boolean searchArchived) {
+        String search = Pattern.compile( "*",
+                                         Pattern.LITERAL ).matcher( searchText ).replaceAll( Matcher.quoteReplacement( "%" ) );
 
-		String search = Pattern.compile("*", Pattern.LITERAL).matcher(
-				searchText).replaceAll(Matcher.quoteReplacement("%"));
+        if ( !search.endsWith( "%" ) ) {
+            search += "%";
+        }
 
-		if (!search.endsWith("%")) {
-			search += "%";
-		}
+        TableDataResult result = new TableDataResult();
 
-		TableDataResult result = new TableDataResult();
+        List<TableDataRow> resultList = new ArrayList<TableDataRow>();
 
-		List<TableDataRow> resultList = new ArrayList<TableDataRow>();
+        long start = System.currentTimeMillis();
+        AssetItemIterator it = repository.findAssetsByName( search,
+                                                            searchArchived ); // search for archived items
+        log.debug( "Search time: " + (System.currentTimeMillis() - start) );
 
-		long start = System.currentTimeMillis();
-		AssetItemIterator it = repository.findAssetsByName(search,
-				searchArchived); // search for archived items
-		log.debug("Search time: " + (System.currentTimeMillis() - start));
+        RepositoryFilter filter = new AssetItemFilter();
+        for ( int i = 0; i < max; i++ ) {
+            if ( !it.hasNext() ) {
+                break;
+            }
+            AssetItem item = (AssetItem) it.next();
+            try {
+                System.err.println( "jcr:path=" + item.getNode().getPath() );
+            } catch ( RepositoryException e ) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            if ( filter.accept( item,
+                                RoleTypes.PACKAGE_READONLY ) ) {
+                TableDataRow row = new TableDataRow();
+                row.id = item.getUUID();
+                String desc = item.getDescription() + "";
+                row.values = new String[]{item.getName(), desc.substring( 0,
+                                                                          Math.min( 32,
+                                                                                    desc.length() ) )};
 
-		RepositoryFilter filter = new AssetItemFilter();
-		for (int i = 0; i < max; i++) {
-			if (!it.hasNext()) {
-				break;
-			}
-			AssetItem item = (AssetItem) it.next();
-			try {
-				System.err.println("jcr:path=" + item.getNode().getPath());
-			} catch (RepositoryException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-			if (filter.accept(item, RoleTypes.PACKAGE_READONLY)) {
-				TableDataRow row = new TableDataRow();
-				row.id = item.getUUID();
-				String desc = item.getDescription() + "";
-				row.values = new String[] { item.getName(),
-						desc.substring(0, Math.min(32, desc.length())) };
+                resultList.add( row );
+            }
+        }
 
-				resultList.add(row);
-			}
-		}
+        while ( it.hasNext() ) {
+            if ( filter.accept( (AssetItem) it.next(),
+                                RoleTypes.PACKAGE_READONLY ) ) {
+                TableDataRow empty = new TableDataRow();
+                empty.id = "MORE";
+                resultList.add( empty );
+                break;
+            }
+        }
 
-		while (it.hasNext()) {
-			if (filter
-					.accept((AssetItem) it.next(), RoleTypes.PACKAGE_READONLY)) {
-				TableDataRow empty = new TableDataRow();
-				empty.id = "MORE";
-				resultList.add(empty);
-				break;
-			}
-		}
+        result.data = resultList.toArray( new TableDataRow[resultList.size()] );
+        return result;
 
-		result.data = resultList.toArray(new TableDataRow[resultList.size()]);
-		return result;
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void removeCategory(String categoryPath) throws SerializableException {
+        log.info( "USER:" + repository.getSession().getUserID() + " REMOVING CATEGORY path: [" + categoryPath + "]" );
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void removeCategory(String categoryPath)
-			throws SerializableException {
-		log.info("USER:" + repository.getSession().getUserID()
-				+ " REMOVING CATEGORY path: [" + categoryPath + "]");
+        try {
+            repository.loadCategory( categoryPath ).remove();
+            repository.save();
+        } catch ( RulesRepositoryException e ) {
+            throw new DetailedSerializableException( "Unable to remove category. It is probably still used (even by archived items).",
+                                                     e.getMessage() );
+        }
+    }
 
-		try {
-			repository.loadCategory(categoryPath).remove();
-			repository.save();
-		} catch (RulesRepositoryException e) {
-			throw new DetailedSerializableException(
-					"Unable to remove category. It is probably still used (even by archived items).",
-					e.getMessage());
-		}
-	}
+    @WebRemote
+    public void clearRulesRepository() {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-	@WebRemote
-	public void clearRulesRepository() {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+        RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator( repository.getSession() );
+        admin.clearRulesRepository();
+    }
 
-		RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(
-				repository.getSession());
-		admin.clearRulesRepository();
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public SuggestionCompletionEngine loadSuggestionCompletionEngine(String packageName) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( packageName ),
+                                                 RoleTypes.PACKAGE_READONLY );
+        }
+        try {
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public SuggestionCompletionEngine loadSuggestionCompletionEngine(
-			String packageName) throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(packageName),
-					RoleTypes.PACKAGE_READONLY);
-		}
-		try {
+            PackageItem pkg = repository.loadPackage( packageName );
+            BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
+            return loader.getSuggestionEngine( pkg );
+        } catch ( RulesRepositoryException e ) {
+            log.error( e );
+            throw new SerializableException( e.getMessage() );
+        }
 
-			PackageItem pkg = repository.loadPackage(packageName);
-			BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
-			return loader.getSuggestionEngine(pkg);
-		} catch (RulesRepositoryException e) {
-			log.error(e);
-			throw new SerializableException(e.getMessage());
-		}
+    }
 
-	}
+    @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)." );
+        }
+    }
 
-	@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).");
-		}
-	}
+    private BuilderResult[] buildPackage(String selectorConfigName,
+                                         boolean force,
+                                         PackageItem item) 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 );
+        if ( asm.hasErrors() ) {
+            BuilderResult[] result = generateBuilderResults( asm );
+            return result;
+        } else {
+            try {
+                ByteArrayOutputStream bout = new ByteArrayOutputStream();
+                ObjectOutput out = new DroolsObjectOutputStream( bout );
+                out.writeObject( asm.getBinaryPackage() );
 
-	private BuilderResult[] buildPackage(String selectorConfigName,
-			boolean force, PackageItem item)
-			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);
-		if (asm.hasErrors()) {
-			BuilderResult[] result = generateBuilderResults(asm);
-			return result;
-		} else {
-			try {
-				ByteArrayOutputStream bout = new ByteArrayOutputStream();
-				ObjectOutput out = new DroolsObjectOutputStream(bout);
-				out.writeObject(asm.getBinaryPackage());
+                item.updateCompiledPackage( new ByteArrayInputStream( bout.toByteArray() ) );
+                out.flush();
+                out.close();
 
-				item.updateCompiledPackage(new ByteArrayInputStream(bout
-						.toByteArray()));
-				out.flush();
-				out.close();
+                updateBinaryPackage( item,
+                                     asm );
+                repository.save();
+            } catch ( Exception e ) {
+                e.printStackTrace();
+                log.error( e );
+                throw new DetailedSerializableException( "An error occurred building the package.",
+                                                         e.getMessage() );
+            }
 
-				updateBinaryPackage(item, asm);
-				repository.save();
-			} catch (Exception e) {
-			    e.printStackTrace();
-				log.error(e);
-				throw new DetailedSerializableException(
-						"An error occurred building the package.", e
-								.getMessage());
-			}
+            return null;
 
-			return null;
+        }
+    }
 
-		}
-	}
+    private void updateBinaryPackage(PackageItem item,
+                                     ContentPackageAssembler asm) throws Exception {
+        item.updateBinaryUpToDate( true );
+        RuleBaseConfiguration conf = new RuleBaseConfiguration();
+        // setting the MapBackedClassloader that is the parent of the builder classloader as the parent
+        // of the rulebase classloader
+        conf.setClassLoader( asm.getBuilder().getRootClassLoader().getParent() );
+        RuleBase rb = RuleBaseFactory.newRuleBase( conf );
+        rb.addPackage( asm.getBinaryPackage() );
+        // this.ruleBaseCache.put(item.getUUID(), rb);
+    }
 
-	private void updateBinaryPackage(PackageItem item,
-			ContentPackageAssembler asm) throws Exception {
-		item.updateBinaryUpToDate(true);
-		RuleBaseConfiguration conf = new RuleBaseConfiguration();
-		// setting the MapBackedClassloader that is the parent of the builder classloader as the parent
-		// of the rulebase classloader
-		conf.setClassLoader( asm.getBuilder().getRootClassLoader().getParent() );
-		RuleBase rb = RuleBaseFactory.newRuleBase( conf );
-		rb.addPackage(asm.getBinaryPackage());
-		// this.ruleBaseCache.put(item.getUUID(), rb);
-	}
+    private BuilderResult[] generateBuilderResults(ContentPackageAssembler asm) {
+        BuilderResult[] result = new BuilderResult[asm.getErrors().size()];
+        for ( int i = 0; i < result.length; i++ ) {
+            ContentAssemblyError err = asm.getErrors().get( i );
+            BuilderResult res = new BuilderResult();
+            res.assetName = err.itemInError.getName();
+            res.assetFormat = err.itemInError.getFormat();
+            res.message = err.errorReport;
+            res.uuid = err.itemInError.getUUID();
+            result[i] = res;
+        }
+        return result;
+    }
 
-	private BuilderResult[] generateBuilderResults(ContentPackageAssembler asm) {
-		BuilderResult[] result = new BuilderResult[asm.getErrors().size()];
-		for (int i = 0; i < result.length; i++) {
-			ContentAssemblyError err = asm.getErrors().get(i);
-			BuilderResult res = new BuilderResult();
-			res.assetName = err.itemInError.getName();
-			res.assetFormat = err.itemInError.getFormat();
-			res.message = err.errorReport;
-			res.uuid = err.itemInError.getUUID();
-			result[i] = res;
-		}
-		return result;
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String buildPackageSource(String packageUUID) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( packageUUID ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String buildPackageSource(String packageUUID)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageUUIDType(packageUUID),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        PackageItem item = repository.loadPackageByUUID( packageUUID );
+        ContentPackageAssembler asm = new ContentPackageAssembler( item,
+                                                                   false );
+        return asm.getDRL();
+    }
 
-		PackageItem item = repository.loadPackageByUUID(packageUUID);
-		ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
-		return asm.getDRL();
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String buildAssetSource(RuleAsset asset) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( asset.metaData.packageName ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String buildAssetSource(RuleAsset asset)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(asset.metaData.packageName),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        AssetItem item = repository.loadAssetByUUID( asset.uuid );
 
-		AssetItem item = repository.loadAssetByUUID(asset.uuid);
+        ContentHandler handler = ContentManager.getHandler( item.getFormat() );// new
+        // AssetContentFormatHandler();
+        handler.storeAssetContent( asset,
+                                   item );
+        StringBuffer buf = new StringBuffer();
+        if ( handler.isRuleAsset() ) {
 
-		ContentHandler handler = ContentManager.getHandler(item.getFormat());// new
-																				// AssetContentFormatHandler();
-		handler.storeAssetContent(asset, item);
-		StringBuffer buf = new StringBuffer();
-		if (handler.isRuleAsset()) {
+            BRMSPackageBuilder builder = new BRMSPackageBuilder( new PackageBuilderConfiguration() );
+            // now we load up the DSL files
+            builder.setDSLFiles( BRMSPackageBuilder.getDSLMappingFiles( item.getPackage(),
+                                                                        new BRMSPackageBuilder.DSLErrorEvent() {
+                                                                            public void recordError(AssetItem asset,
+                                                                                                    String message) {
+                                                                                // ignore at this point...
+                                                                            }
+                                                                        } ) );
+            ((IRuleAsset) handler).assembleDRL( builder,
+                                                item,
+                                                buf );
+        } else {
+            return item.getContent();
+        }
 
-			BRMSPackageBuilder builder = new BRMSPackageBuilder(
-					new PackageBuilderConfiguration());
-			// now we load up the DSL files
-			builder.setDSLFiles(BRMSPackageBuilder.getDSLMappingFiles(item
-					.getPackage(), new BRMSPackageBuilder.DSLErrorEvent() {
-				public void recordError(AssetItem asset, String message) {
-					// ignore at this point...
-				}
-			}));
-			((IRuleAsset) handler).assembleDRL(builder, item, buf);
-		} else {
-			return item.getContent();
-		}
+        return buf.toString();
+    }
 
-		return buf.toString();
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public BuilderResult[] buildAsset(RuleAsset asset) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( asset.metaData.packageName ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public BuilderResult[] buildAsset(RuleAsset asset)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(asset.metaData.packageName),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        try {
 
-		try {
+            AssetItem item = repository.loadAssetByUUID( asset.uuid );
 
-			AssetItem item = repository.loadAssetByUUID(asset.uuid);
+            ContentHandler handler = ContentManager.getHandler( item.getFormat() );// new
+            // AssetContentFormatHandler();
+            handler.storeAssetContent( asset,
+                                       item );
 
-			ContentHandler handler = ContentManager
-					.getHandler(item.getFormat());// new
-													// AssetContentFormatHandler();
-			handler.storeAssetContent(asset, item);
+            if ( handler instanceof IValidating ) {
+                return ((IValidating) handler).validateAsset( item );
+            } else {
 
-			if (handler instanceof IValidating) {
-				return ((IValidating) handler).validateAsset(item);
-			} else {
+                ContentPackageAssembler asm = new ContentPackageAssembler( item );
+                if ( !asm.hasErrors() ) {
+                    return null;
+                } else {
+                    return generateBuilderResults( asm );
+                }
+            }
+        } catch ( Exception e ) {
+            log.error( e );
+            BuilderResult[] result = new BuilderResult[1];
 
-				ContentPackageAssembler asm = new ContentPackageAssembler(item);
-				if (!asm.hasErrors()) {
-					return null;
-				} else {
-					return generateBuilderResults(asm);
-				}
-			}
-		} catch (Exception e) {
-			log.error(e);
-			BuilderResult[] result = new BuilderResult[1];
+            BuilderResult res = new BuilderResult();
+            res.assetName = asset.metaData.name;
+            res.assetFormat = asset.metaData.format;
+            res.message = "Unable to validate this asset. (Check log for detailed messages).";
+            res.uuid = asset.uuid;
+            result[0] = res;
 
-			BuilderResult res = new BuilderResult();
-			res.assetName = asset.metaData.name;
-			res.assetFormat = asset.metaData.format;
-			res.message = "Unable to validate this asset. (Check log for detailed messages).";
-			res.uuid = asset.uuid;
-			result[0] = res;
+            return result;
+        }
 
-			return result;
-		}
+    }
 
-	}
+    @WebRemote
+    public void copyPackage(String sourcePackageName,
+                            String destPackageName) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-	@WebRemote
-	public void copyPackage(String sourcePackageName, String destPackageName)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+        try {
+            repository.copyPackage( sourcePackageName,
+                                    destPackageName );
+        } catch ( RulesRepositoryException e ) {
+            log.error( e );
+            throw e;
+        }
 
-		try {
-			repository.copyPackage(sourcePackageName, destPackageName);
-		} catch (RulesRepositoryException e) {
-			log.error(e);
-			throw e;
-		}
+        // If we allow package owner to copy package, we will have to update the
+        // permission store
+        // for the newly copied package.
+        // Update permission store
+        /*
+         * String copiedUuid = ""; try { PackageItem source =
+         * repository.loadPackage( destPackageName ); copiedUuid =
+         * source.getUUID(); } catch (RulesRepositoryException e) { log.error( e ); }
+         * PackageBasedPermissionStore pbps = new PackageBasedPermissionStore();
+         * pbps.addPackageBasedPermission(new PackageBasedPermission(copiedUuid,
+         * Identity.instance().getPrincipal().getName(),
+         * RoleTypes.PACKAGE_ADMIN));
+         */
+    }
 
-		// If we allow package owner to copy package, we will have to update the
-		// permission store
-		// for the newly copied package.
-		// Update permission store
-		/*
-		 * String copiedUuid = ""; try { PackageItem source =
-		 * repository.loadPackage( destPackageName ); copiedUuid =
-		 * source.getUUID(); } catch (RulesRepositoryException e) { log.error( e ); }
-		 * PackageBasedPermissionStore pbps = new PackageBasedPermissionStore();
-		 * pbps.addPackageBasedPermission(new PackageBasedPermission(copiedUuid,
-		 * Identity.instance().getPrincipal().getName(),
-		 * RoleTypes.PACKAGE_ADMIN));
-		 */
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String renameAsset(String uuid,
+                              String newName) {
+        AssetItem item = repository.loadAssetByUUID( uuid );
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( item.getPackage().getUUID() ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String renameAsset(String uuid, String newName) {
-		AssetItem item = repository.loadAssetByUUID(uuid);
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageUUIDType(item.getPackage().getUUID()),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        return repository.renameAsset( uuid,
+                                       newName );
+    }
 
-		return repository.renameAsset(uuid, newName);
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void archiveAsset(String uuid,
+                             boolean value) {
+        try {
+            AssetItem item = repository.loadAssetByUUID( uuid );
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void archiveAsset(String uuid, boolean value) {
-		try {
-			AssetItem item = repository.loadAssetByUUID(uuid);
+            if ( Contexts.isSessionContextActive() ) {
+                Identity.instance().checkPermission( new PackageUUIDType( item.getPackage().getUUID() ),
+                                                     RoleTypes.PACKAGE_DEVELOPER );
+            }
 
-			if (Contexts.isSessionContextActive()) {
-				Identity.instance().checkPermission(
-						new PackageUUIDType(item.getPackage().getUUID()),
-						RoleTypes.PACKAGE_DEVELOPER);
-			}
+            item.archiveItem( value );
+            PackageItem pkg = item.getPackage();
+            pkg.updateBinaryUpToDate( false );
+            this.ruleBaseCache.remove( pkg.getUUID() );
+            item.checkin( "unarchived" );
 
-			item.archiveItem(value);
-			PackageItem pkg = item.getPackage();
-			pkg.updateBinaryUpToDate(false);
-			this.ruleBaseCache.remove(pkg.getUUID());
-			item.checkin("unarchived");
+        } catch ( RulesRepositoryException e ) {
+            log.error( e );
+            throw e;
+        }
+    }
 
-		} catch (RulesRepositoryException e) {
-			log.error(e);
-			throw e;
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void removeAsset(String uuid) {
+        try {
+            AssetItem item = repository.loadAssetByUUID( uuid );
+            if ( Contexts.isSessionContextActive() ) {
+                Identity.instance().checkPermission( new PackageUUIDType( item.getPackage().getUUID() ),
+                                                     RoleTypes.PACKAGE_DEVELOPER );
+            }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void removeAsset(String uuid) {
-		try {
-			AssetItem item = repository.loadAssetByUUID(uuid);
-			if (Contexts.isSessionContextActive()) {
-				Identity.instance().checkPermission(
-						new PackageUUIDType(item.getPackage().getUUID()),
-						RoleTypes.PACKAGE_DEVELOPER);
-			}
+            item.remove();
+            repository.save();
+        } catch ( RulesRepositoryException e ) {
+            log.error( e );
+            throw e;
+        }
+    }
 
-			item.remove();
-			repository.save();
-		} catch (RulesRepositoryException e) {
-			log.error(e);
-			throw e;
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void removePackage(String uuid) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( uuid ),
+                                                 RoleTypes.PACKAGE_ADMIN );
+        }
+        try {
+            PackageItem item = repository.loadPackageByUUID( uuid );
+            item.remove();
+            repository.save();
+        } catch ( RulesRepositoryException e ) {
+            log.error( e );
+            throw e;
+        }
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void removePackage(String uuid) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(new PackageUUIDType(uuid),
-					RoleTypes.PACKAGE_ADMIN);
-		}
-		try {
-			PackageItem item = repository.loadPackageByUUID(uuid);
-			item.remove();
-			repository.save();
-		} catch (RulesRepositoryException e) {
-			log.error(e);
-			throw e;
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String renamePackage(String uuid,
+                                String newName) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( uuid ),
+                                                 RoleTypes.PACKAGE_ADMIN );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String renamePackage(String uuid, String newName) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(new PackageUUIDType(uuid),
-					RoleTypes.PACKAGE_ADMIN);
-		}
+        return repository.renamePackage( uuid,
+                                         newName );
+    }
 
-		return repository.renamePackage(uuid, newName);
-	}
+    @WebRemote
+    public void rebuildSnapshots() throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-	@WebRemote
-	public void rebuildSnapshots() throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+        Iterator pkit = repository.listPackages();
+        while ( pkit.hasNext() ) {
+            PackageItem pkg = (PackageItem) pkit.next();
+            String[] snaps = repository.listPackageSnapshots( pkg.getName() );
+            for ( String snapName : snaps ) {
+                PackageItem snap = repository.loadPackageSnapshot( pkg.getName(),
+                                                                   snapName );
+                BuilderResult[] res = this.buildPackage( snap.getUUID(),
+                                                         "",
+                                                         true );
+                if ( res != null ) {
+                    StringBuffer buf = new StringBuffer();
+                    for ( int i = 0; i < res.length; i++ ) {
+                        buf.append( res[i].toString() );
+                        buf.append( '\n' );
+                    }
+                    throw new DetailedSerializableException( "Unable to rebuild snapshot [" + snapName,
+                                                             buf.toString() + "]" );
+                }
+            }
+        }
+    }
 
-		Iterator pkit = repository.listPackages();
-		while (pkit.hasNext()) {
-			PackageItem pkg = (PackageItem) pkit.next();
-			String[] snaps = repository.listPackageSnapshots(pkg.getName());
-			for (String snapName : snaps) {
-				PackageItem snap = repository.loadPackageSnapshot(
-						pkg.getName(), snapName);
-				BuilderResult[] res = this.buildPackage(snap.getUUID(), "",
-						true);
-				if (res != null) {
-					StringBuffer buf = new StringBuffer();
-					for (int i = 0; i < res.length; i++) {
-						buf.append(res[i].toString());
-						buf.append('\n');
-					}
-					throw new DetailedSerializableException(
-							"Unable to rebuild snapshot [" + snapName, buf
-									.toString()
-									+ "]");
-				}
-			}
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String[] listRulesInPackage(String packageName) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( packageName ),
+                                                 RoleTypes.PACKAGE_READONLY );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String[] listRulesInPackage(String packageName)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(packageName),
-					RoleTypes.PACKAGE_READONLY);
-		}
+        PackageItem item = repository.loadPackage( packageName );
+        ContentPackageAssembler asm = new ContentPackageAssembler( item,
+                                                                   false );
+        List<String> result = new ArrayList<String>();
+        DrlParser p = new DrlParser();
+        try {
+            PackageDescr pkg = p.parse( asm.getDRL() );
+            int count = 0;
+            if ( pkg != null ) {
+                for ( Iterator iterator = pkg.getRules().iterator(); iterator.hasNext(); ) {
+                    RuleDescr r = (RuleDescr) iterator.next();
+                    result.add( r.getName() );
+                    count++;
+                    if ( count == 5000 ) {
+                        result.add( "More then 5000 rules." );
+                        break;
+                    }
+                }
+            }
+            return result.toArray( new String[result.size()] );
+        } catch ( DroolsParserException e ) {
+            log.error( e );
+            return new String[0];
+        }
+    }
 
-		PackageItem item = repository.loadPackage(packageName);
-		ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
-		List<String> result = new ArrayList<String>();
-		DrlParser p = new DrlParser();
-		try {
-			PackageDescr pkg = p.parse(asm.getDRL());
-			int count = 0;
-			if (pkg != null) {
-				for (Iterator iterator = pkg.getRules().iterator(); iterator
-						.hasNext();) {
-					RuleDescr r = (RuleDescr) iterator.next();
-					result.add(r.getName());
-					count++;
-					if (count == 5000) {
-						result.add("More then 5000 rules.");
-						break;
-					}
-				}
-			}
-			return result.toArray(new String[result.size()]);
-		} catch (DroolsParserException e) {
-			log.error(e);
-			return new String[0];
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public SingleScenarioResult runScenario(String packageName,
+                                            Scenario scenario) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageNameType( packageName ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public SingleScenarioResult runScenario(String packageName, Scenario scenario)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageNameType(packageName),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        return runScenario( packageName,
+                            scenario,
+                            null );
 
-		return runScenario(packageName, scenario, null);
+    }
 
-	}
+    private SingleScenarioResult runScenario(String packageName,
+                                             Scenario scenario,
+                                             RuleCoverageListener coverage) throws SerializableException {
+        PackageItem item = this.repository.loadPackage( packageName );
 
-	private SingleScenarioResult runScenario(String packageName, Scenario scenario, RuleCoverageListener coverage) throws SerializableException {
-		PackageItem item = this.repository.loadPackage(packageName);
+        // nasty classloader needed to make sure we use the same tree the whole
+        // time.
+        ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
 
-		// nasty classloader needed to make sure we use the same tree the whole
-		// time.
-		ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
+        final RuleBase rb;
 
-		final RuleBase rb;
+        try {
+            if ( item.isBinaryUpToDate() && this.ruleBaseCache.containsKey( item.getUUID() ) ) {
+                rb = this.ruleBaseCache.get( item.getUUID() );
+            } else {
+                // load up the classloader we are going to use
+                List<JarInputStream> jars = BRMSPackageBuilder.getJars( item );
+                ClassLoader buildCl = BRMSPackageBuilder.createClassLoader( jars );
 
-		try {
-			if (item.isBinaryUpToDate()
-					&& this.ruleBaseCache.containsKey(item.getUUID())) {
-				rb = this.ruleBaseCache.get(item.getUUID());
-			} else {
-				// load up the classloader we are going to use
-				List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
-				ClassLoader buildCl = BRMSPackageBuilder
-						.createClassLoader(jars);
+                // we have to build the package, and try again.
+                if ( item.isBinaryUpToDate() ) {
+                    rb = loadRuleBase( item,
+                                       buildCl );
+                    this.ruleBaseCache.put( item.getUUID(),
+                                            rb );
+                } else {
+                    BuilderResult[] errs = this.buildPackage( null,
+                                                              false,
+                                                              item );
+                    if ( errs == null || errs.length == 0 ) {
+                        rb = loadRuleBase( item,
+                                           buildCl );
+                        this.ruleBaseCache.put( item.getUUID(),
+                                                rb );
+                    } else {
+                        SingleScenarioResult r = new SingleScenarioResult();
+                        r.result = new ScenarioRunResult( errs,
+                                                          null );
+                        return r;
+                    }
+                }
+            }
 
-				// we have to build the package, and try again.
-				if (item.isBinaryUpToDate()) {
-					rb = loadRuleBase(item, buildCl);
-					this.ruleBaseCache.put(item.getUUID(), rb);
-				} else {
-					BuilderResult[] errs = this.buildPackage(null, false, item);
-					if (errs == null || errs.length == 0) {
-						rb = loadRuleBase(item, buildCl);
-						this.ruleBaseCache.put(item.getUUID(), rb);
-					} else {
-						SingleScenarioResult r = new SingleScenarioResult();
-						r.result = new ScenarioRunResult(errs, null);
-						return r;
-					}
-				}
-			}
+            ClassLoader cl = ((InternalRuleBase) this.ruleBaseCache.get( item.getUUID() )).getRootClassLoader();
+            Thread.currentThread().setContextClassLoader( cl );
+            return runScenario( scenario,
+                                item,
+                                cl,
+                                rb,
+                                coverage );
 
-			ClassLoader cl = ((InternalRuleBase)this.ruleBaseCache.get(item.getUUID())).getRootClassLoader();
-			Thread.currentThread().setContextClassLoader(cl);
-			return runScenario(scenario, item, cl, rb, coverage);
+        } finally {
+            Thread.currentThread().setContextClassLoader( originalCL );
+        }
 
-		} finally {
-			Thread.currentThread().setContextClassLoader(originalCL);
-		}
+    }
 
-	}
+    private RuleBase loadRuleBase(PackageItem item,
+                                  ClassLoader cl) throws DetailedSerializableException {
+        try {
+            RuleBase rb = RuleBaseFactory.newRuleBase( new RuleBaseConfiguration( cl ) );
+            Package bin = (Package) DroolsStreamUtils.streamIn( item.getCompiledPackageBytes(),
+                                                                cl );
+            rb.addPackage( bin );
+            return rb;
+        } catch ( ClassNotFoundException e ) {
+            log.error( e );
+            throw new DetailedSerializableException( "A required class was not found.",
+                                                     e.getMessage() );
+        } catch ( Exception e ) {
+            log.error( e );
+            throw new DetailedSerializableException( "Unable to load a rulebase.",
+                                                     e.getMessage() );
+        }
+    }
 
-	private RuleBase loadRuleBase(PackageItem item, ClassLoader cl)
-			throws DetailedSerializableException {
-		try {
-			RuleBase rb = RuleBaseFactory
-					.newRuleBase(new RuleBaseConfiguration(cl));
-			Package bin = (Package) DroolsStreamUtils.streamIn(item
-					.getCompiledPackageBytes(), cl);
-			rb.addPackage(bin);
-			return rb;
-		} catch (ClassNotFoundException e) {
-			log.error(e);
-			throw new DetailedSerializableException(
-					"A required class was not found.", e.getMessage());
-		} catch (Exception e) {
-			log.error(e);
-			throw new DetailedSerializableException(
-					"Unable to load a rulebase.", e.getMessage());
-		}
-	}
+    private SingleScenarioResult runScenario(Scenario scenario,
+                                             PackageItem item,
+                                             ClassLoader cl,
+                                             RuleBase rb,
+                                             RuleCoverageListener coverage) throws DetailedSerializableException {
 
-	private SingleScenarioResult runScenario(Scenario scenario, PackageItem item,
-			ClassLoader cl, RuleBase rb, RuleCoverageListener coverage) throws DetailedSerializableException {
+        // RuleBase rb = ruleBaseCache.get(item.getUUID());
+        Package bin = rb.getPackages()[0];
 
-		// RuleBase rb = ruleBaseCache.get(item.getUUID());
-		Package bin = rb.getPackages()[0];
+        Set<String> imps = bin.getImports().keySet();
+        Set<String> allImps = new HashSet<String>( imps );
+        if ( bin.getGlobals() != null ) {
+            for ( Iterator iterator = bin.getGlobals().keySet().iterator(); iterator.hasNext(); ) {
+                allImps.add( bin.getGlobals().get( iterator.next() ) );
+            }
+        }
+        allImps.add( bin.getName() + ".*" ); // need this for Generated beans to
+        // work
 
-		Set<String> imps = bin.getImports().keySet();
-		Set<String> allImps = new HashSet<String>(imps);
-		if (bin.getGlobals() != null) {
-			for (Iterator iterator = bin.getGlobals().keySet().iterator(); iterator
-					.hasNext();) {
-				allImps.add( bin.getGlobals().get(iterator.next()));
-			}
-		}
-		allImps.add(bin.getName() + ".*"); // need this for Generated beans to
-											// work
+        ClassTypeResolver res = new ClassTypeResolver( allImps,
+                                                       cl );
+        SessionConfiguration sessionConfiguration = new SessionConfiguration();
+        sessionConfiguration.setKeepReference( false );
+        InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb.newStatefulSession( sessionConfiguration );
+        if ( coverage != null ) workingMemory.addEventListener( coverage );
+        try {
+            AuditLogReporter logger = new AuditLogReporter( workingMemory );
+            new ScenarioRunner( scenario,
+                                res,
+                                workingMemory );
+            SingleScenarioResult r = new SingleScenarioResult();
+            r.auditLog = logger.buildReport();
+            r.result = new ScenarioRunResult( null,
+                                              scenario );
+            return r;
+        } catch ( ClassNotFoundException e ) {
+            log.error( e );
+            throw new DetailedSerializableException( "Unable to load a required class.",
+                                                     e.getMessage() );
+        } finally {
 
-		ClassTypeResolver res = new ClassTypeResolver(allImps, cl);
-		SessionConfiguration sessionConfiguration = new SessionConfiguration();
-		sessionConfiguration.setKeepReference(false);
-		InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb
-				.newStatefulSession(sessionConfiguration);
-		if (coverage != null) workingMemory.addEventListener(coverage);
-		try {
-			AuditLogReporter logger = new AuditLogReporter(workingMemory);
-			new ScenarioRunner(scenario, res, workingMemory);
-			SingleScenarioResult r = new SingleScenarioResult();
-			r.auditLog = logger.buildReport();
-			r.result = new ScenarioRunResult(null, scenario);
-			return r;
-		} catch (ClassNotFoundException e) {
-			log.error(e);
-			throw new DetailedSerializableException(
-					"Unable to load a required class.", e.getMessage());
-		} finally {
+        }
+    }
 
-		}
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public BulkTestRunResult runScenariosInPackage(String packageUUID) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( packageUUID ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
+        PackageItem item = repository.loadPackageByUUID( packageUUID );
 
+        ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
+        ClassLoader cl = null;
 
+        try {
+            if ( item.isBinaryUpToDate() && this.ruleBaseCache.containsKey( item.getUUID() ) ) {
+                RuleBase rb = this.ruleBaseCache.get( item.getUUID() );
+                AbstractRuleBase arb = (AbstractRuleBase) rb;
+                // load up the existing class loader from before
+                cl = arb.getConfiguration().getClassLoader();
+                Thread.currentThread().setContextClassLoader( cl );
+            } else {
+                // load up the classloader we are going to use
+                List<JarInputStream> jars = BRMSPackageBuilder.getJars( item );
+                cl = BRMSPackageBuilder.createClassLoader( jars );
+                Thread.currentThread().setContextClassLoader( cl );
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public BulkTestRunResult runScenariosInPackage(String packageUUID)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageUUIDType(packageUUID),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+                // we have to build the package, and try again.
+                if ( item.isBinaryUpToDate() ) {
+                    this.ruleBaseCache.put( item.getUUID(),
+                                            loadRuleBase( item,
+                                                          cl ) );
+                } else {
+                    BuilderResult[] errs = this.buildPackage( null,
+                                                              false,
+                                                              item );
+                    if ( errs == null || errs.length == 0 ) {
+                        this.ruleBaseCache.put( item.getUUID(),
+                                                loadRuleBase( item,
+                                                              cl ) );
+                    } else {
+                        return new BulkTestRunResult( errs,
+                                                      null,
+                                                      0,
+                                                      null );
+                    }
+                }
+            }
 
-		PackageItem item = repository.loadPackageByUUID(packageUUID);
+            AssetItemIterator it = item.listAssetsByFormat( new String[]{AssetFormats.TEST_SCENARIO} );
+            List<ScenarioResultSummary> resultSummaries = new ArrayList<ScenarioResultSummary>();
+            RuleBase rb = ruleBaseCache.get( item.getUUID() );
+            Package bin = rb.getPackages()[0];
 
-		ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
-		ClassLoader cl = null;
+            RuleCoverageListener coverage = new RuleCoverageListener( expectedRules( bin ) );
 
-		try {
-			if (item.isBinaryUpToDate()
-					&& this.ruleBaseCache.containsKey(item.getUUID())) {
-				RuleBase rb = this.ruleBaseCache.get(item.getUUID());
-				AbstractRuleBase arb = (AbstractRuleBase) rb;
-				// load up the existing class loader from before
-				cl = arb.getConfiguration().getClassLoader();
-				Thread.currentThread().setContextClassLoader(cl);
-			} else {
-				// load up the classloader we are going to use
-				List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
-				cl = BRMSPackageBuilder.createClassLoader(jars);
-				Thread.currentThread().setContextClassLoader(cl);
+            while ( it.hasNext() ) {
+                RuleAsset asset = loadAsset( (AssetItem) it.next() );
+                Scenario sc = (Scenario) asset.content;
+                runScenario( item.getName(),
+                             sc,
+                             coverage );//runScenario(sc, res, workingMemory).scenario;
 
-				// we have to build the package, and try again.
-				if (item.isBinaryUpToDate()) {
-					this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item,
-							cl));
-				} else {
-					BuilderResult[] errs = this.buildPackage(null, false, item);
-					if (errs == null || errs.length == 0) {
-						this.ruleBaseCache.put(item.getUUID(), loadRuleBase(
-								item, cl));
-					} else {
-						return new BulkTestRunResult(errs, null, 0, null);
-					}
-				}
-			}
+                int[] totals = sc.countFailuresTotal();
+                resultSummaries.add( new ScenarioResultSummary( totals[0],
+                                                                totals[1],
+                                                                asset.metaData.name,
+                                                                asset.metaData.description,
+                                                                asset.uuid ) );
+            }
 
-			AssetItemIterator it = item.listAssetsByFormat(new String[] { AssetFormats.TEST_SCENARIO });
-			List<ScenarioResultSummary> resultSummaries = new ArrayList<ScenarioResultSummary>();
-			RuleBase rb = ruleBaseCache.get(item.getUUID());
-			Package bin = rb.getPackages()[0];
+            ScenarioResultSummary[] summaries = resultSummaries.toArray( new ScenarioResultSummary[resultSummaries.size()] );
 
-			RuleCoverageListener coverage = new RuleCoverageListener(
-					expectedRules(bin));
+            BulkTestRunResult result = new BulkTestRunResult( null,
+                                                              resultSummaries.toArray( summaries ),
+                                                              coverage.getPercentCovered(),
+                                                              coverage.getUnfiredRules() );
+            return result;
 
-			while (it.hasNext()) {
-				RuleAsset asset = loadAsset((AssetItem) it.next());
-				Scenario sc = (Scenario) asset.content;
-				runScenario(item.getName(), sc, coverage);//runScenario(sc, res, workingMemory).scenario;
+        } finally {
+            Thread.currentThread().setContextClassLoader( originalCL );
+        }
 
-				int[] totals = sc.countFailuresTotal();
-				resultSummaries.add(new ScenarioResultSummary(totals[0],
-						totals[1], asset.metaData.name,
-						asset.metaData.description, asset.uuid));
-			}
+    }
 
-			ScenarioResultSummary[] summaries = resultSummaries
-					.toArray(new ScenarioResultSummary[resultSummaries.size()]);
+    private HashSet<String> expectedRules(Package bin) {
+        HashSet<String> h = new HashSet<String>();
+        for ( int i = 0; i < bin.getRules().length; i++ ) {
+            h.add( bin.getRules()[i].getName() );
+        }
+        return h;
+    }
 
-			BulkTestRunResult result = new BulkTestRunResult(null,
-					resultSummaries.toArray(summaries), coverage
-							.getPercentCovered(), coverage.getUnfiredRules());
-			return result;
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public AnalysisReport analysePackage(String packageUUID) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( packageUUID ),
+                                                 RoleTypes.PACKAGE_DEVELOPER );
+        }
 
-		} finally {
-			Thread.currentThread().setContextClassLoader(originalCL);
-		}
+        String drl = this.buildPackageSource( packageUUID );
+        VerifierRunner runner = new VerifierRunner();
+        try {
+            return runner.analyse( drl );
+        } catch ( DroolsParserException e ) {
+            log.error( e );
+            throw new DetailedSerializableException( "Unable to parse the rules.",
+                                                     e.getMessage() );
+        }
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String[] listTypesInPackage(String packageUUID) throws SerializableException {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new PackageUUIDType( packageUUID ),
+                                                 "package.readoly" );
+        }
 
-	private HashSet<String> expectedRules(Package bin) {
-		HashSet<String> h = new HashSet<String>();
-		for (int i = 0; i < bin.getRules().length; i++) {
-			h.add(bin.getRules()[i].getName());
-		}
-		return h;
-	}
+        PackageItem pkg = this.repository.loadPackageByUUID( packageUUID );
+        List<String> res = new ArrayList<String>();
+        AssetItemIterator it = pkg.listAssetsByFormat( new String[]{AssetFormats.MODEL, AssetFormats.DRL_MODEL} );
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public AnalysisReport analysePackage(String packageUUID)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageUUIDType(packageUUID),
-					RoleTypes.PACKAGE_DEVELOPER);
-		}
+        JarInputStream jis = null;
 
-		String drl = this.buildPackageSource(packageUUID);
-		VerifierRunner runner = new VerifierRunner();
-		try {
-			return runner.analyse(drl);
-		} catch (DroolsParserException e) {
-			log.error(e);
-			throw new DetailedSerializableException(
-					"Unable to parse the rules.", e.getMessage());
-		}
-	}
+        try {
+            while ( it.hasNext() ) {
+                AssetItem asset = (AssetItem) it.next();
+                if ( !asset.isArchived() ) {
+                    if ( asset.getFormat().equals( AssetFormats.MODEL ) ) {
+                        jis = new JarInputStream( asset.getBinaryContentAttachment() );
+                        JarEntry entry = null;
+                        while ( (entry = jis.getNextJarEntry()) != null ) {
+                            if ( !entry.isDirectory() ) {
+                                if ( entry.getName().endsWith( ".class" ) ) {
+                                    res.add( ModelContentHandler.convertPathToName( entry.getName() ) );
+                                }
+                            }
+                        }
+                    } else {
+                        // its delcared model
+                        DrlParser parser = new DrlParser();
+                        try {
+                            PackageDescr desc = parser.parse( asset.getContent() );
+                            List<TypeDeclarationDescr> types = desc.getTypeDeclarations();
+                            for ( TypeDeclarationDescr typeDeclarationDescr : types ) {
+                                res.add( typeDeclarationDescr.getTypeName() );
+                            }
+                        } catch ( DroolsParserException e ) {
+                            log.error( e );
+                        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String[] listTypesInPackage(String packageUUID)
-			throws SerializableException {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new PackageUUIDType(packageUUID), "package.readoly");
-		}
+                    }
 
-		PackageItem pkg = this.repository.loadPackageByUUID(packageUUID);
-		List<String> res = new ArrayList<String>();
-		AssetItemIterator it = pkg.listAssetsByFormat(new String[] {
-				AssetFormats.MODEL, AssetFormats.DRL_MODEL });
+                }
+            }
+            return res.toArray( new String[res.size()] );
+        } catch ( IOException e ) {
+            log.error( e );
+            throw new DetailedSerializableException( "Unable to read the jar files in the package.",
+                                                     e.getMessage() );
+        } finally {
+            IOUtils.closeQuietly( jis );
+        }
 
-		JarInputStream jis = null;
+    }
 
-		try {
-			while (it.hasNext()) {
-				AssetItem asset = (AssetItem) it.next();
-				if (!asset.isArchived()) {
-					if (asset.getFormat().equals(AssetFormats.MODEL)) {
-						jis = new JarInputStream(asset
-								.getBinaryContentAttachment());
-						JarEntry entry = null;
-						while ((entry = jis.getNextJarEntry()) != null) {
-							if (!entry.isDirectory()) {
-								if (entry.getName().endsWith(".class")) {
-									res
-											.add(ModelContentHandler
-													.convertPathToName(entry
-															.getName()));
-								}
-							}
-						}
-					} else {
-						// its delcared model
-						DrlParser parser = new DrlParser();
-						try {
-							PackageDescr desc = parser
-									.parse(asset.getContent());
-							List<TypeDeclarationDescr> types = desc
-									.getTypeDeclarations();
-							for (TypeDeclarationDescr typeDeclarationDescr : types) {
-								res.add(typeDeclarationDescr.getTypeName());
-							}
-						} catch (DroolsParserException e) {
-							log.error(e);
-						}
+    @WebRemote
+    public LogEntry[] showLog() {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-					}
+        return LoggingHelper.getMessages();
 
-				}
-			}
-			return res.toArray(new String[res.size()]);
-		} catch (IOException e) {
-			log.error(e);
-			throw new DetailedSerializableException(
-					"Unable to read the jar files in the package.", e
-							.getMessage());
-		} finally {
-			IOUtils.closeQuietly(jis);
-		}
+    }
 
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void renameCategory(String fullPathAndName,
+                               String newName) {
+        repository.renameCategory( fullPathAndName,
+                                   newName );
+    }
 
-	@WebRemote
-	public LogEntry[] showLog() {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+    public static String getDroolsHeader(PackageItem pkg) {
+        if ( pkg.containsAsset( "drools" ) ) {
+            return pkg.loadAsset( "drools" ).getContent();
+        } else {
+            return "";
+        }
+    }
 
-		return LoggingHelper.getMessages();
+    public static void updateDroolsHeader(String string,
+                                          PackageItem pkg) {
+        pkg.checkout();
+        AssetItem conf;
+        if ( pkg.containsAsset( "drools" ) ) {
+            conf = pkg.loadAsset( "drools" );
+            conf.updateContent( string );
+            conf.checkin( "" );
+        } else {
+            conf = pkg.addAsset( "drools",
+                                 "" );
+            conf.updateFormat( "package" );
+            conf.updateContent( string );
+            conf.checkin( "" );
+        }
 
-	}
+    }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void renameCategory(String fullPathAndName, String newName) {
-		repository.renameCategory(fullPathAndName, newName);
-	}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public String[] loadDropDownExpression(String[] valuePairs,
+                                           String expression) {
+        Map<String, String> context = new HashMap<String, String>();
+        for ( int i = 0; i < valuePairs.length; i++ ) {
+            String[] pair = valuePairs[i].split( "=" );
+            context.put( pair[0],
+                         pair[1] );
+        }
+        // first interpolate the pairs
+        expression = (String) TemplateRuntime.eval( expression,
+                                                    context );
 
-	public static String getDroolsHeader(PackageItem pkg) {
-		if (pkg.containsAsset("drools")) {
-			return pkg.loadAsset("drools").getContent();
-		} else {
-			return "";
-		}
-	}
+        // now we can eval it for real...
+        Object result = MVEL.eval( expression );
+        if ( result instanceof String[] ) {
+            return (String[]) result;
+        } else if ( result instanceof List ) {
+            List l = (List) result;
+            String[] xs = new String[l.size()];
+            for ( int i = 0; i < xs.length; i++ ) {
+                Object el = l.get( i );
+                xs[i] = el.toString();
+            }
+            return xs;
+        } else {
+            return null;
+        }
+    }
 
-	public static void updateDroolsHeader(String string, PackageItem pkg) {
-		pkg.checkout();
-		AssetItem conf;
-		if (pkg.containsAsset("drools")) {
-			conf = pkg.loadAsset("drools");
-			conf.updateContent(string);
-			conf.checkin("");
-		} else {
-			conf = pkg.addAsset("drools", "");
-			conf.updateFormat("package");
-			conf.updateContent(string);
-			conf.checkin("");
-		}
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public void rebuildPackages() throws SerializableException {
+        Iterator pkit = repository.listPackages();
+        StringBuffer errs = new StringBuffer();
+        while ( pkit.hasNext() ) {
+            PackageItem pkg = (PackageItem) pkit.next();
+            try {
+                BuilderResult[] res = this.buildPackage( pkg.getUUID(),
+                                                         "",
+                                                         true );
+                if ( res != null ) {
+                    errs.append( "Unable to build package name [" + pkg.getName() + "]\n" );
+                    StringBuffer buf = new StringBuffer();
+                    for ( int i = 0; i < res.length; i++ ) {
+                        buf.append( res[i].toString() );
+                        buf.append( '\n' );
+                    }
+                    log.warn( buf.toString() );
 
-	}
+                }
+            } catch ( Exception e ) {
+                log.error( e );
+                errs.append( "An error occurred building package [" + pkg.getName() + "]\n" );
+            }
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public String[] loadDropDownExpression(String[] valuePairs,
-			String expression) {
-		Map<String, String> context = new HashMap<String, String>();
-		for (int i = 0; i < valuePairs.length; i++) {
-			String[] pair = valuePairs[i].split("=");
-			context.put(pair[0], pair[1]);
-		}
-		// first interpolate the pairs
-		expression = (String) TemplateRuntime.eval(expression, context);
+        if ( errs.toString().length() > 0 ) {
+            throw new DetailedSerializableException( "Unable to rebuild all packages.",
+                                                     errs.toString() );
+        }
+    }
 
-		// now we can eval it for real...
-		Object result = MVEL.eval(expression);
-		if (result instanceof String[]) {
-			return (String[]) result;
-		} else if (result instanceof List) {
-			List l = (List) result;
-			String[] xs = new String[l.size()];
-			for (int i = 0; i < xs.length; i++) {
-				Object el = l.get(i);
-				xs[i] = el.toString();
-			}
-			return xs;
-		} else {
-			return null;
-		}
-	}
+    public Map<String, List<String>> listUserPermissions() {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-	@WebRemote
-	@Restrict("#{identity.loggedIn}")
-	public void rebuildPackages() throws SerializableException {
-		Iterator pkit = repository.listPackages();
-		StringBuffer errs = new StringBuffer();
-		while (pkit.hasNext()) {
-			PackageItem pkg = (PackageItem) pkit.next();
-			try {
-				BuilderResult[] res = this
-						.buildPackage(pkg.getUUID(), "", true);
-				if (res != null) {
-					errs.append("Unable to build package name ["
-							+ pkg.getName() + "]\n");
-					StringBuffer buf = new StringBuffer();
-					for (int i = 0; i < res.length; i++) {
-						buf.append(res[i].toString());
-						buf.append('\n');
-					}
-					log.warn(buf.toString());
+        PermissionManager pm = new PermissionManager( repository );
+        return pm.listUsers();
+    }
 
-				}
-			} catch (Exception e) {
-				log.error(e);
-				errs.append("An error occurred building package ["
-						+ pkg.getName() + "]\n");
-			}
-		}
+    public Map<String, List<String>> retrieveUserPermissions(String userName) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-		if (errs.toString().length() > 0) {
-			throw new DetailedSerializableException(
-					"Unable to rebuild all packages.", errs.toString());
-		}
-	}
+        PermissionManager pm = new PermissionManager( repository );
+        return pm.retrieveUserPermissions( userName );
+    }
 
-	public Map<String, List<String>> listUserPermissions() {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+    public void updateUserPermissions(String userName,
+                                      Map<String, List<String>> perms) {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-		PermissionManager pm = new PermissionManager(repository);
-		return pm.listUsers();
-	}
+        PermissionManager pm = new PermissionManager( repository );
+        System.err.println( perms );
+        log.info( "Updating user permissions for userName [" + userName + "] to [" + perms + "]" );
+        pm.updateUserPermissions( userName,
+                                  perms );
+        repository.save();
+    }
 
-	public Map<String, List<String>> retrieveUserPermissions(String userName) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+    public String[] listAvailablePermissionTypes() {
+        if ( Contexts.isSessionContextActive() ) {
+            Identity.instance().checkPermission( new AdminType(),
+                                                 RoleTypes.ADMIN );
+        }
 
-		PermissionManager pm = new PermissionManager(repository);
-		return pm.retrieveUserPermissions(userName);
-	}
+        return RoleTypes.listAvailableTypes();
+    }
 
-	public void updateUserPermissions(String userName,
-			Map<String, List<String>> perms) {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
+    public void deleteUser(String userName) {
+        log.info( "Removing user permissions for user name [" + userName + "]" );
+        PermissionManager pm = new PermissionManager( repository );
+        pm.removeUserPermissions( userName );
+        repository.save();
+    }
 
-		PermissionManager pm = new PermissionManager(repository);
-		System.err.println(perms);
-		log.info("Updating user permissions for userName [" + userName + "] to [" + perms + "]");
-		pm.updateUserPermissions(userName, perms);
-		repository.save();
-	}
-
-	public String[] listAvailablePermissionTypes() {
-		if (Contexts.isSessionContextActive()) {
-			Identity.instance().checkPermission(
-					new AdminType(),
-					RoleTypes.ADMIN);
-		}
-
-		return RoleTypes.listAvailableTypes();
-	}
-
-	public void deleteUser(String userName) {
-		log.info("Removing user permissions for user name [" + userName + "]");
-		PermissionManager pm = new PermissionManager(repository);
-		pm.removeUserPermissions(userName);
-		repository.save();
-	}
-	 /* (non-Javadoc)
-     * @see org.drools.guvnor.client.rpc.RepositoryService#getAssetLockerUserName(java.lang.String)
-     */
+    /* (non-Javadoc)
+    * @see org.drools.guvnor.client.rpc.RepositoryService#getAssetLockerUserName(java.lang.String)
+    */
     public String getAssetLockerUserName(String uuid) {
         AssetLockManager alm = AssetLockManager.instance();
 
         String userName = alm.getAssetLockerUserName( uuid );
-        
+
         log.info( "Asset locked by [" + userName + "]" );
-        
+
         return userName;
     }
 

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -349,7 +349,7 @@
                                        AssetItem.PACKAGE_NAME_PROPERTY );
             dest.node.setProperty( AssetItem.VERSION_NUMBER_PROPERTY_NAME,
                                    0 );
-            dest.updateTitle(dest.getName());
+            dest.updateTitle( dest.getName() );
             dest.checkin( "Copied from " + source.getPackageName() + "/" + source.getName() );
             return dest.getUUID();
         } catch ( RepositoryException e ) {
@@ -384,6 +384,23 @@
         }
     }
 
+    public StateItem loadState(String name) throws RulesRepositoryException {
+        try {
+            Node folderNode = this.getAreaNode( STATE_AREA );
+            Node ruleStateNode = folderNode.getNode( name );
+
+            return new StateItem( this,
+                                  ruleStateNode );
+        } catch ( RepositoryException e ) {
+            log.error( "Unable to load a status. ",
+                       e );
+
+            throw new RulesRepositoryException( "Unable to load a status. ",
+                                                e );
+
+        }
+    }
+
     /**
      * This returns true if the repository contains the specified package name.
      */
@@ -1122,6 +1139,22 @@
         }
     }
 
+    public void renameState(String oldName,
+                            String newName) {
+        try {
+            StateItem state = loadState( oldName );
+            Node node = state.getNode();
+            String sourcePath = node.getPath();
+            String destPath = node.getParent().getPath() + "/" + newName;
+            this.session.move( sourcePath,
+                               destPath );
+            save();
+        } catch ( RepositoryException e ) {
+            log.error( e );
+            throw new RulesRepositoryException( e );
+        }
+    }
+
     /**
      * This will rename a package and apply the change immediately.
      * @return the UUID of the package
@@ -1267,7 +1300,7 @@
             String sql = "SELECT " + AssetItem.TITLE_PROPERTY_NAME + ", " + AssetItem.DESCRIPTION_PROPERTY_NAME + ", " + AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG + " FROM " + AssetItem.RULE_NODE_TYPE_NAME;
             sql += " WHERE jcr:path LIKE '/" + RULES_REPOSITORY_NAME + "/" + RULE_PACKAGE_AREA + "/%'";
             for ( Iterator<Map.Entry<String, String[]>> iterator = params.entrySet().iterator(); iterator.hasNext(); ) {
-            	Map.Entry<String, String[]> en = iterator.next();
+                Map.Entry<String, String[]> en = iterator.next();
                 String fld = en.getKey();
                 String[] options = en.getValue();
                 if ( options != null && options.length > 0 ) {

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/StateItem.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -1,6 +1,8 @@
 package org.drools.repository;
 
 import javax.jcr.Node;
+import javax.jcr.PropertyIterator;
+import javax.jcr.RepositoryException;
 
 import org.apache.log4j.Logger;
 
@@ -13,18 +15,18 @@
  */
 public class StateItem extends Item {
 
-    private Logger log = Logger.getLogger(StateItem.class);
+    private Logger             log                  = Logger.getLogger( StateItem.class );
 
     /**
      * All assets when created, or a new version saved, have a status of Draft.
      */
-    public static final String DRAFT_STATE_NAME = "Draft";
-    
+    public static final String DRAFT_STATE_NAME     = "Draft";
+
     /**
      * The name of the state node type
      */
     public static final String STATE_NODE_TYPE_NAME = "drools:stateNodeType";
-    
+
     /**
      * Constructs an object of type StateItem corresponding the specified node
      * 
@@ -32,39 +34,52 @@
      * @param node the node to which this object corresponds
      * @throws RulesRepositoryException 
      */
-    public StateItem(RulesRepository rulesRepository, Node node) throws RulesRepositoryException {
-        super(rulesRepository, node);
-        
+    public StateItem(RulesRepository rulesRepository,
+                     Node node) throws RulesRepositoryException {
+        super( rulesRepository,
+               node );
+
         try {
             //make sure this node is a state node       
-            if(!(this.node.getPrimaryNodeType().getName().equals(STATE_NODE_TYPE_NAME))) {
+            if ( !(this.node.getPrimaryNodeType().getName().equals( STATE_NODE_TYPE_NAME )) ) {
                 String message = this.node.getName() + " is not a node of type " + STATE_NODE_TYPE_NAME + ". It is a node of type: " + this.node.getPrimaryNodeType().getName();
-                log.error(message);
-                throw new RulesRepositoryException(message);
-            }    
+                log.error( message );
+                throw new RulesRepositoryException( message );
+            }
+        } catch ( Exception e ) {
+            log.error( "Caught exception: " + e );
+            throw new RulesRepositoryException( e );
         }
-        catch(Exception e) {
-            log.error("Caught exception: " + e);
-            throw new RulesRepositoryException(e);
-        }
     }
-    
+
     public boolean equals(Object in) {
-        if (!(in instanceof StateItem)) {
+        if ( !(in instanceof StateItem) ) {
             return false;
-        } else if (in == this) {
+        } else if ( in == this ) {
             return true;
         } else {
             StateItem other = (StateItem) in;
             return this.getName().equals( other.getName() );
         }
     }
-    
+
     public String toString() {
         return "Current status: [" + getName() + "]  (" + super.toString() + ")";
     }
-    
+
     public int hashCode() {
         return getName().hashCode();
     }
+
+    public void remove() {
+        try {
+            PropertyIterator pi = this.node.getReferences();
+            if ( pi.hasNext() ) {
+                throw new RulesRepositoryException( "The status still has some assets linked to it. You will need to remove the links so you can delete the status." );
+            }
+            this.node.remove();
+        } catch ( RepositoryException e ) {
+            log.error( e );
+        }
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-11-05 03:30:46 UTC (rev 23706)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-11-05 08:26:50 UTC (rev 23707)
@@ -21,7 +21,6 @@
 import org.drools.repository.RulesRepository.DateQuery;
 import org.drools.repository.migration.MigrateDroolsPackage;
 
-
 import junit.framework.TestCase;
 
 public class RulesRepositoryTest extends TestCase {
@@ -31,549 +30,717 @@
 
         Iterator it = repo.listPackages();
         boolean foundDefault = false;
-        while(it.hasNext()) {
+        while ( it.hasNext() ) {
             PackageItem item = (PackageItem) it.next();
-            if (item.getName().equals( RulesRepository.DEFAULT_PACKAGE )) {
+            if ( item.getName().equals( RulesRepository.DEFAULT_PACKAGE ) ) {
                 foundDefault = true;
             }
         }
-        assertTrue(foundDefault);
+        assertTrue( foundDefault );
 
         PackageItem def = repo.loadDefaultPackage();
-        assertNotNull(def);
-        assertEquals(RulesRepository.DEFAULT_PACKAGE, def.getName());
+        assertNotNull( def );
+        assertEquals( RulesRepository.DEFAULT_PACKAGE,
+                      def.getName() );
 
         String userId = repo.getSession().getUserID();
-        assertNotNull(userId);
-        assertFalse(userId.equals( "" ));
+        assertNotNull( userId );
+        assertFalse( userId.equals( "" ) );
 
         MigrateDroolsPackage mig = new MigrateDroolsPackage();
-        assertFalse(mig.needsMigration(repo));
-        assertTrue(repo.initialized);
+        assertFalse( mig.needsMigration( repo ) );
+        assertTrue( repo.initialized );
 
     }
 
     public void testCategoryRename() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
 
-        CategoryItem root = repo.loadCategory("/");
-        root.addCategory("testCatRename", "");
-        repo.loadCategory("testCatRename").addCategory("testRename", "");
+        CategoryItem root = repo.loadCategory( "/" );
+        root.addCategory( "testCatRename",
+                          "" );
+        repo.loadCategory( "testCatRename" ).addCategory( "testRename",
+                                                          "" );
 
-        repo.renameCategory("testCatRename/testRename", "testAnother");
+        repo.renameCategory( "testCatRename/testRename",
+                             "testAnother" );
 
-        CategoryItem cat = repo.loadCategory("testCatRename/testAnother");
-        assertNotNull(cat);
+        CategoryItem cat = repo.loadCategory( "testCatRename/testAnother" );
+        assertNotNull( cat );
         try {
-        	repo.loadCategory("testCatRename/testRename");
-        	fail("should not exist.");
-        } catch (RulesRepositoryException e) {
-        	assertNotNull(e.getMessage());
+            repo.loadCategory( "testCatRename/testRename" );
+            fail( "should not exist." );
+        } catch ( RulesRepositoryException e ) {
+            assertNotNull( e.getMessage() );
         }
 
-        PackageItem pkg = repo.createPackage("testCategoryRename", "");
-        AssetItem asset = pkg.addAsset("fooBar", "");
-        asset.addCategory("testCatRename");
-        asset.addCategory("testCatRename/testAnother");
-        asset.checkin("");
+        PackageItem pkg = repo.createPackage( "testCategoryRename",
+                                              "" );
+        AssetItem asset = pkg.addAsset( "fooBar",
+                                        "" );
+        asset.addCategory( "testCatRename" );
+        asset.addCategory( "testCatRename/testAnother" );
+        asset.checkin( "" );
 
+        cat = repo.loadCategory( "testCatRename/testAnother" );
+        AssetPageList as = repo.findAssetsByCategory( "testCatRename/testAnother",
+                                                      0,
+                                                      -1 );
+        assertEquals( "fooBar",
+                      ((AssetItem) as.assets.get( 0 )).getName() );
 
+        repo.renameCategory( "testCatRename/testAnother",
+                             "testYetAnother" );
+        as = repo.findAssetsByCategory( "testCatRename/testYetAnother",
+                                        0,
+                                        -1 );
+        assertEquals( "fooBar",
+                      ((AssetItem) as.assets.get( 0 )).getName() );
 
-        cat = repo.loadCategory("testCatRename/testAnother");
-        AssetPageList as = repo.findAssetsByCategory("testCatRename/testAnother", 0, -1);
-        assertEquals("fooBar",((AssetItem) as.assets.get(0)).getName());
-
-
-        repo.renameCategory("testCatRename/testAnother", "testYetAnother");
-        as = repo.findAssetsByCategory("testCatRename/testYetAnother", 0, -1);
-        assertEquals("fooBar",((AssetItem) as.assets.get(0)).getName());
-
-
     }
 
     public void testAddVersionARule() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        PackageItem pack = repo.createPackage( "testAddVersionARule", "description" );
+        PackageItem pack = repo.createPackage( "testAddVersionARule",
+                                               "description" );
         repo.save();
 
-        AssetItem rule = pack.addAsset( "my rule", "foobar" );
-        assertEquals("my rule", rule.getName());
+        AssetItem rule = pack.addAsset( "my rule",
+                                        "foobar" );
+        assertEquals( "my rule",
+                      rule.getName() );
 
         rule.updateContent( "foo foo" );
         rule.checkin( "version0" );
 
-        pack.addAsset( "other rule", "description" );
+        pack.addAsset( "other rule",
+                       "description" );
 
         rule.updateContent( "foo bar" );
         rule.checkin( "version1" );
 
-        PackageItem pack2 =  repo.loadPackage( "testAddVersionARule" );
+        PackageItem pack2 = repo.loadPackage( "testAddVersionARule" );
 
-        Iterator it =  pack2.getAssets();
+        Iterator it = pack2.getAssets();
 
         it.next();
         it.next();
 
-        assertFalse(it.hasNext());
+        assertFalse( it.hasNext() );
 
         AssetItem prev = (AssetItem) rule.getPrecedingVersion();
 
-        assertEquals("foo bar", rule.getContent());
-        assertEquals("foo foo", prev.getContent());
+        assertEquals( "foo bar",
+                      rule.getContent() );
+        assertEquals( "foo foo",
+                      prev.getContent() );
 
-
-
     }
 
     public void testFindByState() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        PackageItem pkg = repo.createPackage("testFindByStatePackage", "heheheh");
-        AssetItem asset1 = pkg.addAsset("asset1", "");
-        AssetItem asset2 = pkg.addAsset("asset2", "");
-        repo.createState("testFindByState");
+        PackageItem pkg = repo.createPackage( "testFindByStatePackage",
+                                              "heheheh" );
+        AssetItem asset1 = pkg.addAsset( "asset1",
+                                         "" );
+        AssetItem asset2 = pkg.addAsset( "asset2",
+                                         "" );
+        repo.createState( "testFindByState" );
         repo.save();
-        asset1.updateState("testFindByState");
-        asset2.updateState("testFindByState");
-        asset1.checkin("");
-        asset2.checkin("");
+        asset1.updateState( "testFindByState" );
+        asset2.updateState( "testFindByState" );
+        asset1.checkin( "" );
+        asset2.checkin( "" );
 
-        AssetPageList list = repo.findAssetsByState("testFindByState", true, 0, -1);
-        assertEquals(2, list.assets.size());
+        AssetPageList list = repo.findAssetsByState( "testFindByState",
+                                                     true,
+                                                     0,
+                                                     -1 );
+        assertEquals( 2,
+                      list.assets.size() );
 
-
     }
 
     public void testFindRulesByName() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
 
-        repo.loadDefaultPackage().addAsset( "findRulesByNamex1", "X" );
-        repo.loadDefaultPackage().addAsset( "findRulesByNamex2", "X" );
+        repo.loadDefaultPackage().addAsset( "findRulesByNamex1",
+                                            "X" );
+        repo.loadDefaultPackage().addAsset( "findRulesByNamex2",
+                                            "X" );
         repo.save();
 
-        List list = iteratorToList(repo.findAssetsByName( "findRulesByNamex1" ));
-	    assertEquals(1, list.size());
+        List list = iteratorToList( repo.findAssetsByName( "findRulesByNamex1" ) );
+        assertEquals( 1,
+                      list.size() );
 
-        list = iteratorToList(repo.findAssetsByName( "findRulesByNamex2" ));
-        assertEquals(1, list.size());
+        list = iteratorToList( repo.findAssetsByName( "findRulesByNamex2" ) );
+        assertEquals( 1,
+                      list.size() );
 
+        list = iteratorToList( repo.findAssetsByName( "findRulesByNamex%" ) );
+        assertEquals( 2,
+                      list.size() );
 
-        list = iteratorToList( repo.findAssetsByName( "findRulesByNamex%") );
-        assertEquals(2, list.size());
-
-        repo.createPackageSnapshot( RulesRepository.DEFAULT_PACKAGE, "testFindRulesByName" );
+        repo.createPackageSnapshot( RulesRepository.DEFAULT_PACKAGE,
+                                    "testFindRulesByName" );
         repo.save();
 
-        list = iteratorToList(repo.findAssetsByName( "findRulesByNamex2" ));
-        AssetItem item = (AssetItem)list.get( 0 );
-        assertEquals("findRulesByNamex2", item.getName());
-        assertEquals("X", item.getDescription());
-        assertEquals(1, list.size());
+        list = iteratorToList( repo.findAssetsByName( "findRulesByNamex2" ) );
+        AssetItem item = (AssetItem) list.get( 0 );
+        assertEquals( "findRulesByNamex2",
+                      item.getName() );
+        assertEquals( "X",
+                      item.getDescription() );
+        assertEquals( 1,
+                      list.size() );
 
         list = iteratorToList( repo.findAssetsByName( "findRulesByNamex%" ) );
-        assertEquals(2, list.size());
+        assertEquals( 2,
+                      list.size() );
 
-
     }
 
     public void testQueryText() throws Exception {
-    	RulesRepository repo = RepositorySessionUtil.getRepository();
-    	PackageItem pkg = repo.createPackage("testQueryTest", "");
-    	AssetItem asset = pkg.addAsset("asset1", "testQueryText1");
-    	asset.updateSubject("testQueryText42");
-    	asset.checkin("firstCheckintestQueryTest");
-    	asset.updateFormat("drl");
-    	asset.checkin("firstCheckintestQueryTest2");
-    	pkg.addAsset("asset2", "testQueryText2");
-    	repo.save();
+        RulesRepository repo = RepositorySessionUtil.getRepository();
+        PackageItem pkg = repo.createPackage( "testQueryTest",
+                                              "" );
+        AssetItem asset = pkg.addAsset( "asset1",
+                                        "testQueryText1" );
+        asset.updateSubject( "testQueryText42" );
+        asset.checkin( "firstCheckintestQueryTest" );
+        asset.updateFormat( "drl" );
+        asset.checkin( "firstCheckintestQueryTest2" );
+        pkg.addAsset( "asset2",
+                      "testQueryText2" );
+        repo.save();
 
-    	List<AssetItem> ls = iteratorToList(repo.queryFullText("testQueryText*", false));
-    	assertEquals(2, ls.size());
+        List<AssetItem> ls = iteratorToList( repo.queryFullText( "testQueryText*",
+                                                                 false ) );
+        assertEquals( 2,
+                      ls.size() );
 
-    	AssetItem as = ls.get(0);
-    	assertEquals("asset1", as.getName());
+        AssetItem as = ls.get( 0 );
+        assertEquals( "asset1",
+                      as.getName() );
 
-    	as = ls.get(1);
-    	assertEquals("asset2", as.getName());
+        as = ls.get( 1 );
+        assertEquals( "asset2",
+                      as.getName() );
 
+        ls = iteratorToList( repo.queryFullText( "firstCheckintestQueryTest2",
+                                                 false ) );
+        assertEquals( 1,
+                      ls.size() );
 
-    	ls = iteratorToList(repo.queryFullText("firstCheckintestQueryTest2", false));
-    	assertEquals(1, ls.size());
+        ls = iteratorToList( repo.queryFullText( "firstCheckintestQueryTest",
+                                                 false ) );
+        assertEquals( 0,
+                      ls.size() );
 
-    	ls = iteratorToList(repo.queryFullText("firstCheckintestQueryTest", false));
-    	assertEquals(0, ls.size());
+        ls = iteratorToList( repo.queryFullText( "testQueryText*",
+                                                 false ) );
+        assertEquals( 2,
+                      ls.size() );
 
-    	ls = iteratorToList(repo.queryFullText("testQueryText*", false));
-    	assertEquals(2, ls.size());
+        asset.archiveItem( true );
+        asset.checkin( "" );
 
-    	asset.archiveItem(true);
-    	asset.checkin("");
+        ls = iteratorToList( repo.queryFullText( "testQueryText*",
+                                                 false ) );
+        assertEquals( 1,
+                      ls.size() );
 
-    	ls = iteratorToList(repo.queryFullText("testQueryText*", false));
-    	assertEquals(1, ls.size());
+        ls = iteratorToList( repo.queryFullText( "testQueryText*",
+                                                 true ) );
+        assertEquals( 2,
+                      ls.size() );
 
-    	ls = iteratorToList(repo.queryFullText("testQueryText*", true));
-    	assertEquals(2, ls.size());
-
-
     }
 
     public void testQuery() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
 
-        AssetItem asset = repo.loadDefaultPackage().addAsset( "testQuery", "wanklerotaryengine1cc" );
+        AssetItem asset = repo.loadDefaultPackage().addAsset( "testQuery",
+                                                              "wanklerotaryengine1cc" );
 
         //asset.updateBinaryContentAttachment(new ByteArrayInputStream("testingSearchWankle".getBytes()));
-        asset.updateContent("testingSearchWankle");
-        asset.updateSubject("testQueryXXX42");
-        asset.checkin("");
+        asset.updateContent( "testingSearchWankle" );
+        asset.updateSubject( "testQueryXXX42" );
+        asset.checkin( "" );
 
         Map<String, String[]> q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42"});
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42"} );
 
-        AssetItemIterator asit = repo.query(q, false, null);
-        List<AssetItem> results = iteratorToList(asit);
-        assertEquals(1, results.size());
-        AssetItem as = results.get(0);
-        assertEquals("testQuery", as.getName());
+        AssetItemIterator asit = repo.query( q,
+                                             false,
+                                             null );
+        List<AssetItem> results = iteratorToList( asit );
+        assertEquals( 1,
+                      results.size() );
+        AssetItem as = results.get( 0 );
+        assertEquals( "testQuery",
+                      as.getName() );
 
+        asset.updateExternalSource( "database" );
+        asset.checkin( "" );
 
-        asset.updateExternalSource("database");
-        asset.checkin("");
-
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database"});
-        results = iteratorToList(repo.query(q, true, null));
-        assertEquals(1, results.size());
-        as = results.get(0);
-        assertEquals("testQuery", as.getName());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database"} );
+        results = iteratorToList( repo.query( q,
+                                              true,
+                                              null ) );
+        assertEquals( 1,
+                      results.size() );
+        as = results.get( 0 );
+        assertEquals( "testQuery",
+                      as.getName() );
 
-
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, null));
-        assertEquals(1, results.size());
-        as = results.get(0);
-        assertEquals("testQuery", as.getName());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42", "wankle"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              null ) );
+        assertEquals( 1,
+                      results.size() );
+        as = results.get( 0 );
+        assertEquals( "testQuery",
+                      as.getName() );
 
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", null);
-        q.put("cruddy", new String[0]);
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, null));
-        assertEquals(1, results.size());
+        q.put( "drools:subject",
+               null );
+        q.put( "cruddy",
+               new String[0] );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              null ) );
+        assertEquals( 1,
+                      results.size() );
 
-
         //now dates
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", "1974-07-10T00:00:00.000-05:00", "3074-07-10T00:00:00.000-05:00")}));
-        assertEquals(1, results.size());
-        as = results.get(0);
-        assertEquals("testQuery", as.getName());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42", "wankle"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              new DateQuery[]{new DateQuery( "jcr:created",
+                                                                             "1974-07-10T00:00:00.000-05:00",
+                                                                             "3074-07-10T00:00:00.000-05:00" )} ) );
+        assertEquals( 1,
+                      results.size() );
+        as = results.get( 0 );
+        assertEquals( "testQuery",
+                      as.getName() );
 
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", "1974-07-10T00:00:00.000-05:00", null)}));
-        assertEquals(1, results.size());
-        as = results.get(0);
-        assertEquals("testQuery", as.getName());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42", "wankle"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              new DateQuery[]{new DateQuery( "jcr:created",
+                                                                             "1974-07-10T00:00:00.000-05:00",
+                                                                             null )} ) );
+        assertEquals( 1,
+                      results.size() );
+        as = results.get( 0 );
+        assertEquals( "testQuery",
+                      as.getName() );
 
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", null, "3074-07-10T00:00:00.000-05:00")}));
-        assertEquals(1, results.size());
-        as = results.get(0);
-        assertEquals("testQuery", as.getName());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42", "wankle"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              new DateQuery[]{new DateQuery( "jcr:created",
+                                                                             null,
+                                                                             "3074-07-10T00:00:00.000-05:00" )} ) );
+        assertEquals( 1,
+                      results.size() );
+        as = results.get( 0 );
+        assertEquals( "testQuery",
+                      as.getName() );
 
-
         //should return nothing:
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", "3074-07-10T00:00:00.000-05:00", null)}));
-        assertEquals(0, results.size());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42", "wankle"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              new DateQuery[]{new DateQuery( "jcr:created",
+                                                                             "3074-07-10T00:00:00.000-05:00",
+                                                                             null )} ) );
+        assertEquals( 0,
+                      results.size() );
 
         q = new HashMap<String, String[]>();
-        q.put("drools:subject", new String[] {"testQueryXXX42", "wankle"});
-        q.put(AssetItem.SOURCE_PROPERTY_NAME, new String[] {"database", "wankle"});
-        results = iteratorToList(repo.query(q, false, new DateQuery[] {new DateQuery("jcr:created", null, "1974-07-10T00:00:00.000-05:00")}));
-        assertEquals(0, results.size());
+        q.put( "drools:subject",
+               new String[]{"testQueryXXX42", "wankle"} );
+        q.put( AssetItem.SOURCE_PROPERTY_NAME,
+               new String[]{"database", "wankle"} );
+        results = iteratorToList( repo.query( q,
+                                              false,
+                                              new DateQuery[]{new DateQuery( "jcr:created",
+                                                                             null,
+                                                                             "1974-07-10T00:00:00.000-05:00" )} ) );
+        assertEquals( 0,
+                      results.size() );
 
-
     }
 
-
     public void testLoadRuleByUUIDWithConcurrentSessions() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
 
         PackageItem rulePackageItem = repo.loadDefaultPackage();
-        AssetItem rule = rulePackageItem.addAsset( "testLoadRuleByUUID", "this is a description");
+        AssetItem rule = rulePackageItem.addAsset( "testLoadRuleByUUID",
+                                                   "this is a description" );
 
         repo.save();
 
         String uuid = rule.getNode().getUUID();
 
-        AssetItem loaded = repo.loadAssetByUUID(uuid);
-        assertNotNull(loaded);
-        assertEquals("testLoadRuleByUUID", loaded.getName());
-        assertEquals( "this is a description", loaded.getDescription());
+        AssetItem loaded = repo.loadAssetByUUID( uuid );
+        assertNotNull( loaded );
+        assertEquals( "testLoadRuleByUUID",
+                      loaded.getName() );
+        assertEquals( "this is a description",
+                      loaded.getDescription() );
 
         long oldVersionNumber = loaded.getVersionNumber();
 
         loaded.updateContent( "xxx" );
         loaded.checkin( "woo" );
 
-
-
-
         AssetItem reload = repo.loadAssetByUUID( uuid );
-        assertEquals("testLoadRuleByUUID", reload.getName());
-        assertEquals("xxx", reload.getContent());
-        System.out.println(reload.getVersionNumber());
-        System.out.println(loaded.getVersionNumber());
-        assertFalse(reload.getVersionNumber() ==  oldVersionNumber );
+        assertEquals( "testLoadRuleByUUID",
+                      reload.getName() );
+        assertEquals( "xxx",
+                      reload.getContent() );
+        System.out.println( reload.getVersionNumber() );
+        System.out.println( loaded.getVersionNumber() );
+        assertFalse( reload.getVersionNumber() == oldVersionNumber );
 
-
         // try loading rule package that was not created
         try {
-            repo.loadAssetByUUID("01010101-0101-0101-0101-010101010101");
-            fail("Exception not thrown loading rule package that was not created.");
-        } catch (RulesRepositoryException e) {
+            repo.loadAssetByUUID( "01010101-0101-0101-0101-010101010101" );
+            fail( "Exception not thrown loading rule package that was not created." );
+        } catch ( RulesRepositoryException e ) {
             // that is OK!
-            assertNotNull(e.getMessage());
+            assertNotNull( e.getMessage() );
         }
 
         //now test concurrent session access...
 
-        AssetItem asset1 = repo.loadDefaultPackage().addAsset( "testMultiSession", "description" );
+        AssetItem asset1 = repo.loadDefaultPackage().addAsset( "testMultiSession",
+                                                               "description" );
         asset1.updateContent( "yeah" );
         asset1.checkin( "boo" );
         uuid = asset1.getUUID();
         asset1.updateState( "Draft" );
         repo.save();
 
-        Session s2 = repo.getSession().getRepository().login(new SimpleCredentials("fdd", "password".toCharArray()));
+        Session s2 = repo.getSession().getRepository().login( new SimpleCredentials( "fdd",
+                                                                                     "password".toCharArray() ) );
 
-        RulesRepository repo2 = new RulesRepository(s2);
+        RulesRepository repo2 = new RulesRepository( s2 );
 
         AssetItem asset2 = repo2.loadAssetByUUID( uuid );
         asset2.updateContent( "yeah 42" );
         asset2.checkin( "yeah" );
 
         asset1 = repo.loadAssetByUUID( uuid );
-        assertEquals("yeah 42", asset1.getContent());
+        assertEquals( "yeah 42",
+                      asset1.getContent() );
         asset1.updateContent( "yeah 43" );
         asset1.checkin( "la" );
 
         asset2 = repo2.loadAssetByUUID( uuid );
-        assertEquals( "yeah 43", asset2.getContent() );
+        assertEquals( "yeah 43",
+                      asset2.getContent() );
     }
 
     public void testAddRuleCalendarWithDates() {
         RulesRepository rulesRepository = RepositorySessionUtil.getRepository();
 
+        Calendar effectiveDate = Calendar.getInstance();
+        Calendar expiredDate = Calendar.getInstance();
+        expiredDate.setTimeInMillis( effectiveDate.getTimeInMillis() + (1000 * 60 * 60 * 24) );
+        AssetItem ruleItem1 = rulesRepository.loadDefaultPackage().addAsset( "testAddRuleCalendarCalendar",
+                                                                             "desc" );
+        ruleItem1.updateDateEffective( effectiveDate );
+        ruleItem1.updateDateExpired( expiredDate );
 
-            Calendar effectiveDate = Calendar.getInstance();
-            Calendar expiredDate = Calendar.getInstance();
-            expiredDate.setTimeInMillis(effectiveDate.getTimeInMillis() + (1000 * 60 * 60 * 24));
-            AssetItem ruleItem1 = rulesRepository.loadDefaultPackage().addAsset("testAddRuleCalendarCalendar", "desc");
-            ruleItem1.updateDateEffective( effectiveDate );
-            ruleItem1.updateDateExpired( expiredDate );
+        assertNotNull( ruleItem1 );
+        assertNotNull( ruleItem1.getNode() );
+        assertEquals( effectiveDate,
+                      ruleItem1.getDateEffective() );
+        assertEquals( expiredDate,
+                      ruleItem1.getDateExpired() );
 
-            assertNotNull(ruleItem1);
-            assertNotNull(ruleItem1.getNode());
-            assertEquals(effectiveDate, ruleItem1.getDateEffective());
-            assertEquals(expiredDate, ruleItem1.getDateExpired());
-
-            ruleItem1.checkin( "ho " );
+        ruleItem1.checkin( "ho " );
     }
 
     public void testGetState() {
         RulesRepository rulesRepository = RepositorySessionUtil.getRepository();
 
-            StateItem state0 = rulesRepository.createState( "testGetState" );
-            assertNotNull(state0);
-            assertEquals("testGetState", state0.getName());
-            StateItem stateItem1 = rulesRepository.getState("testGetState");
-            assertNotNull(stateItem1);
-            assertEquals("testGetState", stateItem1.getName());
+        StateItem state0 = rulesRepository.createState( "testGetState" );
+        assertNotNull( state0 );
+        assertEquals( "testGetState",
+                      state0.getName() );
+        StateItem stateItem1 = rulesRepository.getState( "testGetState" );
+        assertNotNull( stateItem1 );
+        assertEquals( "testGetState",
+                      stateItem1.getName() );
 
-            StateItem stateItem2 = rulesRepository.getState("testGetState");
-            assertNotNull(stateItem2);
-            assertEquals("testGetState", stateItem2.getName());
-            assertEquals(stateItem1, stateItem2);
+        StateItem stateItem2 = rulesRepository.getState( "testGetState" );
+        assertNotNull( stateItem2 );
+        assertEquals( "testGetState",
+                      stateItem2.getName() );
+        assertEquals( stateItem1,
+                      stateItem2 );
     }
 
     public void testGetTag() {
-            RulesRepository rulesRepository = RepositorySessionUtil.getRepository();
+        RulesRepository rulesRepository = RepositorySessionUtil.getRepository();
 
-            CategoryItem root = rulesRepository.loadCategory( "/" );
-            CategoryItem tagItem1 = root.addCategory( "testGetTag", "ho");
-            assertNotNull(tagItem1);
-            assertEquals("testGetTag", tagItem1.getName());
-            assertEquals("testGetTag", tagItem1.getFullPath());
+        CategoryItem root = rulesRepository.loadCategory( "/" );
+        CategoryItem tagItem1 = root.addCategory( "testGetTag",
+                                                  "ho" );
+        assertNotNull( tagItem1 );
+        assertEquals( "testGetTag",
+                      tagItem1.getName() );
+        assertEquals( "testGetTag",
+                      tagItem1.getFullPath() );
 
-            CategoryItem tagItem2 = rulesRepository.loadCategory("testGetTag");
-            assertNotNull(tagItem2);
-            assertEquals("testGetTag", tagItem2.getName());
-            assertEquals(tagItem1, tagItem2);
+        CategoryItem tagItem2 = rulesRepository.loadCategory( "testGetTag" );
+        assertNotNull( tagItem2 );
+        assertEquals( "testGetTag",
+                      tagItem2.getName() );
+        assertEquals( tagItem1,
+                      tagItem2 );
 
-            //now test getting a tag down in the tag hierarchy
-            CategoryItem tagItem3 = tagItem2.addCategory( "TestChildTag1", "ka");
-            assertNotNull(tagItem3);
-            assertEquals("TestChildTag1", tagItem3.getName());
-            assertEquals("testGetTag/TestChildTag1", tagItem3.getFullPath());
+        //now test getting a tag down in the tag hierarchy
+        CategoryItem tagItem3 = tagItem2.addCategory( "TestChildTag1",
+                                                      "ka" );
+        assertNotNull( tagItem3 );
+        assertEquals( "TestChildTag1",
+                      tagItem3.getName() );
+        assertEquals( "testGetTag/TestChildTag1",
+                      tagItem3.getFullPath() );
     }
 
-
-
     public void testListPackages() {
         RulesRepository rulesRepository = RepositorySessionUtil.getRepository();
-            rulesRepository.createPackage("testListPackages", "desc");
+        rulesRepository.createPackage( "testListPackages",
+                                       "desc" );
 
-            assertTrue(rulesRepository.containsPackage( "testListPackages" ));
-            assertFalse(rulesRepository.containsPackage( "XXXXXXX" ));
+        assertTrue( rulesRepository.containsPackage( "testListPackages" ) );
+        assertFalse( rulesRepository.containsPackage( "XXXXXXX" ) );
 
-            Iterator it = rulesRepository.listPackages();
-            assertTrue(it.hasNext());
+        Iterator it = rulesRepository.listPackages();
+        assertTrue( it.hasNext() );
 
-            boolean found = false;
-            while ( it.hasNext() ) {
-                PackageItem element = (PackageItem) it.next();
-                if (element.getName().equals( "testListPackages" ))
-                {
-                    found = true;
-                    break;
-                }
-                System.out.println(element.getName());
+        boolean found = false;
+        while ( it.hasNext() ) {
+            PackageItem element = (PackageItem) it.next();
+            if ( element.getName().equals( "testListPackages" ) ) {
+                found = true;
+                break;
             }
-            assertTrue(found);
+            System.out.println( element.getName() );
+        }
+        assertTrue( found );
 
     }
 
     public void testFindAssetsByState() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        repo.loadCategory( "/" ).addCategory( "testFindAssetsByStateCat", "X" );
+        repo.loadCategory( "/" ).addCategory( "testFindAssetsByStateCat",
+                                              "X" );
 
-        PackageItem pkg = repo.createPackage( "testFindAssetsByStatePac", "");
-        pkg.addAsset( "testCat1", "x", "/testFindAssetsByStateCat", "drl");
-        pkg.addAsset( "testCat2", "x", "/testFindAssetsByStateCat", "drl");
+        PackageItem pkg = repo.createPackage( "testFindAssetsByStatePac",
+                                              "" );
+        pkg.addAsset( "testCat1",
+                      "x",
+                      "/testFindAssetsByStateCat",
+                      "drl" );
+        pkg.addAsset( "testCat2",
+                      "x",
+                      "/testFindAssetsByStateCat",
+                      "drl" );
 
         repo.save();
 
-        AssetPageList apl = repo.findAssetsByState( "Draft", false, 0, -1, new RepositoryFilter() {
-        	public boolean accept(Object artifact, String action) {
-        		if (!(artifact instanceof AssetItem))
-        			return false;
+        AssetPageList apl = repo.findAssetsByState( "Draft",
+                                                    false,
+                                                    0,
+                                                    -1,
+                                                    new RepositoryFilter() {
+                                                        public boolean accept(Object artifact,
+                                                                              String action) {
+                                                            if ( !(artifact instanceof AssetItem) ) return false;
 
+                                                            if ( ((AssetItem) artifact).getName().equalsIgnoreCase( "testCat1" ) ) {
+                                                                return true;
+                                                            } else {
+                                                                return false;
+                                                            }
+                                                        }
+                                                    } );
 
-      			if (((AssetItem)artifact).getName().equalsIgnoreCase("testCat1")) {
-        	        return true;
-        		} else {
-        			return false;
-        		}
-        	}
-            });
-
-        assertEquals(1, apl.assets.size());
-        assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());
+        assertEquals( 1,
+                      apl.assets.size() );
+        assertEquals( "testCat1",
+                      ((AssetItem) apl.assets.get( 0 )).getName() );
     }
 
-
     public void testFindAssetsByCategory() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        repo.loadCategory( "/" ).addCategory( "testFindAssetsByCategoryUsingFilterCat", "X" );
+        repo.loadCategory( "/" ).addCategory( "testFindAssetsByCategoryUsingFilterCat",
+                                              "X" );
 
-        PackageItem pkg = repo.createPackage( "testFindAssetsByCategoryUsingFilterPack", "");
-        pkg.addAsset( "testCat1", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-        pkg.addAsset( "testCat2", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
+        PackageItem pkg = repo.createPackage( "testFindAssetsByCategoryUsingFilterPack",
+                                              "" );
+        pkg.addAsset( "testCat1",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
+        pkg.addAsset( "testCat2",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
 
         repo.save();
 
-        List items = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 0, -1 ).assets;
-        assertEquals(2, items.size());
+        List items = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat",
+                                                0,
+                                                -1 ).assets;
+        assertEquals( 2,
+                      items.size() );
 
-        AssetPageList apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", false, 0, -1, new RepositoryFilter() {
-        	public boolean accept(Object artifact, String action) {
-        		if (!(artifact instanceof AssetItem))
-        			return false;
+        AssetPageList apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat",
+                                                       false,
+                                                       0,
+                                                       -1,
+                                                       new RepositoryFilter() {
+                                                           public boolean accept(Object artifact,
+                                                                                 String action) {
+                                                               if ( !(artifact instanceof AssetItem) ) return false;
 
+                                                               if ( ((AssetItem) artifact).getName().equalsIgnoreCase( "testCat1" ) ) {
+                                                                   return true;
+                                                               } else {
+                                                                   return false;
+                                                               }
+                                                           }
+                                                       } );
 
-      			if (((AssetItem)artifact).getName().equalsIgnoreCase("testCat1")) {
-        	        return true;
-        		} else {
-        			return false;
-        		}
-        	}
-            });
+        assertEquals( 1,
+                      apl.assets.size() );
+        assertEquals( "testCat1",
+                      ((AssetItem) apl.assets.get( 0 )).getName() );
 
+        pkg.addAsset( "testCat3",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
+        pkg.addAsset( "testCat4",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
+        pkg.addAsset( "testCat5",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
+        pkg.addAsset( "testCat6",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
+        pkg.addAsset( "testCat7",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
+        pkg.addAsset( "testCat8",
+                      "x",
+                      "/testFindAssetsByCategoryUsingFilterCat",
+                      "drl" );
 
-        assertEquals(1, apl.assets.size());
-        assertEquals("testCat1", ((AssetItem)apl.assets.get(0)).getName());
+        pkg.loadAsset( "testCat1" ).archiveItem( true ).checkin( "" );
+        pkg.loadAsset( "testCat2" ).archiveItem( true ).checkin( "" );
+        pkg.loadAsset( "testCat3" ).archiveItem( true ).checkin( "" );
+        pkg.loadAsset( "testCat4" ).archiveItem( true ).checkin( "" );
 
-        pkg.addAsset( "testCat3", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-        pkg.addAsset( "testCat4", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-        pkg.addAsset( "testCat5", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-        pkg.addAsset( "testCat6", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-        pkg.addAsset( "testCat7", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
-        pkg.addAsset( "testCat8", "x", "/testFindAssetsByCategoryUsingFilterCat", "drl");
+        //        apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 0, 2 );
+        //        assertEquals(2, apl.assets.size());
+        //        assertTrue(apl.hasNext);
+        //
+        //        assertEquals(5, apl.currentPosition);
+        //        //assertEquals("testCat5", apl.assets.get(0).getName());
+        //
+        //        apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 7, 2 );
+        //        assertEquals(2, apl.assets.size());
+        //        assertFalse(apl.hasNext);
+        //        //assertEquals("testCat7", apl.assets.get(0).getName());
 
-        pkg.loadAsset("testCat1").archiveItem(true).checkin("");
-        pkg.loadAsset("testCat2").archiveItem(true).checkin("");
-        pkg.loadAsset("testCat3").archiveItem(true).checkin("");
-        pkg.loadAsset("testCat4").archiveItem(true).checkin("");
-
-//        apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 0, 2 );
-//        assertEquals(2, apl.assets.size());
-//        assertTrue(apl.hasNext);
-//
-//        assertEquals(5, apl.currentPosition);
-//        //assertEquals("testCat5", apl.assets.get(0).getName());
-//
-//        apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 7, 2 );
-//        assertEquals(2, apl.assets.size());
-//        assertFalse(apl.hasNext);
-//        //assertEquals("testCat7", apl.assets.get(0).getName());
-
         repo.save();
 
-        apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", 0, -1 );
+        apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat",
+                                         0,
+                                         -1 );
 
-        assertEquals(4, apl.assets.size());
+        assertEquals( 4,
+                      apl.assets.size() );
         List<String> names = new ArrayList<String>();
 
-        for (AssetItem as : apl.assets) {
-        	if (names.contains(as.getName()))  { fail("dupe returned."); }
-        	names.add(as.getName());
-		}
+        for ( AssetItem as : apl.assets ) {
+            if ( names.contains( as.getName() ) ) {
+                fail( "dupe returned." );
+            }
+            names.add( as.getName() );
+        }
 
         names = new ArrayList<String>();
 
-
         boolean hasNext = true;
         int skip = 0;
-        while (hasNext) {
-        	apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat", skip, 2 );
-            for (AssetItem as : apl.assets) {
-            	if (names.contains(as.getName())) { fail("dupe returned"); }
-    			names.add(as.getName());
-    		}
+        while ( hasNext ) {
+            apl = repo.findAssetsByCategory( "/testFindAssetsByCategoryUsingFilterCat",
+                                             skip,
+                                             2 );
+            for ( AssetItem as : apl.assets ) {
+                if ( names.contains( as.getName() ) ) {
+                    fail( "dupe returned" );
+                }
+                names.add( as.getName() );
+            }
             //we add the num of results returned, and sub 2 to work out where to start next
             skip = (int) (apl.currentPosition + apl.assets.size() - 2);
-        	hasNext = apl.hasNext;
+            hasNext = apl.hasNext;
         }
-        assertEquals(4, names.size());
-        assertTrue(names.contains("testCat5"));
-        assertTrue(names.contains("testCat6"));
-        assertTrue(names.contains("testCat7"));
-        assertTrue(names.contains("testCat8"));
+        assertEquals( 4,
+                      names.size() );
+        assertTrue( names.contains( "testCat5" ) );
+        assertTrue( names.contains( "testCat6" ) );
+        assertTrue( names.contains( "testCat7" ) );
+        assertTrue( names.contains( "testCat8" ) );
 
-
     }
 
     public void testFunnyOrdering() throws Exception {
@@ -585,216 +752,336 @@
      */
     public void testCategoriesAndSnapshots() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        repo.loadCategory( "/" ).addCategory( "testCategoriesAndSnapshots", "X" );
+        repo.loadCategory( "/" ).addCategory( "testCategoriesAndSnapshots",
+                                              "X" );
 
-        PackageItem pkg = repo.createPackage( "testCategoriesAndSnapshots", "");
-        pkg.addAsset( "testCat1", "x", "/testCategoriesAndSnapshots", "drl");
-        pkg.addAsset( "testCat2", "x", "/testCategoriesAndSnapshots", "drl");
+        PackageItem pkg = repo.createPackage( "testCategoriesAndSnapshots",
+                                              "" );
+        pkg.addAsset( "testCat1",
+                      "x",
+                      "/testCategoriesAndSnapshots",
+                      "drl" );
+        pkg.addAsset( "testCat2",
+                      "x",
+                      "/testCategoriesAndSnapshots",
+                      "drl" );
         repo.save();
 
-        List items = repo.findAssetsByCategory( "/testCategoriesAndSnapshots", 0, -1 ).assets;
-        assertEquals(2, items.size());
+        List items = repo.findAssetsByCategory( "/testCategoriesAndSnapshots",
+                                                0,
+                                                -1 ).assets;
+        assertEquals( 2,
+                      items.size() );
 
-        repo.createPackageSnapshot( "testCategoriesAndSnapshots", "SNAP 1" );
-        items = repo.findAssetsByCategory( "testCategoriesAndSnapshots", 0, -1  ).assets;
-        assertEquals(2, items.size());
+        repo.createPackageSnapshot( "testCategoriesAndSnapshots",
+                                    "SNAP 1" );
+        items = repo.findAssetsByCategory( "testCategoriesAndSnapshots",
+                                           0,
+                                           -1 ).assets;
+        assertEquals( 2,
+                      items.size() );
 
-        assertTrue(repo.containsSnapshot("testCategoriesAndSnapshots", "SNAP 1"));
-        assertFalse(repo.containsSnapshot("testCategoriesAndSnapshots", "SNAP XXXX"));
+        assertTrue( repo.containsSnapshot( "testCategoriesAndSnapshots",
+                                           "SNAP 1" ) );
+        assertFalse( repo.containsSnapshot( "testCategoriesAndSnapshots",
+                                            "SNAP XXXX" ) );
 
+        assertFalse( repo.containsSnapshot( "gooberWhhewasssllllelelelelele",
+                                            "SNAP" ) );
 
-        assertFalse(repo.containsSnapshot("gooberWhhewasssllllelelelelele", "SNAP"));
-
     }
 
     public void testMoveRulePackage() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        PackageItem pkg = repo.createPackage( "testMove", "description" );
-        AssetItem r = pkg.addAsset( "testMove", "description" );
+        PackageItem pkg = repo.createPackage( "testMove",
+                                              "description" );
+        AssetItem r = pkg.addAsset( "testMove",
+                                    "description" );
         r.checkin( "version0" );
         String uuid = r.getUUID();
-        assertEquals("testMove", r.getPackageName());
+        assertEquals( "testMove",
+                      r.getPackageName() );
 
         repo.save();
 
-        assertEquals(1, iteratorToList( pkg.getAssets()).size());
+        assertEquals( 1,
+                      iteratorToList( pkg.getAssets() ).size() );
 
-        repo.createPackage( "testMove2", "description" );
-        repo.moveRuleItemPackage( "testMove2", r.node.getUUID(), "explanation" );
+        repo.createPackage( "testMove2",
+                            "description" );
+        repo.moveRuleItemPackage( "testMove2",
+                                  r.node.getUUID(),
+                                  "explanation" );
 
         pkg = repo.loadPackage( "testMove" );
-        assertEquals(0, iteratorToList( pkg.getAssets() ).size());
+        assertEquals( 0,
+                      iteratorToList( pkg.getAssets() ).size() );
 
         pkg = repo.loadPackage( "testMove2" );
-        assertEquals(1, iteratorToList( pkg.getAssets() ).size());
+        assertEquals( 1,
+                      iteratorToList( pkg.getAssets() ).size() );
 
         r = (AssetItem) pkg.getAssets().next();
-        assertEquals("testMove", r.getName());
-        assertEquals("testMove2", r.getPackageName());
-        assertEquals("explanation", r.getCheckinComment());
+        assertEquals( "testMove",
+                      r.getName() );
+        assertEquals( "testMove2",
+                      r.getPackageName() );
+        assertEquals( "explanation",
+                      r.getCheckinComment() );
 
         AssetItem p = (AssetItem) r.getPrecedingVersion();
-        assertEquals("testMove", p.getPackageName());
-        assertEquals("version0", p.getCheckinComment());
-        assertEquals(uuid, r.getUUID());
+        assertEquals( "testMove",
+                      p.getPackageName() );
+        assertEquals( "version0",
+                      p.getCheckinComment() );
+        assertEquals( uuid,
+                      r.getUUID() );
     }
 
     public void testCopyAsset() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        repo.createPackage( "testCopyAsset", "asset" );
-        AssetItem item = repo.loadDefaultPackage().addAsset( "testCopyAssetSource", "desc" );
+        repo.createPackage( "testCopyAsset",
+                            "asset" );
+        AssetItem item = repo.loadDefaultPackage().addAsset( "testCopyAssetSource",
+                                                             "desc" );
         item.updateContent( "la" );
         item.checkin( "" );
         item.updateDescription( "mmm" );
         item.checkin( "again" );
-        assertEquals(2, item.getVersionNumber());
+        assertEquals( 2,
+                      item.getVersionNumber() );
 
-        String uuid = repo.copyAsset( item.getUUID(), "testCopyAsset", "testCopyAssetDestination" );
+        String uuid = repo.copyAsset( item.getUUID(),
+                                      "testCopyAsset",
+                                      "testCopyAssetDestination" );
         AssetItem dest = repo.loadAssetByUUID( uuid );
-        assertEquals(dest.getName(), dest.getTitle());
-        assertEquals("la", dest.getContent());
-        assertEquals("testCopyAsset", dest.getPackageName());
-        assertFalse(uuid.equals( item.getUUID() ));
-        assertEquals(1, dest.getVersionNumber());
+        assertEquals( dest.getName(),
+                      dest.getTitle() );
+        assertEquals( "la",
+                      dest.getContent() );
+        assertEquals( "testCopyAsset",
+                      dest.getPackageName() );
+        assertFalse( uuid.equals( item.getUUID() ) );
+        assertEquals( 1,
+                      dest.getVersionNumber() );
     }
 
     public void testRenameAsset() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        repo.createPackage( "testRenameAsset", "asset" );
-        AssetItem item = repo.loadPackage("testRenameAsset").addAsset( "testRenameAssetSource", "desc" );
+        repo.createPackage( "testRenameAsset",
+                            "asset" );
+        AssetItem item = repo.loadPackage( "testRenameAsset" ).addAsset( "testRenameAssetSource",
+                                                                         "desc" );
         item.updateContent( "la" );
         item.checkin( "" );
 
-        String uuid = repo.renameAsset( item.getUUID(), "testRename2");
+        String uuid = repo.renameAsset( item.getUUID(),
+                                        "testRename2" );
         item = repo.loadAssetByUUID( uuid );
-        assertEquals("testRename2", item.getName());
-        assertEquals("testRename2", item.getTitle());
+        assertEquals( "testRename2",
+                      item.getName() );
+        assertEquals( "testRename2",
+                      item.getTitle() );
 
         List assets = iteratorToList( repo.loadPackage( "testRenameAsset" ).getAssets() );
-        assertEquals(1, assets.size());
+        assertEquals( 1,
+                      assets.size() );
         item = (AssetItem) assets.get( 0 );
-        assertEquals("testRename2", item.getName());
-        assertEquals("la", item.getContent());
+        assertEquals( "testRename2",
+                      item.getName() );
+        assertEquals( "la",
+                      item.getContent() );
 
     }
 
     public void testRenamePackage() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        PackageItem original = repo.createPackage( "testRenamePackage", "asset" );
+        PackageItem original = repo.createPackage( "testRenamePackage",
+                                                   "asset" );
         List packagesOriginal = iteratorToList( repo.listPackages() );
-        AssetItem item = repo.loadPackage("testRenamePackage").addAsset( "testRenameAssetSource", "desc" );
+        AssetItem item = repo.loadPackage( "testRenamePackage" ).addAsset( "testRenameAssetSource",
+                                                                           "desc" );
         item.updateContent( "la" );
         item.checkin( "" );
 
-        String uuid = repo.renamePackage( original.getUUID(), "testRenamePackage2");
+        String uuid = repo.renamePackage( original.getUUID(),
+                                          "testRenamePackage2" );
 
         PackageItem pkg = repo.loadPackageByUUID( uuid );
-        assertEquals("testRenamePackage2", pkg.getName());
+        assertEquals( "testRenamePackage2",
+                      pkg.getName() );
 
         List assets = iteratorToList( repo.loadPackage( "testRenamePackage2" ).getAssets() );
-        assertEquals(1, assets.size());
+        assertEquals( 1,
+                      assets.size() );
         item = (AssetItem) assets.get( 0 );
-        assertEquals("testRenameAssetSource", item.getName());
-        assertEquals("la", item.getContent());
-        assertEquals("testRenamePackage2", item.getPackageName());
+        assertEquals( "testRenameAssetSource",
+                      item.getName() );
+        assertEquals( "la",
+                      item.getContent() );
+        assertEquals( "testRenamePackage2",
+                      item.getPackageName() );
 
         List packageFinal = iteratorToList( repo.listPackages() );
-        assertEquals(packagesOriginal.size(), packageFinal.size());
+        assertEquals( packagesOriginal.size(),
+                      packageFinal.size() );
 
     }
 
-
-
     public void testCopyPackage() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        PackageItem source = repo.createPackage( "testCopyPackage", "asset" );
-        AssetItem item = source.addAsset( "testCopyPackage", "desc" );
+        PackageItem source = repo.createPackage( "testCopyPackage",
+                                                 "asset" );
+        AssetItem item = source.addAsset( "testCopyPackage",
+                                          "desc" );
         item.updateContent( "la" );
         item.checkin( "" );
         repo.save();
 
-        repo.copyPackage( "testCopyPackage", "testCopyPackage2" );
+        repo.copyPackage( "testCopyPackage",
+                          "testCopyPackage2" );
         PackageItem dest = repo.loadPackage( "testCopyPackage2" );
-        assertNotNull(dest);
-        assertFalse( source.getUUID().equals( dest.getUUID() ));
+        assertNotNull( dest );
+        assertFalse( source.getUUID().equals( dest.getUUID() ) );
 
-        assertEquals(1, iteratorToList( dest.getAssets()).size());
+        assertEquals( 1,
+                      iteratorToList( dest.getAssets() ).size() );
         AssetItem item2 = (AssetItem) dest.getAssets().next();
 
-        assertEquals("testCopyPackage", item.getPackageName());
-        assertEquals("testCopyPackage2", item2.getPackageName());
+        assertEquals( "testCopyPackage",
+                      item.getPackageName() );
+        assertEquals( "testCopyPackage2",
+                      item2.getPackageName() );
 
-
         item2.updateContent( "goober choo" );
         item2.checkin( "yeah" );
 
-        assertEquals("la", item.getContent());
+        assertEquals( "la",
+                      item.getContent() );
 
-
         try {
-            repo.copyPackage( "testCopyPackage", "testCopyPackage2" );
-            fail("should not be able to copy when existing.");
+            repo.copyPackage( "testCopyPackage",
+                              "testCopyPackage2" );
+            fail( "should not be able to copy when existing." );
 
-        } catch (RulesRepositoryException e) {
-            assertNotNull(e.getMessage());
+        } catch ( RulesRepositoryException e ) {
+            assertNotNull( e.getMessage() );
         }
 
-
     }
 
-
-    public void testListStates()  {
+    public void testListStates() {
         RulesRepository repo = RepositorySessionUtil.getRepository();
         StateItem[] items = repo.listStates();
-        assertTrue(items.length > 0);
+        assertTrue( items.length > 0 );
 
         repo.createState( "testListStates" );
 
         StateItem[] items2 = repo.listStates();
-        assertEquals(items.length + 1, items2.length);
+        assertEquals( items.length + 1,
+                      items2.length );
     }
 
+    public void testRenameState() {
+        RulesRepository repo = RepositorySessionUtil.getRepository();
+        StateItem[] items = repo.listStates();
+        assertTrue( items.length > 0 );
+
+        final String oldName = "stateThatHasALongNameAndWillBeRenamed";
+        repo.createState( oldName );
+
+        StateItem[] items2 = repo.listStates();
+        assertEquals( items.length + 1,
+                      items2.length );
+
+        final String newName = "stateThatHasALongNameAndWillBeRenamedNameAfterTheRenaming";
+        repo.renameState( oldName,
+                          newName );
+
+        StateItem[] items3 = repo.listStates();
+        assertEquals( items2.length,
+                      items3.length );
+        try {
+            repo.loadState( oldName );
+            fail( "Should never be here. Old name is still used." );
+        } catch ( RulesRepositoryException e ) {
+            // Works
+        }
+
+        assertNotNull( repo.loadState( newName ) );
+    }
+    
+    public void testRemoveState() {
+        RulesRepository repo = RepositorySessionUtil.getRepository();
+        StateItem[] items = repo.listStates();
+        assertTrue( items.length > 0 );
+        
+        final String name = "stateThatHasALongNameAndWillBeRenamed";
+        repo.createState( name );
+        
+        StateItem[] items2 = repo.listStates();
+        assertEquals( items.length + 1,
+                      items2.length );
+        
+        repo.loadState( name ).remove();
+        repo.save();
+        
+        StateItem[] items3 = repo.listStates();
+        assertEquals( items2.length -1,
+                      items3.length );
+        try {
+            repo.loadState( name );
+            fail( "Should never be here. Removed state still exists." );
+        } catch ( RulesRepositoryException e ) {
+            // Works
+        }
+        
+    }
+
     public void testImportExport() {
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        byte []repository_unitest;
-        byte []repository_backup;
+        byte[] repository_unitest;
+        byte[] repository_backup;
 
         try {
 
             repository_backup = repo.dumpRepositoryXml();
             assertNotNull( repository_backup );
 
-            repo.createPackage( "testImportExport", "nodescription" );
+            repo.createPackage( "testImportExport",
+                                "nodescription" );
             repository_unitest = repo.dumpRepositoryXml();
             repo.importRulesRepository( repository_backup );
             assertFalse( repo.containsPackage( "testImportExport" ) );
             repo.importRulesRepository( repository_unitest );
             assertTrue( repo.containsPackage( "testImportExport" ) );
         } catch ( Exception e ) {
-            fail("Can't throw any exception.");
+            fail( "Can't throw any exception." );
             e.printStackTrace();
         }
     }
 
-    public void testExportZippedRepository () throws PathNotFoundException, IOException, RepositoryException {
+    public void testExportZippedRepository() throws PathNotFoundException,
+                                            IOException,
+                                            RepositoryException {
 
         RulesRepository repo = RepositorySessionUtil.getRepository();
-        byte []repository_unitest;
+        byte[] repository_unitest;
 
-        repository_unitest =  repo.exportRulesRepository();
+        repository_unitest = repo.exportRulesRepository();
 
-        ByteArrayInputStream bin = new ByteArrayInputStream(repository_unitest);
-        ZipInputStream zis = new ZipInputStream (bin);
+        ByteArrayInputStream bin = new ByteArrayInputStream( repository_unitest );
+        ZipInputStream zis = new ZipInputStream( bin );
 
-        ZipEntry entry =  zis.getNextEntry();
-        assertEquals( entry.getName() , "repository_export.xml" );
+        ZipEntry entry = zis.getNextEntry();
+        assertEquals( entry.getName(),
+                      "repository_export.xml" );
         assertFalse( entry.isDirectory() );
     }
 
-
-    public static<T> List<T> iteratorToList(Iterator<T> it) {
+    public static <T> List<T> iteratorToList(Iterator<T> it) {
         List<T> list = new ArrayList<T>();
-        while(it.hasNext()) {
+        while ( it.hasNext() ) {
             list.add( it.next() );
         }
         return list;




More information about the jboss-svn-commits mailing list