[jboss-svn-commits] JBL Code SVN: r5932 - in labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client: . rpc rpc/mock rulelist rulenav

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 17 07:16:35 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-08-17 07:16:26 -0400 (Thu, 17 Aug 2006)
New Revision: 5932

Added:
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceFactory.java
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/mock/
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/package.html
Modified:
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulelist/RuleListView.java
   labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulenav/RulesNavigatorTree.java
Log:
got the navigator working with a mock service

Added: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryService.java	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryService.java	2006-08-17 11:16:26 UTC (rev 5932)
@@ -0,0 +1,13 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+
+/**
+ * This is what the remote service will implement, as a servlet.
+ * (in hosted/debug mode, you could also use an implementation that was in-process).
+ */
+public interface RepositoryService extends RemoteService {
+
+    public String myMethod(String blah);
+    
+}

Added: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2006-08-17 11:16:26 UTC (rev 5932)
@@ -0,0 +1,21 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/** 
+ * This is the interface that the front end talks to.
+ * 
+ * As per the GWT standard, this follows the signatures of <code>RespositoryService</code>
+ * with the AsyncCallback banged on the end of the method sigs (rather then return a value).
+ * 
+ * @author Michael Neale
+ */
+public interface RepositoryServiceAsync {
+
+    /**
+     * @param categoryPath A "/" delimited 
+     * @param callback
+     */
+    public void loadChildCategories(String categoryPath, AsyncCallback callback);
+    
+}

Added: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceFactory.java	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/RepositoryServiceFactory.java	2006-08-17 11:16:26 UTC (rev 5932)
@@ -0,0 +1,40 @@
+package org.drools.brms.client.rpc;
+
+import org.drools.brms.client.rpc.mock.MockRepositoryServiceAsync;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.ServiceDefTarget;
+
+/**
+ * Creates instances of the repository service for the client code to use.
+ * @author Michael Neale
+ */
+public class RepositoryServiceFactory {
+
+    /**
+     * Change this to switch between debug/mock mode (ie web front end only)
+     * versus full RPC (which requires the back end be running).
+     */
+    public static boolean DEBUG = true;
+    
+    public static RepositoryServiceAsync getService() {
+        if (DEBUG)
+            return getMockService();
+        return getRealService(); 
+            
+    }
+    
+    private static RepositoryServiceAsync getMockService() {
+        return new MockRepositoryServiceAsync();
+    }
+
+    private static RepositoryServiceAsync getRealService() {
+        // define the service you want to call        
+        RepositoryServiceAsync svc =
+            (RepositoryServiceAsync) GWT.create(RepositoryService.class);
+        ServiceDefTarget endpoint = (ServiceDefTarget) svc;
+        endpoint.setServiceEntryPoint("/jbrmsService");
+        return svc;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/mock/MockRepositoryServiceAsync.java	2006-08-17 11:16:26 UTC (rev 5932)
@@ -0,0 +1,40 @@
+package org.drools.brms.client.rpc.mock;
+
+import org.drools.brms.client.rpc.RepositoryServiceAsync;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/**
+ * This is a repository back end simulator. 
+ */
+public class MockRepositoryServiceAsync
+    implements
+    RepositoryServiceAsync {
+
+
+    public void loadChildCategories(String categoryPath,
+                                 AsyncCallback callback) {
+
+        final AsyncCallback cb = callback;
+        final String cat = categoryPath;
+        Timer t = new Timer() {
+            public void run() {
+                log("loadChildCategories", "loading cat path: " + cat);
+                String[] result = new String[] { "Cat 1", "Cat 2", "Cat 3"};
+                cb.onSuccess( result );                
+            }            
+        };        
+        t.schedule( 1000 );
+        
+    }
+    
+    
+    
+    private void log(String serviceName,
+                     String message) {
+        System.out.println("[" + serviceName + "] " + message);
+        
+    }
+
+}

Added: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/package.html
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/package.html	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rpc/package.html	2006-08-17 11:16:26 UTC (rev 5932)
@@ -0,0 +1,3 @@
+<body>
+This contains classes used for remote communication with the repository server.
+</body>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulelist/RuleListView.java
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulelist/RuleListView.java	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulelist/RuleListView.java	2006-08-17 11:16:26 UTC (rev 5932)
@@ -1,6 +1,9 @@
 package org.drools.brms.client.rulelist;
 
 
+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;
@@ -97,7 +100,7 @@
     }
   }
 
-  private void changeTabToEdit() {
+  private void changeTabToEdit() {   
 	tabPanel.selectTab(EDITOR_TAB);	
   }
 

Modified: labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulenav/RulesNavigatorTree.java
===================================================================
--- labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulenav/RulesNavigatorTree.java	2006-08-17 10:35:56 UTC (rev 5931)
+++ labs/jbossrules/trunk/drools-brms/src/org/drools/brms/client/rulenav/RulesNavigatorTree.java	2006-08-17 11:16:26 UTC (rev 5932)
@@ -15,89 +15,53 @@
  */
 package org.drools.brms.client.rulenav;
 
+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.Tree;
 import com.google.gwt.user.client.ui.TreeItem;
 import com.google.gwt.user.client.ui.TreeListener;
 
 /**
- * Demonstrates the {@link com.google.gwt.user.client.ui.Tree} widget.
+ * 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 implements TreeListener {
 
-  private static class PendingItem extends TreeItem {
-    public PendingItem() {
-      super("Please wait...");
-    }
-  }
 
-  private static class Proto {
-    public Proto[] children;
-    public TreeItem item;
-    public String text;
-
-    public Proto(String text) {
-      this.text = text;
-    }
-
-    public Proto(String text, Proto[] children) {
-      this(text);
-      this.children = children;
-    }
-  }
-
-  private static Proto[] fProto = new Proto[]{
-    new Proto("Pricing", new Proto[]{
-      new Proto("Correspondent", new Proto[]{
-        new Proto("Closed End seconds"), new Proto("No. 2 - B-Flat Major"),
-        new Proto("Government"), new Proto("No. 4 - G Major"),
-        new Proto("NGOs"),}),
-      new Proto("Wholesale", new Proto[]{}),
-      new Proto("Retail", new Proto[]{}),
-      new Proto("Symphonies", new Proto[]{
-        new Proto("No. 1 - C Major"), new Proto("No. 2 - D Major"),
-        new Proto("No. 3 - E-Flat Major"), new Proto("No. 4 - B-Flat Major"),
-        new Proto("No. 5 - C Minor"), new Proto("No. 6 - F Major"),
-        new Proto("No. 7 - A Major"), new Proto("No. 8 - F Major"),
-        new Proto("No. 9 - D Minor"),}),}),
-    new Proto("Eligibility", new Proto[]{
-      new Proto("Concertos", new Proto[]{
-        new Proto("Violin Concerto"), new Proto("Double Concerto - A Minor"),
-        new Proto("Piano Concerto No. 1 - D Minor"),
-        new Proto("Piano Concerto No. 2 - B-Flat Major"),}),
-      new Proto("Quartets", new Proto[]{
-        new Proto("Piano Quartet No. 1 - G Minor"),
-        new Proto("Piano Quartet No. 2 - A Major"),
-        new Proto("Piano Quartet No. 3 - C Minor"),
-        new Proto("String Quartet No. 3 - B-Flat Minor"),}),
-      new Proto("Sonatas", new Proto[]{
-        new Proto("Two Sonatas for Clarinet - F Minor"),
-        new Proto("Two Sonatas for Clarinet - E-Flat Major"),}),
-      new Proto("Symphonies", new Proto[]{
-        new Proto("No. 1 - C Minor"), new Proto("No. 2 - D Minor"),
-        new Proto("No. 3 - F Major"), new Proto("No. 4 - E Minor"),}),}),
-    new Proto("Rate Adjustments", new Proto[]{new Proto("Concertos", new Proto[]{
-      new Proto("Piano Concerto No. 12"), new Proto("Piano Concerto No. 17"),
-      new Proto("Clarinet Concerto"), new Proto("Violin Concerto No. 5"),
-      new Proto("Violin Concerto No. 4"),}),}),};
-
-
-  private Tree fTree = new Tree();
-
+  private Tree navTreeWidget = new Tree();
+  private RepositoryServiceAsync service = RepositoryServiceFactory.getService();
+  private TreeItem lastItemChanged = null;
+  
   public void setTreeSize(String width) {
-	  fTree.setWidth(width);
+	  navTreeWidget.setWidth(width);
   }   
   
   public Tree getTree() {
-	  return fTree;
+	  return navTreeWidget;
   }
   
   public RulesNavigatorTree() {
-    for (int i = 0; i < fProto.length; ++i) {
-      createItem(fProto[i]);
-      fTree.addItem(fProto[i].item);
-    }
 
-    fTree.addTreeListener(this);
+    service.loadChildCategories( "", new AsyncCallback() {
+
+        public void onFailure(Throwable caught) {
+            //TODO: work out how to handle it.
+        }
+
+        public void onSuccess(Object result) {
+            String[] categories = (String[]) result;
+            for ( int i = 0; i < categories.length; i++ ) {
+                navTreeWidget.addItem( categories[i] ).addItem( new PendingItem() );
+            }            
+            
+        }
+        
+    });  
+      
+    navTreeWidget.addTreeListener(this);
     
   }
 
@@ -105,25 +69,61 @@
   }
 
   public void onTreeItemSelected(TreeItem item) {
+      System.out.println("TODO: call rule list view");
   }
+  
 
   public void onTreeItemStateChanged(TreeItem item) {
-    TreeItem child = item.getChild(0);
-    if (child instanceof PendingItem) {
-      item.removeItem(child);
+    if (notShowing( item )) return;
+    if (item == lastItemChanged) return;
+    lastItemChanged = item;
+    final TreeItem root = item;
+    
+    String categoryPath = item.getText();
+    //walk back up to build a tree
+    TreeItem parent = item.getParentItem();
+    while (parent != null) {
+        categoryPath = parent.getText() + "/" + categoryPath;
+        parent = parent.getParentItem();
+    }
+    
+    service.loadChildCategories( categoryPath, new AsyncCallback() {
 
-      Proto proto = (Proto) item.getUserObject();
-      for (int i = 0; i < proto.children.length; ++i) {
-        createItem(proto.children[i]);
-        item.addItem(proto.children[i].item);
-      }
-    }
+        public void onFailure(Throwable caught) {
+            // TODO Auto-generated method stub            
+        }
+
+        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 void createItem(Proto proto) {
-    proto.item = new TreeItem(proto.text);
-    proto.item.setUserObject(proto);
-    if (proto.children != null)
-      proto.item.addItem(new PendingItem());
-  }
+private boolean notShowing(TreeItem item) {
+    return !item.getState();
 }
+
+//  private void createItem(Proto proto) {
+//    proto.item = new TreeItem(proto.text);
+//    proto.item.setUserObject(proto);
+//    //if (proto.children != null)
+//    proto.item.addItem(new PendingItem());
+//  }
+  
+  private static class PendingItem extends TreeItem {
+      public PendingItem() {
+        super("Please wait...");
+      }
+   }
+  
+}




More information about the jboss-svn-commits mailing list