[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