[jboss-svn-commits] JBL Code SVN: r6238 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client main/java/org/drools/brms/client/breditor main/java/org/drools/brms/client/categorynav main/java/org/drools/brms/client/rpc main/java/org/drools/brms/client/rpc/mock main/java/org/drools/brms/public/images main/java/org/drools/brms/server test/java/org/drools/brms/server

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 15 10:20:49 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-09-15 10:20:33 -0400 (Fri, 15 Sep 2006)
New Revision: 6238

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryExplorerWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/edit.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_item.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImpl.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/RulesNavigatorTree.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/BREditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/EditableLine.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java
Log:
categories working

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -22,8 +22,10 @@
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
 
@@ -80,7 +82,7 @@
         panel.add( fPopupButton );
         panel.add( new BREditor() );
         
-        EditableLine line = new EditableLine();
+        EditableLine line = new EditableLine(new Widget[] {new Label("this is pretty "), new TextBox()});
         panel.add( line );
         
         panel.setSpacing( 8 );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Rules.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -1,7 +1,7 @@
 package org.drools.brms.client;
 
 import org.drools.brms.client.categorynav.CategorySelectHandler;
-import org.drools.brms.client.categorynav.RulesNavigatorTree;
+import org.drools.brms.client.categorynav.CategoryExplorerWidget;
 import org.drools.brms.client.ruleeditor.RuleView;
 import org.drools.brms.client.rulelist.EditItemEvent;
 import org.drools.brms.client.rulelist.RuleListView;
@@ -63,7 +63,7 @@
         });         
         
         //setup the nav, which will drive the list
-		RulesNavigatorTree nav = new RulesNavigatorTree(new CategorySelectHandler() {
+		CategoryExplorerWidget nav = new CategoryExplorerWidget(new CategorySelectHandler() {
 
             public void selected(String selectedPath) {
                 System.out.println("Selected path: " + selectedPath);  

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/BREditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/BREditor.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/BREditor.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -7,6 +7,7 @@
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.VerticalPanel;
@@ -53,7 +54,7 @@
             }            
         });
         
-        Button addLhs = new Button("+");
+        Image addLhs = new Image("images/new_item.gif");
         addLhs.addClickListener( new ClickListener() {
             public void onClick(Widget sender) {
                 
@@ -66,6 +67,8 @@
             }            
         });
         
+        
+        
         table.setWidget( 0, ACTION_COLUMN, addLhs );
         
         
@@ -80,7 +83,7 @@
         table.setText( rowOffset, DESC_COLUMN, "THEN" );
         
        
-        table.setWidget( rowOffset, ACTION_COLUMN, new Button("+") );
+        table.setWidget( rowOffset, ACTION_COLUMN, new Image("images/new_item.gif") );
         
         rowOffset++;
         
@@ -124,9 +127,9 @@
 
     private void initData() {
         
-        lhs.add( new Label("Hello this is {foo}"));
-        lhs.add( new Label("Hello this is {foo}"));
-        rhs.add(new Label("panic all is lost") );
+        lhs.add( new EditableLine(new Label[] {new Label("Hello this is {foo}")}));
+        lhs.add( new EditableLine(new Label[] {new Label("Hello this is {foo}")}));
+        rhs.add( new EditableLine(new Label[] {new Label("Hello this is {foo}")}));
     }
     
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/EditableLine.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/EditableLine.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/breditor/EditableLine.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -1,11 +1,5 @@
 package org.drools.brms.client.breditor;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
@@ -13,6 +7,7 @@
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.Widget;
 
+/** This encapsulates a DSL line component of a rule */
 public class EditableLine extends Composite {
     
     /** The main panel of the composite */
@@ -21,65 +16,48 @@
     /** This is the list of widgets that are used to display/capture data 
      * Should be Label, TextBox or Button (for editing mode)
      */
-    private List widgets = new ArrayList();
+    private Widget[] widgets;
     
     /**
      * Obviously to keep state of the widget when switching modes.
      */
     private boolean readOnly = true;
     
-    public EditableLine() {
-        initData();
+    public EditableLine(Widget[] items) {
+        widgets = items;
         
+        
         panel = new HorizontalPanel();
         initWidget( panel ); 
         makeReadOnly();
     }
 
-    private void initData() {
-        widgets.add( new Label("The persons name is ") );
-        TextBox box = new TextBox();
-        box.setVisibleLength( 4 );        
-        widgets.add( box );
         
-        Button edit = new Button(".");
-        edit.addClickListener( new ClickListener() {
-
-            public void onClick(Widget w) {
-                if (readOnly) {
-                    readOnly = false;
-                    makeEditable();
-                } else {
-                    readOnly = true;
-                    makeReadOnly();
-                }
-            }
-            
-        });
-        widgets.add( edit );
-    }
     
     public void makeReadOnly() {
+        readOnly = true;
         panel.clear();
-        for ( Iterator iter = widgets.iterator(); iter.hasNext(); ) {
-            Widget element = (Widget) iter.next();
-            if (element instanceof Label) {                
-                panel.add( element );
-            } else if (element instanceof TextBox) {
-                TextBox box = (TextBox) element;
-                panel.add( new Label(box.getText()) );
-            } else {
-                panel.add( element );
-            }
-        }
+        
+        panel.add( new Label(toString()) );
+//        for ( Iterator iter = widgets.iterator(); iter.hasNext(); ) {
+//            Widget element = (Widget) iter.next();
+//            if (element instanceof Label) {                
+//                panel.add( element );
+//            } else if (element instanceof TextBox) {
+//                TextBox box = (TextBox) element;
+//                panel.add( new Label(box.getText()) );
+//            } else {
+//                panel.add( element );
+//            }
+//        }
     }
     
     public void makeEditable() {
+        readOnly = false;
         panel.clear();
-        for ( Iterator iter = widgets.iterator(); iter.hasNext(); ) {
-            Widget element = (Widget) iter.next();
-            panel.add( element );
-        }        
+        for ( int i = 0; i < widgets.length; i++ ) {
+            panel.add( widgets[i] );
+        }
     }
     
     /**
@@ -87,11 +65,11 @@
      */
     public String toString() {
         String result = "";
-        for ( Iterator iter = widgets.iterator(); iter.hasNext(); ) {
-            Widget element = (Widget) iter.next();
+        for ( int i=0; i < widgets.length; i++ ) {
+            Widget element = widgets[i];
             if (element instanceof Label) {
                 result = result + ((Label) element).getText();
-            } else {
+            } else if (element instanceof TextBox){
                 result = result + ((TextBox) element).getText();
             }            
         }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryEditor.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -21,7 +21,7 @@
 public class CategoryEditor extends PopupPanel {
 
     private String path;
-    private FlexTable table = new FlexTable();
+    private FlexTable table = new FlexTable(); //Using this table for the form layout
     private TextBox name = new TextBox();
     private TextArea description = new TextArea();
     
@@ -76,20 +76,29 @@
     }
     
     void ok() {
-        System.out.println("Creating: " + name.getText());
+        
         AsyncCallback cb = new AsyncCallback() {
 
             public void onFailure(Throwable arg0) {
                 ErrorPopup.showMessage( "Unable to create new category (server error). ");
             }
 
-            public void onSuccess(Object result) {                
-                hide();
-            }
-            
+            public void onSuccess(Object result) {  
+                if (((Boolean) result).booleanValue()) {
+                    hide();
+                } else {
+                    ErrorPopup.showMessage( "Unable to create new category (server error). ");
+                    
+                }
+            }            
         };
-        RepositoryServiceFactory.getService().createCategory( path, name.getText(), description.getText(), cb );        
-        this.table.setWidget( 0, 1, new Label("Please wait ..." ));
+        
+        if (this.name.equals( "" )) {
+            ErrorPopup.showMessage( "Can't have an empty category name." );
+        } else {
+            RepositoryServiceFactory.getService().createCategory( path, name.getText(), description.getText(), cb );        
+            //this.table.setWidget( 0, 1, new Label("Please wait ..." ));
+        }
     }
     
     void cancel() {

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryExplorerWidget.java (from rev 6203, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/RulesNavigatorTree.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/RulesNavigatorTree.java	2006-09-13 17:03:25 UTC (rev 6203)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryExplorerWidget.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2006 Google 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.
+ */
+package org.drools.brms.client.categorynav;
+
+import org.drools.brms.client.ErrorPopup;
+import org.drools.brms.client.rpc.RepositoryServiceAsync;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Tree;
+import com.google.gwt.user.client.ui.TreeItem;
+import com.google.gwt.user.client.ui.TreeListener;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This is a rule/resource navigator that uses the server side categories to 
+ * navigate the repository.
+ * Uses the the {@link com.google.gwt.user.client.ui.Tree} widget.
+ */
+public class CategoryExplorerWidget
+    extends Composite implements TreeListener
+    {
+
+     
+    
+    private Tree                   navTreeWidget = new Tree();
+    private FlexTable              table         = new FlexTable();
+    private RepositoryServiceAsync service       = RepositoryServiceFactory.getService();
+    private CategorySelectHandler  categorySelectHandler;
+    private String selectedPath;
+
+    public void setTreeSize(String width) {
+        navTreeWidget.setWidth( width );
+    }
+
+    public CategoryExplorerWidget(CategorySelectHandler handler) {
+        table.setWidget( 0, 0, navTreeWidget );
+        
+        FlexCellFormatter formatter = table.getFlexCellFormatter();
+        formatter.setColSpan( 0, 0, 2 );
+        
+        Image refresh = new Image("images/refresh.gif");
+        refresh.setTitle( "Refresh categories" );        
+        refresh.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                navTreeWidget.removeItems();
+                loadInitialTree();
+            }            
+        });
+                
+        Image newCat = new Image("images/new.gif");
+        newCat.setTitle( "Create a new category" );
+        newCat.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                CategoryEditor newCat = new CategoryEditor(selectedPath);
+                newCat.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() - 10  );
+                newCat.show();
+            }            
+        });
+        
+        
+        table.setWidget( 1, 0, newCat);
+        table.setWidget( 1, 1, refresh );
+        formatter.setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_MIDDLE );
+        formatter.setAlignment( 1, 1, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_MIDDLE );
+        
+        this.categorySelectHandler = handler;
+        loadInitialTree();
+        
+        initWidget( table );
+        navTreeWidget.addTreeListener( this );
+    }
+
+    /** This will refresh the tree and restore it back to the original state */
+    private void loadInitialTree() {
+        navTreeWidget.addItem( "Please wait..." );
+        service.loadChildCategories( "/",
+                                     new AsyncCallback() {
+
+                                         public void onFailure(Throwable caught) {                                             
+                                             ErrorPopup.showMessage( "A server error occurred loading categories." );
+                                             navTreeWidget.removeItems();
+                                             navTreeWidget.addItem( "Unable to load categories." );
+                                         }
+
+                                         public void onSuccess(Object result) {
+                                             selectedPath = null;
+                                             navTreeWidget.removeItems();
+                                             String[] categories = (String[]) result;
+                                             for ( int i = 0; i < categories.length; i++ ) {
+                                                 navTreeWidget.addItem( categories[i] ).addItem( new PendingItem() );
+                                             }
+
+                                         }
+
+                                     } );
+
+        
+    }
+    
+    
+
+    public void onShow() {
+        //move along... these are not the droids you're looking for...
+    }
+
+    public void onTreeItemSelected(TreeItem item) {
+        this.selectedPath = getPath( item );        
+        this.categorySelectHandler.selected( selectedPath );
+    }
+    
+
+    public void onTreeItemStateChanged(TreeItem item) {
+
+        if ( hasBeenLoaded( item ) ) {
+            return;
+        }
+
+        final TreeItem root = item;
+
+        //walk back up to build a tree
+        this.selectedPath = getPath( item );
+
+        item.setUserObject( new Boolean( true ) );
+
+        service.loadChildCategories( selectedPath,
+                                     new AsyncCallback() {
+
+                                         public void onFailure(Throwable caught) {
+                                             ErrorPopup.showMessage( "Unable to load categories for [" + selectedPath + "]");            
+                                         }
+
+                                         public void onSuccess(Object result) {
+                                             TreeItem child = root.getChild( 0 );
+                                             if ( child instanceof PendingItem ) {
+                                                 root.removeItem( child );
+                                             }
+                                             String[] list = (String[]) result;
+                                             for ( int i = 0; i < list.length; i++ ) {
+                                                 root.addItem( list[i] ).addItem( new PendingItem() );
+                                             }
+                                         }
+
+                                     } );
+
+    }
+
+    private boolean hasBeenLoaded(TreeItem item) {
+        if ( item.getUserObject() == null ) return false;
+        return (((Boolean) item.getUserObject()).booleanValue());
+    }
+
+    private String getPath(TreeItem item) {
+        String categoryPath = item.getText();
+        TreeItem parent = item.getParentItem();
+        while ( parent != null ) {
+            categoryPath = parent.getText() + "/" + categoryPath;
+            parent = parent.getParentItem();
+        }
+        return categoryPath;
+    }
+
+    private static class PendingItem extends TreeItem {
+        public PendingItem() {
+            super( "Please wait..." );
+        }
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/RulesNavigatorTree.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/RulesNavigatorTree.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/RulesNavigatorTree.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -1,189 +0,0 @@
-/*
- * Copyright 2006 Google 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.
- */
-package org.drools.brms.client.categorynav;
-
-import org.drools.brms.client.ErrorPopup;
-import org.drools.brms.client.rpc.RepositoryServiceAsync;
-import org.drools.brms.client.rpc.RepositoryServiceFactory;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Tree;
-import com.google.gwt.user.client.ui.TreeItem;
-import com.google.gwt.user.client.ui.TreeListener;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
-
-/**
- * This is a rule/resource navigator that uses the server side categories to 
- * navigate the repository.
- * Uses the the {@link com.google.gwt.user.client.ui.Tree} widget.
- */
-public class RulesNavigatorTree
-    extends Composite implements TreeListener
-    {
-
-     
-    
-    private Tree                   navTreeWidget = new Tree();
-    private FlexTable              table         = new FlexTable();
-    private RepositoryServiceAsync service       = RepositoryServiceFactory.getService();
-    private CategorySelectHandler  categorySelectHandler;
-    private String selectedPath;
-
-    public void setTreeSize(String width) {
-        navTreeWidget.setWidth( width );
-    }
-
-    public RulesNavigatorTree(CategorySelectHandler handler) {
-        table.setWidget( 0, 0, navTreeWidget );
-        
-        FlexCellFormatter formatter = table.getFlexCellFormatter();
-        formatter.setColSpan( 0, 0, 2 );
-        
-        Image refresh = new Image("images/refresh.gif");
-        refresh.setTitle( "Refresh categories" );        
-        refresh.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                navTreeWidget.removeItems();
-                loadInitialTree();
-            }            
-        });
-                
-        Image newCat = new Image("images/new.gif");
-        newCat.setTitle( "Create a new category" );
-        newCat.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                CategoryEditor newCat = new CategoryEditor(selectedPath);
-                newCat.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() - 10  );
-                newCat.show();
-            }            
-        });
-        
-        
-        table.setWidget( 1, 0, newCat);
-        table.setWidget( 1, 1, refresh );
-        formatter.setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_MIDDLE );
-        formatter.setAlignment( 1, 1, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_MIDDLE );
-        
-        this.categorySelectHandler = handler;
-        loadInitialTree();
-        
-        initWidget( table );
-        navTreeWidget.addTreeListener( this );
-    }
-
-    /** This will refresh the tree and restore it back to the original state */
-    private void loadInitialTree() {
-        navTreeWidget.addItem( "Please wait..." );
-        service.loadChildCategories( "/",
-                                     new AsyncCallback() {
-
-                                         public void onFailure(Throwable caught) {                                             
-                                             ErrorPopup.showMessage( "A server error occurred loading categories." );
-                                             navTreeWidget.removeItems();
-                                             navTreeWidget.addItem( "Unable to load categories." );
-                                         }
-
-                                         public void onSuccess(Object result) {
-                                             selectedPath = null;
-                                             navTreeWidget.removeItems();
-                                             String[] categories = (String[]) result;
-                                             for ( int i = 0; i < categories.length; i++ ) {
-                                                 navTreeWidget.addItem( categories[i] ).addItem( new PendingItem() );
-                                             }
-
-                                         }
-
-                                     } );
-
-        
-    }
-    
-    
-
-    public void onShow() {
-        //move along... these are not the droids you're looking for...
-    }
-
-    public void onTreeItemSelected(TreeItem item) {
-        this.selectedPath = getPath( item );        
-        this.categorySelectHandler.selected( selectedPath );
-    }
-    
-
-    public void onTreeItemStateChanged(TreeItem item) {
-
-        if ( hasBeenLoaded( item ) ) {
-            return;
-        }
-
-        final TreeItem root = item;
-
-        //walk back up to build a tree
-        this.selectedPath = getPath( item );
-
-        item.setUserObject( new Boolean( true ) );
-
-        service.loadChildCategories( selectedPath,
-                                     new AsyncCallback() {
-
-                                         public void onFailure(Throwable caught) {
-                                             ErrorPopup.showMessage( "Unable to load categories for [" + selectedPath + "]");            
-                                         }
-
-                                         public void onSuccess(Object result) {
-                                             TreeItem child = root.getChild( 0 );
-                                             if ( child instanceof PendingItem ) {
-                                                 root.removeItem( child );
-                                             }
-                                             String[] list = (String[]) result;
-                                             for ( int i = 0; i < list.length; i++ ) {
-                                                 root.addItem( list[i] ).addItem( new PendingItem() );
-                                             }
-                                         }
-
-                                     } );
-
-    }
-
-    private boolean hasBeenLoaded(TreeItem item) {
-        if ( item.getUserObject() == null ) return false;
-        return (((Boolean) item.getUserObject()).booleanValue());
-    }
-
-    private String getPath(TreeItem item) {
-        String categoryPath = item.getText();
-        TreeItem parent = item.getParentItem();
-        while ( parent != null ) {
-            categoryPath = parent.getText() + "/" + categoryPath;
-            parent = parent.getParentItem();
-        }
-        return categoryPath;
-    }
-
-    private static class PendingItem extends TreeItem {
-        public PendingItem() {
-            super( "Please wait..." );
-        }
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceFactory.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -16,7 +16,7 @@
      * versus full RPC (which requires the back end be running in some form).
      * Can set it to DEBUG if you want to run it client side only.
      */
-    public static boolean DEBUG = true;
+    public static boolean DEBUG = false;
     
     public static RepositoryServiceAsync getService() {
         if (DEBUG)

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -77,6 +77,7 @@
                                String name,
                                String description,
                                AsyncCallback callback) {
+        log( "createCategory", "Creating cat in " + path + " called " + name );
         callback.onSuccess( new Boolean(true) );
         
     }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/edit.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/edit.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_item.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_item.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -1,7 +1,5 @@
 package org.drools.brms.server;
 
-import java.util.List;
-
 import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -10,7 +8,6 @@
 
 import org.drools.brms.client.rpc.RepositoryService;
 import org.drools.brms.client.rpc.TableConfig;
-import org.drools.repository.CategoryItem;
 import org.drools.repository.RepositoryConfigurator;
 import org.drools.repository.RulesRepository;
 
@@ -18,6 +15,7 @@
 
 /** 
  * This is the implementation of the repository service to drive the GWT based front end.
+ * 
  * @author Michael Neale
  */
 public class JBRMSServiceServlet extends RemoteServiceServlet
@@ -25,19 +23,19 @@
     RepositoryService {
 
     private static final long serialVersionUID = 3150768417428383474L;
+    
+    /**
+     * The shared repository instance. This could be bound to JNDI eventually.
+     */
     public static Repository repository;
     
-    public String[] loadChildCategories(String categoryPath) {        
-        RulesRepository repo = this.getRepositoryFrom( getSession() );
-        CategoryItem item = repo.getOrCreateCategory( categoryPath );
-        List children = item.getChildTags();
-        String[] list = new String[children.size()];
-        for ( int i = 0; i < list.length; i++ ) {
-            list[i] = ((CategoryItem) children.get( i )).getName();
-        }
-        return list;
+    public String[] loadChildCategories(String categoryPath) {   
+        ServiceImpl handler = new ServiceImpl(getRulesRepository());
+        return handler.loadChildCategories( categoryPath );
     }
 
+
+
     public String[][] loadRuleListForCategories(String categoryPath,
                                                 String status) {
         log( "loading rule list",
@@ -49,7 +47,7 @@
     public TableConfig loadTableConfig(String listName) {
         log( "loading table config",
              listName );
-        sleep( 300 );
+       
         final TableConfig config = new TableConfig();
 
         config.headers = new String[]{"name", "status", "last updated by", "version"};
@@ -57,27 +55,30 @@
         return config;
     }
 
-    private void sleep(int ms) {
-        try {
-            Thread.sleep( ms );
-        } catch ( InterruptedException e ) {
-            e.printStackTrace();
-        }
-    }
 
+
     private void log(String serviceName,
                      String message) {
         System.out.println( "[" + serviceName + "] " + message );
     }
+    
+    /** Get the rule repository for the "current" user */
+    private RulesRepository getRulesRepository() {
+        return this.getRepositoryFrom( getSession() );
+    }
 
     private HttpSession getSession() {
         return this.getThreadLocalRequest().getSession();
     }
 
+    /**
+     * Pull or create the repository from session.
+     * If it is not found, it will create one and then bind it to the session.
+     */
     RulesRepository getRepositoryFrom(HttpSession session) {
         Object obj = session.getAttribute( "drools.repository" );
         if ( obj == null ) {
-            obj = createNewSession();
+            obj = createRuleRepositoryInstance();
             session.setAttribute( "drools.repository",
                                   obj );
         }
@@ -85,7 +86,7 @@
     }
 
     /** Initialse the repository, set it up if it is brand new */
-    private RulesRepository createNewSession() {
+    RulesRepository createRuleRepositoryInstance() {
         
         RepositoryConfigurator config = new RepositoryConfigurator();
 
@@ -117,11 +118,12 @@
     private Session initialiseRepo(RepositoryConfigurator config) throws LoginException,
                                                                  RepositoryException {
         Session session;
-        repository = config.createRepository();
+        if (repository == null) {
+            repository = config.createRepository();
+        }
         
         session = config.login( repository );
         
-        
         config.setupRulesRepository( session );
         return session;
     }
@@ -131,8 +133,9 @@
     public Boolean createCategory(String path,
                                   String name,
                                   String description) {
-        // TODO Auto-generated method stub
-        return new Boolean(false);
+        ServiceImpl serv = new ServiceImpl(getRulesRepository());
+        return serv.createCategory( path, name, description );
+        
     }
 
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImpl.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImpl.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -0,0 +1,62 @@
+package org.drools.brms.server;
+
+import java.util.List;
+
+import org.drools.brms.client.rpc.RepositoryService;
+import org.drools.brms.client.rpc.TableConfig;
+import org.drools.repository.CategoryItem;
+import org.drools.repository.RulesRepository;
+
+/**
+ * This contains the "glue" between the servlet implementation
+ * (which is GWT specific) and the repository api.
+ * This is mainly to make things more testable.
+ * 
+ * It will be "injected" a RulesRepository implementation.
+ * 
+ * @author Michael Neale
+ */
+public class ServiceImpl implements RepositoryService {
+
+    private RulesRepository repo;
+
+    public ServiceImpl(RulesRepository repository) {
+        this.repo = repository;
+    }
+    
+    public String[] loadChildCategories(String categoryPath) {
+
+        CategoryItem item = repo.loadCategory( categoryPath );
+        List children = item.getChildTags();
+        String[] list = new String[children.size()];
+        for ( int i = 0; i < list.length; i++ ) {
+            list[i] = ((CategoryItem) children.get( i )).getName();
+        }
+        return list;
+
+    }
+
+    public Boolean createCategory(String path,
+                                  String name,
+                                  String description) {
+        
+        if (path == null || "".equals(path)) {
+            path = "/";
+        }
+        CategoryItem item = repo.loadCategory( path );
+        item.addCategory( name, description );
+        return Boolean.TRUE;
+    }
+
+    public String[][] loadRuleListForCategories(String categoryPath,
+                                                String status) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public TableConfig loadTableConfig(String listName) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImpl.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -28,7 +28,15 @@
         
     }
     
+    public void testGetRepository() throws Exception {
+        JBRMSServiceServlet serv = new JBRMSServiceServlet();
+        RulesRepository repo = serv.createRuleRepositoryInstance();
+        assertNotNull(repo);
+    }
     
+
+    
+    
     static class MockHttpSession implements HttpSession {
 
         public Map sessionData = new HashMap();

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplTest.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplTest.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -0,0 +1,36 @@
+package org.drools.brms.server;
+
+import org.drools.repository.RulesRepository;
+
+import junit.framework.TestCase;
+
+public class ServiceImplTest extends TestCase {
+
+  public void testCategory() throws Exception {
+        ServiceImpl impl = new ServiceImpl(new RulesRepository(SessionHelper.getSession()));
+
+        String[] originalCats = impl.loadChildCategories( "/" );
+        
+        Boolean result = impl.createCategory( "/",
+                                              "TopLevel1",
+                                              "a description" );
+        assertTrue( result.booleanValue() );
+
+        result = impl.createCategory( "/",
+                                      "TopLevel2",
+                                      "a description" );
+        assertTrue( result.booleanValue() );
+        
+        String[] cats = impl.loadChildCategories( "/" );
+        assertTrue( cats.length == originalCats.length + 2 );
+        
+        result = impl.createCategory( "", "Top3", "description" );
+        assertTrue(result.booleanValue());
+        
+        result = impl.createCategory( null, "Top4", "description" );
+        assertTrue(result.booleanValue());
+        
+
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java	2006-09-15 14:13:20 UTC (rev 6237)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java	2006-09-15 14:20:33 UTC (rev 6238)
@@ -0,0 +1,24 @@
+package org.drools.brms.server;
+
+import javax.jcr.Repository;
+import javax.jcr.Session;
+
+import org.drools.repository.RepositoryConfigurator;
+
+public class SessionHelper {
+
+    public static Session testSession;
+    
+    public static Session getSession() throws Exception {
+        if (testSession == null) {
+            RepositoryConfigurator config = new RepositoryConfigurator();
+            Repository repo = config.createRepository();
+            testSession = config.login( repo );
+            config.clearRulesRepository( testSession );
+            config.setupRulesRepository( testSession );
+        }
+        return testSession;
+        
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list