[jboss-svn-commits] JBL Code SVN: r18362 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/admin and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 7 01:14:52 EST 2008


Author: michael.neale at jboss.com
Date: 2008-02-07 01:14:51 -0500 (Thu, 07 Feb 2008)
New Revision: 18362

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/LogViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/LogEntry.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/LoggingHelper.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/LoggingHelperTest.java
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/AdminFeature.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/ArchivedAssetManager.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerViewCenterPanel.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGrid.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-1445 added in archiving/deleting of packages, log viewing etc.

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/AdminFeature.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/AdminFeature.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/AdminFeature.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -1,88 +0,0 @@
-package org.drools.brms.client;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.drools.brms.client.admin.ArchivedAssetManager;
-import org.drools.brms.client.admin.BackupManager;
-import org.drools.brms.client.admin.CategoryManager;
-import org.drools.brms.client.admin.StateManager;
-
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.gwtext.client.widgets.TabPanel;
-import com.gwtext.client.widgets.TabPanelItem;
-
-//import com.google.gwt.user.client.ui.TabPanel;
-
-/**
- * This feature contains the administrative functions of the BRMS.
- */
-public class AdminFeature extends JBRMSFeature {
-
-  //  private TabPanel tab;
-
-    public AdminFeature() {
-        final TabPanel tp = new TabPanel( "tab-1" );
-        tp.setWidth( "100%" );
-        tp.setHeight( "100%" );
-
-        TabPanelItem tpCategory = tp.addTab( "tpi1", "<img src='images/category_small.gif'/>Manage categories", false );
-        TabPanelItem tpStateManager = tp.addTab( "tpi2", "<img src='images/status_small.gif'/>Manage states", false );
-        TabPanelItem tpArchivedAssetManager = tp.addTab( "tpi3", "<img src='images/backup_small.gif'/>Manage Archived Assets", false );
-        TabPanelItem tpBackupManager = tp.addTab( "tpi4", "<img src='images/backup_small.gif'/>Import Export", false );
-
-        VerticalPanel vp1 = new VerticalPanel();
-        VerticalPanel vp2 = new VerticalPanel();
-        VerticalPanel vp3 = new VerticalPanel();
-        VerticalPanel vp4 = new VerticalPanel();
-
-        vp1.add( new CategoryManager() );
-        vp1.setSpacing( 15 );
-        vp2.add( new StateManager() );
-        vp2.setSpacing( 15 );
-        vp3.add( new ArchivedAssetManager() );
-        vp3.setSpacing( 15 );
-        vp4.add( new BackupManager() );
-        vp4.setSpacing( 15 );
-        
-        tpCategory.setContent( vp1 );
-        tpStateManager.setContent( vp2 );
-        tpArchivedAssetManager.setContent( vp3 );
-        tpBackupManager.setContent( vp4 );
-        
-        tp.activate( 0 );
-
-        initWidget( tp );
-        
-
-
-    //  initWidget( tab );
-
-    }
-
-    public static ComponentInfo init() {
-        return new ComponentInfo( "Admin",
-                                  "Administer the repository" ) {
-            public JBRMSFeature createInstance() {
-                return new AdminFeature();
-            }
-
-        };
-    }
-
-    public void onShow() {
-    }
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/ArchivedAssetManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/ArchivedAssetManager.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/ArchivedAssetManager.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -1,26 +1,28 @@
 package org.drools.brms.client.admin;
 
-import java.util.HashMap;
-
-import org.drools.brms.client.common.FormStyleLayout;
-import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
-import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.common.PrettyFormLayout;
+import org.drools.brms.client.explorer.ExplorerViewCenterPanel;
+import org.drools.brms.client.rpc.PackageConfigData;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
-import org.drools.brms.client.rpc.TableDataResult;
-import org.drools.brms.client.ruleeditor.EditorLauncher;
-import org.drools.brms.client.rulelist.AssetItemListViewer;
+import org.drools.brms.client.rulelist.AssetItemGrid;
+import org.drools.brms.client.rulelist.AssetItemGridDataLoader;
 import org.drools.brms.client.rulelist.EditItemEvent;
 
-import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.TabPanel;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.widgets.ButtonConfig;
+import com.gwtext.client.widgets.Toolbar;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.ToolbarSeparator;
+import com.gwtext.client.widgets.ToolbarTextItem;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
 
 /**
  * @author Fernando Meyer
@@ -28,103 +30,190 @@
 
 public class ArchivedAssetManager extends Composite {
 
-    AssetItemListViewer listView;
+
     HorizontalPanel           layout;
+	private AssetItemGrid grid;
+	private ListBox packages = new ListBox(true);
 
-    public ArchivedAssetManager() {
+    public ArchivedAssetManager(final ExplorerViewCenterPanel tab) {
 
-        FormStyleLayout widtab = new FormStyleLayout( "images/backup_large.png",
-                                                      "Manage Archived Assets" );
+    	VerticalPanel layout = new VerticalPanel();
+    	layout.setWidth("100%");
 
-        layout = new HorizontalPanel();
-        layout.setWidth( "100%" );
+        PrettyFormLayout pf = new PrettyFormLayout();
 
-        widtab.addRow( layout );
+        VerticalPanel header = new VerticalPanel();
+        header.add(new HTML("<b>Archived items</b>"));
 
-        listView = new AssetItemListViewer (new EditItemEvent () {
+        pf.addHeader("images/backup_large.png", header);
+
+        layout.add(pf);
+
+        EditItemEvent edit = new EditItemEvent () {
             public void open(String key) {
-            	FormStylePopup pop = new FormStylePopup("images/snapshot.png", "Archived item");
-            	TabPanel tab = new TabPanel();
-            	pop.addRow(tab);
-            	EditorLauncher.showLoadEditor( new HashMap(), tab, key, true );
-            	pop.show();
+            	tab.openAsset(key);
             }
-        }, AssetItemListViewer.ARCHIVED_RULE_LIST_TABLE_ID );
+        };
+        grid = new AssetItemGrid(edit, AssetItemGrid.ARCHIVED_RULE_LIST_TABLE_ID, new AssetItemGridDataLoader() {
+			public void loadData(int startRow, int numberOfRows,
+					GenericCallback cb) {
+				RepositoryServiceFactory.getService().loadArchivedAssets(startRow, numberOfRows, cb);
+			}
+        });
 
-        listView.setRefreshCommand( showArchivedAssets() );
 
-        layout.add( listView );
+        loadPackages();
+        Toolbar tb = new Toolbar(Ext.generateId());
+        tb.addItem(new ToolbarTextItem("Archived packages:"));
+        tb.addItem(new ToolbarSeparator());
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+        		setButtonListener(new ButtonListenerAdapter() {
 
-        showArchivedAssets().execute();
-        widtab.addRow( new HTML( "<hr/>" ) );
-        widtab.addRow( newButtonsActionWiget() );
-        initWidget( widtab );
-    }
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+        				restorePackage(packages.getValue(packages.getSelectedIndex()));
 
 
-    private Widget newButtonsActionWiget() {
+        			}
 
-        HorizontalPanel horiz = new HorizontalPanel();
+        		});
+        		setText("Restore selected package");
 
-        Button refresh = new Button( "Refresh" );
-        refresh.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                showArchivedAssets().execute();
-            }
-        } );
+        	}
+        }));
 
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+        		setButtonListener(new ButtonListenerAdapter() {
 
-        Button unarchive = new Button( "Unarchive" );
-        unarchive.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+        				if (Window.confirm("Are you sure you want to permanently delete this package? This can not be undone.")) {
+        					deletePackage(packages.getValue(packages.getSelectedIndex()));
+        				}
 
-                RepositoryServiceFactory.getService().archiveAsset( listView.getSelectedElementUUID(), false, new GenericCallback() {
 
+        			}
 
-                    public void onSuccess(Object arg0) {
-                        showArchivedAssets().execute();
-                        Window.alert( "Done!" );
-                    }
-                });
-            }
-        } );
 
-        Button deleteperm = new Button( "Delete" );
-        deleteperm.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                RepositoryServiceFactory.getService().removeAsset( listView.getSelectedElementUUID(), new GenericCallback() {
+        		});
+        		setText("Permanently delete package");
 
-                    public void onSuccess(Object arg0) {
-                        showArchivedAssets().execute();
-                        Window.alert( "Done!" );
+        	}
+        }));
 
-                    }
-                });
-            }
-        } );
 
-        horiz.add( refresh );
-        horiz.add( unarchive );
-        horiz.add( deleteperm );
-        return horiz;
+
+        layout.add(tb);
+        layout.add(packages);
+
+        tb = new Toolbar(Ext.generateId());
+        tb.addItem(new ToolbarTextItem("Archived assets:"));
+        tb.addItem(new ToolbarSeparator());
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("Restore selected asset");
+        		setButtonListener(new ButtonListenerAdapter() {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+                    	if (grid.getSelectedRowUUID() == null) {
+                    		Window.alert("Please select an item to restore.");
+                    		return;
+                    	}
+                        RepositoryServiceFactory.getService().archiveAsset( grid.getSelectedRowUUID(), false, new GenericCallback() {
+                            public void onSuccess(Object arg0) {
+                                Window.alert( "Item restored." );
+                                grid.refreshGrid();
+                            }
+                        });
+        			}
+        		});
+        	}
+        }));
+
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("Delete selected asset");
+        		setButtonListener(new ButtonListenerAdapter() {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+                    	if (grid.getSelectedRowUUID() == null) {
+                    		Window.alert("Please select an item to permanently delete.");
+                    		return;
+                    	}
+                    	if (!Window.confirm("Are you sure you want to permanently delete this asset ? This can not be undone.")) {
+                    		return;
+                    	}
+                        RepositoryServiceFactory.getService().removeAsset( grid.getSelectedRowUUID(), new GenericCallback() {
+
+                            public void onSuccess(Object arg0) {
+                                Window.alert( "Item deleted." );
+                                grid.refreshGrid();
+                            }
+                        });
+        			}
+        		});
+        	}
+        }));
+        layout.add(tb);
+
+        layout.add(grid);
+
+
+
+        initWidget( layout );
     }
 
-    private Command showArchivedAssets() {
 
-        final GenericCallback cb = new GenericCallback() {
-            public void onSuccess(Object data) {
-                final TableDataResult table = (TableDataResult) data;
-                listView.loadTableData( table );
-                listView.setWidth( "100%" );
-                LoadingPopup.close();
-            }
-        };
+	private void deletePackage(final String uuid) {
+		RepositoryServiceFactory.getService().removePackage(uuid, new GenericCallback( ) {
+			public void onSuccess(Object data) {
+				Window.alert("Package deleted");
+				packages.clear();
+				loadPackages();
+			}
+		});
+	}
 
-        return new Command() {
-            public void execute() {
-                LoadingPopup.showMessage( "Loading list, please wait..." );
-                RepositoryServiceFactory.getService().loadArchivedAssets( cb );
-            }
-        };
-    }
+
+	private void restorePackage(String uuid) {
+		RepositoryServiceFactory.getService().loadPackageConfig(uuid, new GenericCallback() {
+			public void onSuccess(Object data) {
+				PackageConfigData cf = (PackageConfigData) data;
+				cf.archived = false;
+				RepositoryServiceFactory.getService().savePackage(cf, new GenericCallback() {
+					public void onSuccess(Object data) {
+						Window.alert("Package restored.");
+						packages.clear();
+						loadPackages();
+					}
+				});
+			}
+		});
+	}
+
+
+
+    private ListBox loadPackages() {
+
+    	RepositoryServiceFactory.getService().listArchivedPackages(new GenericCallback() {
+			public void onSuccess(Object data) {
+				PackageConfigData[] configs = (PackageConfigData[]) data;
+				for (int i = 0; i < configs.length; i++) {
+						packages.addItem(configs[i].name, configs[i].uuid);
+				}
+			}
+    	});
+
+
+		return packages;
+	}
+
+
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/LogViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/LogViewer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/LogViewer.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -0,0 +1,153 @@
+package org.drools.brms.client.admin;
+
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.common.PrettyFormLayout;
+import org.drools.brms.client.rpc.LogEntry;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.core.SortDir;
+import com.gwtext.client.data.ArrayReader;
+import com.gwtext.client.data.DateFieldDef;
+import com.gwtext.client.data.FieldDef;
+import com.gwtext.client.data.IntegerFieldDef;
+import com.gwtext.client.data.MemoryProxy;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.data.RecordDef;
+import com.gwtext.client.data.Store;
+import com.gwtext.client.data.StringFieldDef;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ButtonConfig;
+import com.gwtext.client.widgets.Toolbar;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.ToolbarSeparator;
+import com.gwtext.client.widgets.ToolbarTextItem;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.grid.CellMetadata;
+import com.gwtext.client.widgets.grid.ColumnConfig;
+import com.gwtext.client.widgets.grid.ColumnModel;
+import com.gwtext.client.widgets.grid.Grid;
+import com.gwtext.client.widgets.grid.Renderer;
+
+public class LogViewer extends Composite {
+
+	private VerticalPanel layout;
+
+	public LogViewer() {
+		layout = new VerticalPanel();
+		layout.setHeight("100%");
+		layout.setWidth("100%");
+
+
+		refresh();
+		initWidget(layout);
+	}
+
+	private void refresh() {
+		LoadingPopup.showMessage("Loading log messages...");
+		RepositoryServiceFactory.getService().showLog(new GenericCallback() {
+			public void onSuccess(Object data) {
+				LogEntry[] logs = (LogEntry[]) data;
+				showLogs(logs);
+				LoadingPopup.close();
+			}
+		});
+	}
+
+	private void showLogs(LogEntry[] logs) {
+		Object[][] data = new Object[logs.length][3];
+		for (int i = 0; i < logs.length; i++) {
+			LogEntry e = logs[i];
+			if (e != null) {
+				data[i][0] = new Integer(e.severity);
+				data[i][1] = e.timestamp;
+				data[i][2] = e.message;
+			} else {
+				data[i][0] = new Integer(2);
+				data[i][1] = "";
+				data[i][2] = "";
+			}
+		}
+
+		MemoryProxy proxy = new MemoryProxy(data);
+		RecordDef recordDef = new RecordDef(
+				new FieldDef[]{
+						new IntegerFieldDef("severity"),
+						new DateFieldDef("timestamp"),
+						new StringFieldDef("message"),
+				}
+		);
+
+		ArrayReader reader = new ArrayReader(recordDef);
+		Store store = new Store(proxy, reader);
+		store.setDefaultSort("timestamp", SortDir.DESC);
+		store.load();
+
+		ColumnModel cm  = new ColumnModel(new ColumnConfig[] {
+				new ColumnConfig() {
+					{
+						setDataIndex("severity");
+						setSortable(true);
+						setRenderer(new Renderer() {
+							public String render(Object value,
+									CellMetadata cellMetadata, Record record,
+									int rowIndex, int colNum, Store store) {
+								Integer i = (Integer) value;
+								if (i.intValue() == 0) {
+									return "<img src='images/error.gif'/>";
+								} else if (i.intValue() == 1) {
+									return "<img src='images/information.gif'/>";
+								} else {
+									return "";
+								}
+							}
+						});
+						setWidth(25);
+					}
+				},
+				new ColumnConfig() {
+					{
+						setHeader("Timestamp");
+						setSortable(true);
+						setDataIndex("timestamp");
+						setWidth(180);
+					}
+				},
+				new ColumnConfig() {
+					{
+						setHeader("Message");
+						setSortable(true);
+						setDataIndex("message");
+						setWidth(580);
+					}
+				}
+			});
+
+		Grid g = new Grid(Ext.generateId(), "800px", "600px", store, cm);
+		g.render();
+
+		Toolbar tb = new Toolbar(g.getView().getHeaderPanel(true));
+		tb.addItem(new ToolbarTextItem("Showing recent INFO and ERROR messages from the log:"));
+		tb.addItem(new ToolbarSeparator());
+		tb.addButton(new ToolbarButton(new ButtonConfig() {
+			{
+				setText("Reload");
+				setButtonListener(new ButtonListenerAdapter() {
+					public void onClick(Button button, EventObject e) {
+						refresh();
+					}
+				});
+			}
+		}));
+
+		layout.add(g);
+
+
+
+	}
+
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -7,6 +7,7 @@
 import org.drools.brms.client.admin.ArchivedAssetManager;
 import org.drools.brms.client.admin.BackupManager;
 import org.drools.brms.client.admin.CategoryManager;
+import org.drools.brms.client.admin.LogViewer;
 import org.drools.brms.client.admin.StateManager;
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.common.GenericCallback;
@@ -61,6 +62,8 @@
 
 	private VerticalPanel packagesPanel;
 
+	protected String currentPackage;
+
     public BorderLayout getBaseLayout() {
         return layout;
     }
@@ -189,6 +192,7 @@
         Toolbar deployToolbar = new Toolbar(Ext.generateId());
         deployToolbar.addButton(new ToolbarMenuButton("Deploy...", deploymentMenu()));
         deploymentPanel.add(deployToolbar);
+        deploymentPanel.setWidth("100%");
 
         /** ****************** */
         ContentPanel cp = new ContentPanel("eg-explorer", "BRMS Explorer");
@@ -202,20 +206,26 @@
                 int id = Integer.parseInt(self.getAttribute("id"));
                 switch (id) {
                 case 0:
-                    centertabbedPanel.addTab("Category Manager", true, new CategoryManager(), "catman");
+                	if (!centertabbedPanel.showIfOpen("catman"))
+                		centertabbedPanel.addTab("Category Manager", true, new CategoryManager(), "catman");
                     break;
                 case 1:
-                    centertabbedPanel.addTab("Archived Manager", true, new ArchivedAssetManager(), "archman");
+                	if (!centertabbedPanel.showIfOpen("archman"))
+                		centertabbedPanel.addTab("Archived Manager", true, new ArchivedAssetManager(centertabbedPanel), "archman");
                     break;
 
                 case 2:
-                    centertabbedPanel.addTab("State Manager", true, new StateManager(), "stateman");
+                	if (!centertabbedPanel.showIfOpen("stateman"))
+                		centertabbedPanel.addTab("State Manager", true, new StateManager(), "stateman");
                     break;
                 case 3:
-                    centertabbedPanel.addTab("Backup Manager", true, new BackupManager(), "bakman");
+                	if (!centertabbedPanel.showIfOpen("bakman"))
+                		centertabbedPanel.addTab("Backup Manager", true, new BackupManager(), "bakman");
                     break;
 
                 case 4:
+                	if (!centertabbedPanel.showIfOpen("errorLog"))
+                		centertabbedPanel.addTab("Backup Manager", true, new LogViewer(), "errorLog");
                     break;
                 }
 
@@ -381,7 +391,7 @@
         		setIcon("images/rule_asset.gif");
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
-        				launchWizard(null, "New Rule", true);
+        				launchWizard(null, "New Rule", true, currentPackage);
         			}
         		});
         	}
@@ -391,7 +401,7 @@
         		setIcon("images/model_asset.gif");
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
-        				launchWizard(AssetFormats.MODEL, "New model archive (jar)", false);
+        				launchWizard(AssetFormats.MODEL, "New model archive (jar)", false, currentPackage);
         			}
         		});
         	}
@@ -401,7 +411,7 @@
         		setIcon("images/function_assets.gif");
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
-        				launchWizard(AssetFormats.FUNCTION, "Create a new function", false);
+        				launchWizard(AssetFormats.FUNCTION, "Create a new function", false, currentPackage);
         			}
         		});
         	}
@@ -411,7 +421,7 @@
         		setIcon("images/dsl.gif");
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
-        				launchWizard(AssetFormats.DSL, "Create a new DSL configuration", false);
+        				launchWizard(AssetFormats.DSL, "Create a new DSL configuration", false, currentPackage);
         			}
         		});
         	}
@@ -422,7 +432,7 @@
         		setIcon("images/ruleflow_small.gif");
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
-        				launchWizard(AssetFormats.RULE_FLOW_RF, "Create a new RuleFlow", false);
+        				launchWizard(AssetFormats.RULE_FLOW_RF, "Create a new RuleFlow", false, currentPackage);
         			}
         		});
         	}
@@ -434,7 +444,7 @@
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
         				launchWizard(AssetFormats.ENUMERATION,
-                                "Create a new enumeration (drop down mapping).", false);
+                                "Create a new enumeration (drop down mapping).", false, currentPackage);
         			}
         		});
         	}
@@ -446,7 +456,7 @@
         		setBaseItemListener(new BaseItemListenerAdapter() {
         			public void onClick(BaseItem item, EventObject e) {
         				launchWizard(AssetFormats.TEST_SCENARIO,
-                                "Create a test scenario.", false);
+                                "Create a test scenario.", false, currentPackage);
         			}
         		});
         	}
@@ -458,7 +468,7 @@
 	}
 
     private void launchWizard(String format,
-            String title, boolean showCats) {
+            String title, boolean showCats, String currentlySelectedPackage) {
 
     	NewAssetWizard pop = new NewAssetWizard( new EditItemEvent() {
                                    public void open(String key) {
@@ -468,12 +478,19 @@
                                showCats,
                                format,
                                title,
-                               null );
+                               currentlySelectedPackage );
 
     	pop.show();
     }
 
 
+    private void launchWizard(String format,
+            String title, boolean showCats) {
+    	launchWizard(format, title, showCats, null);
+    }
+
+
+
     private TreePanel basicTreeStructure(TreeNode basenode, TreePanelListenerAdapter listener) {
 
         TreePanel adminTreePanel = genericExplorerWidget(basenode);
@@ -623,7 +640,9 @@
         TreePanelListener treePanelListener = new TreePanelListenerAdapter() {
             public void onClick(TreeNode node, EventObject e) {
         		if (node.getUserObject() instanceof PackageConfigData) {
-        			String uuid = ((PackageConfigData) node.getUserObject()).uuid;
+        			PackageConfigData pc = (PackageConfigData) node.getUserObject();
+        			currentPackage = pc.name;
+        			String uuid = pc.uuid;
 		        			centertabbedPanel.openPackageEditor(uuid, new Command() {
 								public void execute() {
 									//refresh the package tree.
@@ -634,6 +653,7 @@
         			Object[] uo = (Object[]) node.getUserObject();
         			final String[] fmts = (String[]) uo[0];
         			final PackageConfigData pc = (PackageConfigData) node.getParentNode().getUserObject();
+        			currentPackage = pc.name;
         			String key = key(fmts, pc);
         			if (!centertabbedPanel.showIfOpen(key)) {
                         AssetItemGrid list = new AssetItemGrid(new EditItemEvent() {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -78,11 +78,10 @@
 
 		String[][] adminStructure = new String[][] {
 				{ "Categories", "images/category_small.gif" }, // ID 0
-				{ "Archived Assets", "images/backup_small.gif" }, // ID 1
-				{ "State", "images/tag.png" }, // ID 2
-				{ "Import/Export", "images/save_edit.gif" }, // ID 3
-				{ "Users", "images/icoUsers.gif" }, // ID 4
-				{ "Security", "images/login.gif" } }; // ID 5
+				{ "Archived Items", "images/backup_small.gif" }, // ID 1
+				{ "Statuses", "images/tag.png" }, // ID 2
+				{ "Import/Export", "images/save_edit.gif" }, //ID 3
+				{ "Error log", "images/error.gif" }}; // ID 4
 
 		for (int i = 0; i < adminStructure.length; i++) {
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerViewCenterPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerViewCenterPanel.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerViewCenterPanel.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -127,6 +127,7 @@
 	}
 
 
+
 	/**
 	 * Open a package editor if it is not already open.
 	 */

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/LogEntry.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/LogEntry.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/LogEntry.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -0,0 +1,17 @@
+package org.drools.brms.client.rpc;
+
+import java.util.Date;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * For showing a log in the GUI (last X messages).
+ * @author Michael Neale
+ */
+public class LogEntry implements IsSerializable {
+
+	public int severity;
+	public String message;
+	public Date timestamp;
+
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -88,6 +88,12 @@
     public PackageConfigData[] listPackages();
 
     /**
+     * This returns a list of archived packages.
+     */
+    public PackageConfigData[] listArchivedPackages();
+
+
+    /**
      * This loads up all the stuff for a
      * rule asset based on the UUID (always latest and editable version).
      */
@@ -106,7 +112,7 @@
      * for display in a table.
      */
 
-    public TableDataResult loadArchivedAssets() throws SerializableException;
+    public TableDataResult loadArchivedAssets(int skip, int numRows) throws SerializableException;
 
 
     /**
@@ -307,6 +313,12 @@
     public void removeAsset(String uuid);
 
     /**
+     * Permanently remove a package (delete it).
+     * @param uuid of the package.
+     */
+    public void removePackage(String uuid);
+
+    /**
      * Rename a package.
      */
     public String renamePackage(String uuid, String newName);
@@ -352,4 +364,9 @@
      * (eg in jars that have been uploaded to it as an asset).
      */
     public String[] listTypesInPackage(String packageUUID) throws SerializableException;
+
+    /**
+     * This will list the last N log entryies logged by the server. For debugging purposes in the GUI.
+     */
+    public LogEntry[] showLog();
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -43,9 +43,10 @@
 	public void exportRepository(AsyncCallback cb);
 	public void clearRulesRepository(AsyncCallback cb);
 	public void listPackages(AsyncCallback cb);
+	public void listArchivedPackages(AsyncCallback cb);
 	public void loadRuleAsset(java.lang.String p0, AsyncCallback cb);
 	public void loadAssetHistory(java.lang.String p0, AsyncCallback cb);
-	public void loadArchivedAssets(AsyncCallback cb);
+	public void loadArchivedAssets(int p0, int p1, AsyncCallback cb);
 	public void checkinVersion(org.drools.brms.client.rpc.RuleAsset p0, AsyncCallback cb);
 	public void restoreVersion(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
 	public void createPackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
@@ -71,6 +72,7 @@
 	public void renameAsset(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
 	public void archiveAsset(java.lang.String p0, boolean p1, AsyncCallback cb);
 	public void removeAsset(java.lang.String p0, AsyncCallback cb);
+	public void removePackage(java.lang.String p0, AsyncCallback cb);
 	public void renamePackage(java.lang.String p0, java.lang.String p1, AsyncCallback cb);
 	public void rebuildSnapshots(AsyncCallback cb);
 	public void listRulesInPackage(java.lang.String p0, AsyncCallback cb);
@@ -78,5 +80,9 @@
 	public void runScenariosInPackage(java.lang.String p0, AsyncCallback cb);
 	public void analysePackage(java.lang.String p0, AsyncCallback cb);
 	public void listTypesInPackage(java.lang.String p0, AsyncCallback cb);
+	public void showLog(AsyncCallback cb);
 
+
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGrid.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGrid.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGrid.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -27,6 +27,7 @@
 import org.drools.brms.client.rpc.TableDataRow;
 import org.drools.brms.client.ruleeditor.EditorLauncher;
 
+import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.gwtext.client.core.EventObject;
@@ -67,9 +68,11 @@
 
     private final EditItemEvent editEvent;
     private SimplePanel layout;
+    private Command 	refresh;
 
     private int currentPosition = 0;
 	protected Store store;
+	private Grid currentGrid;
 
     public AssetItemGrid(final EditItemEvent event, final String tableConfig, final AssetItemGridDataLoader source) {
 
@@ -105,7 +108,9 @@
         final int numFlds = rd.getFields().length;
         LoadingPopup.showMessage("Loading data...");
         source.loadData(currentPosition, pageSize, new GenericCallback() {
-            public void onSuccess(Object data) {
+
+
+			public void onSuccess(Object data) {
                 TableDataResult result = (TableDataResult) data;
                 Object[][] gridData = new Object[result.data.length][];
                 for (int i = 0; i < result.data.length; i++) {
@@ -121,29 +126,34 @@
                 MemoryProxy proxy = new MemoryProxy(gridData);
                 ArrayReader reader = new ArrayReader(rd);
                 store = new Store(proxy, reader);
-                final Grid g = new Grid(Ext.generateId(), "600px", "600px", store, cm);
-                g.render();
-                g.setLoadMask("Loading data...");
+                currentGrid = new Grid(Ext.generateId(), "600px", "600px", store, cm);
+                currentGrid.render();
+                currentGrid.setLoadMask("Loading data...");
 
-                Toolbar tb = new Toolbar(g.getView().getHeaderPanel(true));
+                Toolbar tb = new Toolbar(currentGrid.getView().getHeaderPanel(true));
                 tb.addItem(new ToolbarTextItem(Format.format(
                                         "Showing item #{0} to {1} of {2} items.",
                                         new String[] {""+(currentPosition + 1), "" + (currentPosition + result.data.length), "" + result.total})));
                 if (currentPosition > 0) {
-                    navButton(source, cm, rd, pageSize, g, false, tb);
+                    navButton(source, cm, rd, pageSize, currentGrid, false, tb);
                 }
                 if (result.hasNext) {
-                    navButton(source, cm, rd, pageSize, g, true, tb);
+                    navButton(source, cm, rd, pageSize, currentGrid, true, tb);
                 }
 
+                refresh = new Command() {
+					public void execute() {
+                        layout.clear();
+                        currentGrid.destroy();
+                        doGrid(source, cm, rd, pageSize);					}
+                };
+
                 tb.addButton(new ToolbarButton(new ButtonConfig() {
                     {
                         setText("Refresh");
                         setButtonListener(new ButtonListenerAdapter() {
                             public void onClick(Button button, EventObject e) {
-                                layout.clear();
-                                g.destroy();
-                                doGrid(source, cm, rd, pageSize);
+                            	refresh.execute();
                             }
                         });
                     }
@@ -151,7 +161,7 @@
 
 
 
-                g.addGridRowListener(new GridRowListenerAdapter() {
+                currentGrid.addGridRowListener(new GridRowListenerAdapter() {
                     public void onRowDblClick(Grid grid, int rowIndex, EventObject e) {
                         String uuid = grid.getSelectionModel().getSelected().getAsString("uuid");
                         System.err.println("Opening: " + uuid);
@@ -159,7 +169,7 @@
                     }
                 });
                 store.load();
-                layout.add(g);
+                layout.add(currentGrid);
                 LoadingPopup.close();
             }
 
@@ -167,6 +177,16 @@
         });
     }
 
+    public String getSelectedRowUUID() {
+    	Record r = currentGrid.getSelectionModel().getSelected();
+    	if (r != null) {
+    		return r.getAsString("uuid");
+    	} else {
+    		return null;
+    	}
+
+    }
+
     private void navButton(final AssetItemGridDataLoader source,
             final ColumnModel cm, final RecordDef rd,
             final int pageSize, final Grid g, final boolean forward, Toolbar tb) {
@@ -246,6 +266,10 @@
         return new ColumnModel(cfgs);
     }
 
+    public void refreshGrid() {
+    	this.refresh.execute();
+    }
 
 
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -53,6 +53,7 @@
 import org.drools.brms.client.rpc.BuilderResult;
 import org.drools.brms.client.rpc.BulkTestRunResult;
 import org.drools.brms.client.rpc.DetailedSerializableException;
+import org.drools.brms.client.rpc.LogEntry;
 import org.drools.brms.client.rpc.MetaData;
 import org.drools.brms.client.rpc.PackageConfigData;
 import org.drools.brms.client.rpc.RepositoryService;
@@ -73,6 +74,7 @@
 import org.drools.brms.server.contenthandler.ModelContentHandler;
 import org.drools.brms.server.util.AnalysisRunner;
 import org.drools.brms.server.util.BRMSSuggestionCompletionLoader;
+import org.drools.brms.server.util.LoggingHelper;
 import org.drools.brms.server.util.MetaDataMapper;
 import org.drools.brms.server.util.TableDisplayHandler;
 import org.drools.common.AbstractRuleBase;
@@ -89,6 +91,7 @@
 import org.drools.repository.CategoryItem;
 import org.drools.repository.AssetPageList;
 import org.drools.repository.PackageItem;
+import org.drools.repository.PackageIterator;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryAdministrator;
 import org.drools.repository.RulesRepositoryException;
@@ -122,7 +125,7 @@
 
     private static final long serialVersionUID = 400L;
     private static final DateFormat dateFormatter = DateFormat.getInstance();
-    private static final Logger log = Logger.getLogger( ServiceImplementation.class );
+    private static final Logger log = LoggingHelper.getLogger();
     private MetaDataMapper metaDataMapper = new MetaDataMapper();
 
     /** Used for a simple cache of binary packages to avoid serialization from the database */
@@ -142,7 +145,9 @@
 
     }
 
-    @WebRemote
+
+
+	@WebRemote
     @Restrict("#{identity.loggedIn}")
     public Boolean createCategory(String path,
                                   String name,
@@ -245,16 +250,32 @@
     @WebRemote
     @Restrict("#{identity.loggedIn}")
     public PackageConfigData[] listPackages() {
-        Iterator pkgs = repository.listPackages();
-        List<PackageConfigData> result = new ArrayList<PackageConfigData>();
+        return listPackages(false);
+    }
+
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
+    public PackageConfigData[] listArchivedPackages() {
+        return listPackages(true);
+    }
+
+
+	private PackageConfigData[] listPackages(boolean archive) {
+		List<PackageConfigData> result = new ArrayList<PackageConfigData>();
+		PackageIterator pkgs = repository.listPackages();
+		pkgs.setArchivedIterator(archive);
         while(pkgs.hasNext()) {
             PackageItem pkg = (PackageItem) pkgs.next();
 
             PackageConfigData data = new PackageConfigData();
             data.uuid = pkg.getUUID();
             data.name = pkg.getName();
-
-            result.add( data );
+            data.archived = pkg.isArchived();
+            if (!archive) {
+            	result.add(data);
+            } else if (archive && data.archived) {
+            	result.add(data);
+            }
         }
 
         Collections.sort( result, new Comparator<Object>() {
@@ -268,11 +289,10 @@
 
         });
         PackageConfigData[] resultArr = result.toArray( new PackageConfigData[result.size()] );
+		return resultArr;
+	}
 
-        return resultArr;
-    }
 
-
     @WebRemote
     @Restrict("#{identity.loggedIn}")
     public TableDataResult loadRuleListForCategories(String categoryPath, int skip, int numRows) throws SerializableException {
@@ -484,13 +504,14 @@
 
     @WebRemote
     @Restrict("#{identity.loggedIn}")
-    public TableDataResult loadArchivedAssets() throws SerializableException {
-
+    public TableDataResult loadArchivedAssets(int skip, int numRows) throws SerializableException {
         List<TableDataRow> result = new ArrayList<TableDataRow>();
 
         AssetItemIterator it = repository.findArchivedAssets();
+        it.skip(skip);
+        int count = 0;
+        while ( it.hasNext() ) {
 
-        while ( it.hasNext() ) {
             AssetItem archived = (AssetItem) it.next();
 
             TableDataRow row = new TableDataRow();
@@ -504,12 +525,14 @@
                 row.values[4] = archived.getLastModified().getTime().toLocaleString();
 
                 result.add( row );
+                count++;
+                if (count == numRows) {
+                	break;
+                }
         }
 
-        if (result.size() == 0) {
-            return null;
-        }
 
+
         TableDataResult table = new TableDataResult();
         table.data = result.toArray(new TableDataRow[result.size()]);
 
@@ -1016,8 +1039,22 @@
         }
     }
 
+
     @WebRemote
     @Restrict("#{identity.loggedIn}")
+    public void removePackage(String uuid) {
+        try {
+            PackageItem item = repository.loadPackageByUUID(uuid);
+            item.remove();
+            repository.save();
+        } catch (RulesRepositoryException e) {
+            log.error( e );
+            throw e;
+        }
+    }
+
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
     public String renamePackage(String uuid, String newName) {
         return repository.renamePackage( uuid, newName );
     }
@@ -1288,7 +1325,12 @@
 
 	}
 
+	@WebRemote
+    @Restrict("#{identity.loggedIn}")
+	public LogEntry[] showLog() {
+		return LoggingHelper.getMessages();
 
+	}
 
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -30,7 +30,6 @@
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
-import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.RuleDescr;
 
 /**

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/LoggingHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/LoggingHelper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/LoggingHelper.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -0,0 +1,116 @@
+package org.drools.brms.server.util;
+
+import java.util.Date;
+
+import org.apache.log4j.Appender;
+import org.apache.log4j.Layout;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.spi.ErrorHandler;
+import org.apache.log4j.spi.Filter;
+import org.apache.log4j.spi.LoggingEvent;
+import org.drools.brms.client.rpc.LogEntry;
+import org.drools.brms.server.ServiceImplementation;
+
+/**
+ * Collects messages for displaying in the GUI as well as providing a logger.
+ * @author Michael Neale.
+ *
+ */
+public class LoggingHelper {
+
+	static MessageList messages = new MessageList();
+
+	public static LogEntry[] getMessages() {
+		return messages.getMessages();
+	}
+
+
+	public static Logger getLogger() {
+
+		Logger l = Logger.getLogger( ServiceImplementation.class );
+
+		l.addAppender(new Appender() {
+
+			public void addFilter(Filter arg0) {
+			}
+
+			public void clearFilters() {
+			}
+
+			public void close() {
+			}
+
+			public void doAppend(LoggingEvent e) {
+				LogEntry ev = new LogEntry();
+				ev.message = e.getRenderedMessage();
+				ev.timestamp = new Date();
+				if (e.getLevel().equals(Level.ERROR)) {
+					ev.severity = 0;
+					messages.add(ev);
+				} else if (e.getLevel().equals(Level.INFO)) {
+					ev.severity = 1;
+					messages.add(ev);
+				}
+			}
+
+			public ErrorHandler getErrorHandler() {
+				return null;
+			}
+
+			public Filter getFilter() {
+				return null;
+			}
+
+			public Layout getLayout() {
+				return null;
+			}
+
+			public String getName() {
+				return "guilogger";
+			}
+
+			public boolean requiresLayout() {
+				return false;
+			}
+
+			public void setErrorHandler(ErrorHandler arg0) {
+			}
+
+			public void setLayout(Layout arg0) {
+			}
+
+			public void setName(String arg0) {
+			}
+
+		});
+		return l;
+
+	}
+
+}
+
+class MessageList {
+	static int MAX = 250;
+	LogEntry[] messages = new LogEntry[MAX];
+	int current = 0;
+	public MessageList() {
+
+	}
+
+	public synchronized void add(LogEntry e) {
+		if (current == MAX) {
+			current = 0;
+		}
+		messages[current++] = e;
+
+	}
+
+	public LogEntry[] getMessages() {
+		return messages;
+	}
+
+
+
+}
+


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2008-02-07 06:09:27 UTC (rev 18361)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -51,6 +51,8 @@
 		// ServiceImpl impl = new ServiceImpl(new
 		// RulesRepository(SessionHelper.getSession()));
 
+
+
 		RepositoryService impl = getService();
 
 		String[] originalCats = impl.loadChildCategories("/");
@@ -387,12 +389,33 @@
 
 		PackageConfigData[] pkgs = impl.listPackages();
 
+		PackageConfigData[] arch = impl.listArchivedPackages();
+
 		String uuid = impl.createPackage("testCreateArchivedPackage",
 				"this is a new package");
+
+
 		PackageItem item = impl.repository
 				.loadPackage("testCreateArchivedPackage");
+		TableDataResult td = impl.loadArchivedAssets(0, 1000);
+
 		item.archiveItem(true);
+
+
+
+		TableDataResult td2 = impl.loadArchivedAssets(0, 1000);
+		assertEquals(td2.data.length, td.data.length);
+
+		PackageConfigData[] arch2 = impl.listArchivedPackages();
+		assertEquals(arch2.length, arch.length + 1);
+
+
+
 		assertEquals(pkgs.length, impl.listPackages().length);
+
+		item.archiveItem(false);
+		arch2 = impl.listArchivedPackages();
+		assertEquals(arch2.length, arch.length);
 	}
 
 	public void testCreatePackage() throws Exception {
@@ -790,6 +813,17 @@
 		assertEquals(3, res.data.length);
 	}
 
+	public void testRemovePackage() throws Exception {
+		ServiceImplementation impl = getService();
+		int n = impl.listPackages().length;
+		PackageItem p = impl.repository.createPackage("testRemovePackage", "");
+		assertNotNull(impl.loadPackageConfig(p.getUUID()));
+
+		impl.removePackage(p.getUUID());
+		assertEquals(n, impl.listPackages().length);
+	}
+
+
 	public void testArchiveAsset() throws Exception {
 		RepositoryService impl = getService();
 		String cat = "testArchiveAsset";
@@ -813,8 +847,13 @@
 		assertEquals(4, res.total);
 		assertFalse(res.hasNext);
 
+		TableDataResult td = impl.loadArchivedAssets(0, 1000);
+
 		impl.archiveAsset(uuid4, true);
 
+		TableDataResult td2 = impl.loadArchivedAssets(0, 1000);
+		assertTrue(td2.data.length == td.data.length + 1);
+
 		res = impl.listAssets(pkgUUID, arr("testArchiveAsset"), 0, -1);
 		assertEquals(3, res.data.length);
 
@@ -823,6 +862,9 @@
 		res = impl.listAssets(pkgUUID, arr("testArchiveAsset"), 0, -1);
 		assertEquals(4, res.data.length);
 
+
+
+
 	}
 
 	public void testLoadSuggestionCompletionEngine() throws Exception {
@@ -1719,8 +1761,6 @@
 	}
 
 
-
-
 	private ServiceImplementation getService() throws Exception {
 		ServiceImplementation impl = new ServiceImplementation();
 

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/LoggingHelperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/LoggingHelperTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/LoggingHelperTest.java	2008-02-07 06:14:51 UTC (rev 18362)
@@ -0,0 +1,74 @@
+package org.drools.brms.server.util;
+
+import org.apache.log4j.Logger;
+import org.drools.brms.client.rpc.LogEntry;
+
+import junit.framework.TestCase;
+
+public class LoggingHelperTest extends TestCase {
+
+	public void testAppender() {
+		Logger l = LoggingHelper.getLogger();
+		assertNotNull(l.getAppender("guilogger"));
+	}
+
+	public void testMessages() throws Exception {
+		final MessageList ml = new MessageList();
+
+		final LogEntry e = new LogEntry();
+		e.message = "heh";
+		ml.add(e);
+
+		assertEquals(e, ml.getMessages()[0]);
+
+		for (int i = 0; i < 10000; i++) {
+			ml.add(new LogEntry());
+		}
+
+		LogEntry[] results = ml.getMessages();
+		for (int i = 0; i < results.length; i++) {
+			assertNotNull("" + i, results[i]);
+			assertFalse(results[i] == e);
+		}
+
+		Thread t1 = new Thread(new Runnable() {
+			public void run() {
+				for (int i = 0; i < 10000; i++) {
+					ml.add(new LogEntry());
+				}
+				LogEntry[] results = ml.getMessages();
+				for (int i = 0; i < results.length; i++) {
+					assertNotNull("" + i, results[i]);
+					assertFalse(results[i] == e);
+				}
+			}
+		});
+
+
+		Thread t2 = new Thread(new Runnable() {
+			public void run() {
+				for (int i = 0; i < 10000; i++) {
+					ml.add(new LogEntry());
+				}
+				LogEntry[] results = ml.getMessages();
+				for (int i = 0; i < results.length; i++) {
+					assertNotNull("" + i, results[i]);
+					assertFalse(results[i] == e);
+				}
+			}
+		});
+
+		t1.start();
+		t2.start();
+		t1.join();
+		t2.join();
+
+		results = ml.getMessages();
+		for (int i = 0; i < results.length; i++) {
+			assertNotNull("" + i, results[i]);
+			assertFalse(results[i] == e);
+		}
+
+	}
+
+}


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




More information about the jboss-svn-commits mailing list