[jboss-svn-commits] JBL Code SVN: r18215 - in labs/jbossrules/trunk: drools-compiler and 31 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jan 31 02:57:21 EST 2008


Author: michael.neale at jboss.com
Date: 2008-01-31 02:57:21 -0500 (Thu, 31 Jan 2008)
New Revision: 18215

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup2.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/PrettyFormLayout.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/BRMSContentManager.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/packages/PackageEditor2.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageHeaderWidget.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/client/rulelist/AssetItemGridDataLoader.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/find.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/site-nav.xml
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/packages/PackageHeaderWidgetTest.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetPageList.java
   labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/
   labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.jar
   labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.pom
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureConfigurator.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureList.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java
Modified:
   labs/jbossrules/trunk/drools-compiler/.project
   labs/jbossrules/trunk/drools-jbrms/.classpath
   labs/jbossrules/trunk/drools-jbrms/.project
   labs/jbossrules/trunk/drools-jbrms/JBRMS.mac.launch
   labs/jbossrules/trunk/drools-jbrms/pom.xml
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml
   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/JBRMSEntryPoint.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoginWidget.java
   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/categorynav/CategoryExplorerWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtyableComposite.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/InfoPopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/LoadingPopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/RulePackageSelector.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionInsertFactWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/NewPackageWizard.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/QAManagerWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.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/rpc/TableDataResult.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemListViewer.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/QuickFindWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html
   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/contenthandler/ModelContentHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/security/SecurityServiceImpl.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java
   labs/jbossrules/trunk/drools-jbrms/src/main/resources/rulelist.properties
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/AsyncInterfaceTest.java
   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/contenthandler/ContentHandlerTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TableDisplayHandlerTest.java
   labs/jbossrules/trunk/drools-jsr94/.project
   labs/jbossrules/trunk/drools-repository/pom.xml
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ArchiveItemTest.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java
   labs/jbossrules/trunk/pom.xml
Log:
JBRULES-1445 BRMS v2 and new features

Modified: labs/jbossrules/trunk/drools-compiler/.project
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.project	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-compiler/.project	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,9 +1,7 @@
 <projectDescription>
   <name>drools-compiler</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-core</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-jbrms/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/.classpath	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/.classpath	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,61 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.3/jackrabbit-text-extractors-1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-jcr-commons/1.3/jackrabbit-jcr-commons-1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/emma/emma/2.0.5312/emma-2.0.5312.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.1.1/commons-fileupload-1.1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/el/el-ri/1.2/el-ri-1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/1.3/jackrabbit-api-1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
-  <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.3/jackrabbit-core-1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.0.0/lucene-core-2.0.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/seam/jboss-el/2.0.0.CR1/jboss-el-2.0.0.CR1.jar"/>
-  <classpathentry kind="src" path="/drools-analytics"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/seam/jboss-seam/2.0.0.CR2/jboss-seam-2.0.0.CR2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/google/gwt/gwt-servlet/1.4.60/gwt-servlet-1.4.60.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/1.2.17/mvel-1.2.17.jar"/>
-  <classpathentry kind="src" path="/drools-repository"/>
-  <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.4.sp1/hibernate-3.2.4.sp1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.1/commons-io-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="src" path="/drools-decisiontables"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/javassist/3.3.ga/javassist-3.3.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/el/el-api/1.2/el-api-1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6/dom4j-1.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="var" path="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-core/2.0.4.GA/jboss-common-core-2.0.4.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
-</classpath>
\ No newline at end of file
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6/dom4j-1.6.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
+	<classpathentry kind="var" path="M2_REPO/emma/emma/2.0.5312/emma-2.0.5312.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/el/el-api/1.2/el-api-1.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.1.1/commons-fileupload-1.1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.3.0/slf4j-api-1.3.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel/1.2.17/mvel-1.2.17.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.1/commons-io-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+	<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+	<classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.3.0/slf4j-log4j12-1.3.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.0.0/lucene-core-2.0.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/google/gwt/gwt-servlet/1.4.60/gwt-servlet-1.4.60.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-jcr-commons/1.3/jackrabbit-jcr-commons-1.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.3/jackrabbit-core-1.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/javassist/3.3.ga/javassist-3.3.ga.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.3/jackrabbit-text-extractors-1.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/jboss-common-core/2.0.4.GA/jboss-common-core-2.0.4.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/seam/jboss-seam/2.0.0.CR2/jboss-seam-2.0.0.CR2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/el/el-ri/1.2/el-ri-1.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/1.3/jackrabbit-api-1.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.4.sp1/hibernate-3.2.4.sp1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/seam/jboss-el/2.0.0.CR1/jboss-el-2.0.0.CR1.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-analytics"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-decisiontables"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-repository"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/trunk/drools-jbrms/.project
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/.project	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/.project	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,7 @@
 <projectDescription>
   <name>drools-jbrms</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-core</project>
-    <project>drools-analytics</project>
-    <project>drools-repository</project>
-    <project>drools-decisiontables</project>
-    <project>drools-compiler</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-jbrms/JBRMS.mac.launch
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/JBRMS.mac.launch	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/JBRMS.mac.launch	2008-01-31 07:57:21 UTC (rev 18215)
@@ -59,7 +59,9 @@
 <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_DEV&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
 <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_HOME/gwt-servlet.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
 <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_HOME/gwt-user.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/drools-jbrms/target/drools-jbrms/WEB-INF/lib/mvel-1.2.17.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;drools-analytics&quot; type=&quot;1&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/drools-jbrms/target/drools-jbrms/WEB-INF/lib/gwtext-0.9.3.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/drools-jbrms/target/drools-jbrms/WEB-INF/lib/mvel-1.2.21.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
 </listAttribute>
 <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.5"/>

Modified: labs/jbossrules/trunk/drools-jbrms/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/pom.xml	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/pom.xml	2008-01-31 07:57:21 UTC (rev 18215)
@@ -26,28 +26,7 @@
   <name>Drools :: Business Rule Management System</name>
 
   <build>
-    <finalName>drools-jbrms</finalName>
-    <!-- Need Java 5 source enabled -->
-    <pluginManagement>
-      <plugins>
-	    <plugin>
-	      <artifactId>maven-clean-plugin</artifactId>
-	      <configuration>
-	        <filesets>
-	          <fileset>
-	            <directory>./</directory>
-	            <includes>
-	              <include>.gwt-cache</include>
-				  <include>repository.xml</include>
-				  <include>repository</include>				
-	            </includes>
-	            <followSymlinks>false</followSymlinks>
-	          </fileset>
-	        </filesets>
-	      </configuration>
-	    </plugin>
-      </plugins>
-    </pluginManagement>    
+    <finalName>drools-jbrms</finalName>    
   </build>
 
 
@@ -115,6 +94,10 @@
       <artifactId>gwt-servlet</artifactId>
     </dependency>
     <dependency>
+      <groupId>com.gwtext</groupId>
+      <artifactId>gwtext</artifactId>
+    </dependency>
+    <dependency>
      <groupId>com.thoughtworks.xstream</groupId>
      <artifactId>xstream</artifactId>
     </dependency>

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml	2008-01-31 07:57:21 UTC (rev 18215)
@@ -2,11 +2,16 @@
 
 	<!-- Inherit the core Web Toolkit stuff.                  -->
 	<inherits name='com.google.gwt.user.User'/>
+    <inherits name="com.gwtext.GwtExt"/>
 
-	<!-- Specify the app entry point class.                   -->
+    <!-- Specify the app entry point class.                   -->
 	<!-- <entry-point class='org.drools.brms.client.JBRMS'/> -->
 	<entry-point class='org.drools.brms.client.JBRMSEntryPoint'/>
-  
+	
+    <script src="js/ext/adapter/yui/yui-utilities.js"></script>
+    <script src="js/ext/adapter/yui/ext-yui-adapter.js"></script>
+	<script src="js/ext/ext-all.js"></script>	
+
 	<servlet path="/jbrmsService" class="org.jboss.seam.remoting.gwt.GWTRemoteServiceServlet" />  
     <servlet path="/asset" class="org.drools.brms.server.files.AssetFileServlet"/>
     <servlet path="/backup" class="org.drools.brms.server.files.RepositoryBackupServlet"/>    

Modified: 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-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/AdminFeature.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,4 +1,5 @@
 package org.drools.brms.client;
+
 /*
  * Copyright 2005 JBoss Inc
  *
@@ -15,49 +16,73 @@
  * 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.TabPanel;
+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;
+  //  private TabPanel tab;
 
-  public AdminFeature() {
-      tab = new TabPanel();
-      tab.setWidth( "100%" );
-      tab.setHeight( "100%" );
+    public AdminFeature() {
+        final TabPanel tp = new TabPanel( "tab-1" );
+        tp.setWidth( "100%" );
+        tp.setHeight( "100%" );
 
-      tab.add( new CategoryManager(), "<img src='images/category_small.gif'/>Manage categories", true );
-      tab.add( new StateManager(),  "<img src='images/status_small.gif'/>Manage states", true );
-      tab.add( new ArchivedAssetManager(), "<img src='images/backup_small.gif'/>Manage Archived Assets", true );
-      tab.add( new BackupManager(), "<img src='images/backup_small.gif'/>Import Export", true );
+        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 );
 
-      tab.selectTab( 0 );
+        VerticalPanel vp1 = new VerticalPanel();
+        VerticalPanel vp2 = new VerticalPanel();
+        VerticalPanel vp3 = new VerticalPanel();
+        VerticalPanel vp4 = new VerticalPanel();
 
-      initWidget( tab );
+        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 );
+        
 
-  public static ComponentInfo init() {
-    return new ComponentInfo("Admin",
-      "Administer the repository") {
-      public JBRMSFeature createInstance() {
-        return new AdminFeature();
-      }
 
-    };
-  }
+    //  initWidget( tab );
 
+    }
 
-  public void onShow() {
-  }
+    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/JBRMSEntryPoint.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSEntryPoint.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSEntryPoint.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2005 JBoss Inc
  *
@@ -15,26 +14,22 @@
  * limitations under the License.
  */
 
-
 package org.drools.brms.client;
 
-import org.drools.brms.client.JBRMSFeature.ComponentInfo;
 import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.explorer.ExplorerLayoutManager;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 import org.drools.brms.client.rpc.UserSecurityContext;
 
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.HistoryListener;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.DockPanel;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasAlignment;
-import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.RootPanel;
-import com.google.gwt.user.client.ui.VerticalPanel;
+import com.gwtext.client.widgets.QuickTips;
+import com.gwtext.client.widgets.form.Field;
+import com.gwtext.client.widgets.layout.BorderLayout;
 
 /**
  * This is the main launching/entry point for the JBRMS web console.
@@ -43,159 +38,53 @@
  * If you hadn't noticed, this is using GWT from google. Refer to GWT docs
  * if GWT is new to you (it is quite a different way of building web apps).
  */
-public class JBRMSEntryPoint implements EntryPoint, HistoryListener {
+public class JBRMSEntryPoint
+    implements
+    EntryPoint {
 
-  private ComponentInfo curInfo;
-  private JBRMSFeature curSink;
-  private HTML description = new HTML();
-  private JBRMSFeatureList list = new JBRMSFeatureList();
-  private DockPanel panel = new DockPanel();
-  private DockPanel sinkContainer;
-  private LoginWidget loginWidget;
-  private LoggedInUserInfo loggedInUserInfo;
+    private LoggedInUserInfo loggedInUserInfo;
 
-  public void onHistoryChanged(String token) {
-    // Find the SinkInfo associated with the history context. If one is
-    // found, show it (It may not be found, for example, when the user mis-
-    // types a URL, or on startup, when the first context will be "").
-    ComponentInfo info = list.find(token);
-    if (info == null) {
-      showInfo();
-      return;
+    public void onModuleLoad() {
+    	DOM.removeChild(RootPanel.getBodyElement(), DOM.getElementById("loadingMessage"));
+        Field.setMsgTarget("side");
+        QuickTips.init();
+        loggedInUserInfo = new LoggedInUserInfo();
+        loggedInUserInfo.setVisible(false);
+        checkLoggedIn();
     }
-    show(info, false);
-  }
 
-  public void onModuleLoad() {
+	private BorderLayout createMain() {
+		return (new ExplorerLayoutManager(loggedInUserInfo)).getBaseLayout();
+	}
 
-    // Load all the sinks.
-    JBRMSFeatureConfigurator.configure(list);
 
-    // Put the sink list on the left, and add the outer dock panel to the
-    // root.
-    sinkContainer = new DockPanel();
-    sinkContainer.setStyleName("ks-Sink");
+    /**
+     * Check if user is logged in, if not, then show prompt.
+     * If it is, then we show the app, in all its glory !
+     */
+    private void checkLoggedIn() {
+        RepositoryServiceFactory.getSecurityService().getCurrentUser( new GenericCallback() {
+            public void onSuccess(Object data) {
+                UserSecurityContext ctx = (UserSecurityContext) data;
+                if ( ctx.userName != null ) {
+                    loggedInUserInfo.setUserName( ctx.userName );
+                    loggedInUserInfo.setVisible( true );
+                    RootPanel.get().add(createMain());
+                } else {
+                	final LoginWidget lw = new LoginWidget();
+                	lw.setLoggedInEvent(new Command() {
+                        public void execute() {
+                            loggedInUserInfo.setUserName( lw.getUserName() );
+                            loggedInUserInfo.setVisible( true );
+                            RootPanel.get().add(createMain());
 
-    VerticalPanel vp = new VerticalPanel();
-    vp.setWidth("100%");
-    vp.add(description);
-    vp.add(sinkContainer);
-
-    description.setStyleName("ks-Info");
-
-    panel.add(list, DockPanel.WEST);
-    panel.add(vp, DockPanel.CENTER);
-
-    panel.setCellVerticalAlignment(list, HasAlignment.ALIGN_TOP);
-    panel.setCellWidth(vp, "100%");
-
-    History.addHistoryListener(this);
-
-    loggedInUserInfo = new LoggedInUserInfo();
-    loginWidget = new LoginWidget();
-
-    RootPanel.get().add( loggedInUserInfo );
-    RootPanel.get().add(panel);
-    RootPanel.get().add( loginWidget );
-    loginWidget.setWidth( "100%" );
-
-    loggedInUserInfo.setVisible( false );
-    panel.setVisible( false );
-    loginWidget.setVisible( false );
-
-    checkLoggedIn();
-
-    // Show the initial screen.
-    String initToken = History.getToken();
-    if (initToken.length() > 0)
-      onHistoryChanged(initToken);
-    else
-      showInfo();
-  }
-
-  /**
-   * Check if user is logged in, if not, then show prompt.
-   * If it is, then we show the app, in all its glory !
-   */
-  private void checkLoggedIn() {
-
-      RepositoryServiceFactory.getSecurityService().getCurrentUser( new GenericCallback() {
-
-        public void onSuccess(Object data) {
-        	UserSecurityContext ctx  = (UserSecurityContext) data;
-            if (ctx.userName != null) {
-
-	                loggedInUserInfo.setUserName( ctx.userName );
-	                loggedInUserInfo.setVisible( true );
-	                list.disableFeatures(ctx);
-	                panel.setVisible( true );
-	                loginWidget.setVisible( false );
-
-
-            } else {
-
-                loginWidget.setVisible( true );
-                loginWidget.setLoggedInEvent( new Command() {
-                    public void execute() {
-                        loggedInUserInfo.setUserName( loginWidget.getUserName() );
-                        loggedInUserInfo.setVisible( true );
-                        loginWidget.setVisible( false );
-                        panel.setVisible( true );
-                    }
-                } );
-
+                        }
+                    } );
+                	lw.show();
+                }
             }
-        }
-
-      });
-
-
-
-
-
-  }
-
-
-
-public void show(ComponentInfo info, boolean affectHistory) {
-    // Don't bother re-displaying the existing sink. This can be an issue
-    // in practice, because when the history context is set, our
-    // onHistoryChanged() handler will attempt to show the currently-visible
-    // sink.
-    if (info == curInfo)
-      return;
-    curInfo = info;
-
-    // Remove the old sink from the display area.
-    if (curSink != null) {
-      curSink.onHide();
-      sinkContainer.remove(curSink);
+        } );
     }
 
-    // Get the new sink instance, and display its description in the
-    // sink list.
-    curSink = info.getInstance();
-    list.setSinkSelection(info.getName());
-    description.setHTML(info.getDescription());
 
-    // If affectHistory is set, create a new item on the history stack. This
-    // will ultimately result in onHistoryChanged() being called. It will call
-    // show() again, but nothing will happen because it will request the exact
-    // same sink we're already showing.
-    if (affectHistory)
-      History.newItem(info.getName());
-
-    // Display the new sink.
-    sinkContainer.add(curSink, DockPanel.CENTER);
-    sinkContainer.setCellWidth(curSink, "100%");
-    //sinkContainer.setCellHeight(curSink, "100%");
-    sinkContainer.setCellVerticalAlignment(curSink, DockPanel.ALIGN_TOP);
-    curSink.onShow();
-
-  }
-
-
-  private void showInfo() {
-    show(list.find("Info"), false);
-  }
-}
\ No newline at end of file
+}

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureConfigurator.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureConfigurator.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureConfigurator.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,45 +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.
- */
-
-
-
-/**
- * This contains the list of configured features for the JBRMS console.
- *
- * Modify this to add or remove features.
- *
- * @author Michael Neale
- *
- */
-public class JBRMSFeatureConfigurator {
-
-	/**
-	 * Adds all sinks to the list. Note that this does not create actual
-	 * instances of all sinks yet (they are created on-demand). This can make a
-	 * significant difference in startup time.
-	 */
-	public static void configure(JBRMSFeatureList list) {
-		list.addSink(Info.init());
-		list.addSink(RulesFeature.init());
-		list.addSink(PackageManagementFeature.init());
-		list.addSink(QAFeature.init());
-		//list.addSink(RuleBases.init());
-		list.addSink(DeploymentManagementFeature.init());
-		list.addSink(AdminFeature.init());
-	}
-
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureList.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureList.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/JBRMSFeatureList.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,95 +0,0 @@
-/*
- * 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.
- */
-
-package org.drools.brms.client;
-
-import java.util.ArrayList;
-
-import org.drools.brms.client.JBRMSFeature.ComponentInfo;
-import org.drools.brms.client.rpc.UserSecurityContext;
-
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.Hyperlink;
-import com.google.gwt.user.client.ui.VerticalPanel;
-
-/**
- * This is the list of features that make up the rule management console. Refer
- * to the JBRMSFeatureConfigurator which actually sets up the individual
- * features.
- *
- * This is the left panel that contains all of the features, along with a short
- * description of each.
- */
-public class JBRMSFeatureList extends Composite {
-
-	private VerticalPanel list = new VerticalPanel();
-	private ArrayList sinks = new ArrayList();
-
-
-	private int selectedSink = -1;
-
-	public JBRMSFeatureList() {
-		initWidget(list);
-		setStyleName("ks-List");
-	}
-
-	public void addSink(final ComponentInfo info) {
-		String name = info.getName();
-		Hyperlink link = new Hyperlink(name, name);
-		link.setStyleName("ks-SinkItem");
-
-		list.add(link);
-		sinks.add(info);
-
-	}
-
-	public ComponentInfo find(String sinkName) {
-		for (int i = 0; i < sinks.size(); ++i) {
-			ComponentInfo info = (ComponentInfo) sinks.get(i);
-			if (info.getName().equals(sinkName))
-				return info;
-		}
-
-		return null;
-	}
-
-	public void setSinkSelection(String name) {
-		if (selectedSink != -1)
-			list.getWidget(selectedSink)
-					.removeStyleName("ks-SinkItem-selected");
-
-		for (int i = 0; i < sinks.size(); ++i) {
-			ComponentInfo info = (ComponentInfo) sinks.get(i);
-			if (info.getName().equals(name)) {
-				selectedSink = i;
-				list.getWidget(selectedSink).addStyleName(
-						"ks-SinkItem-selected");
-				return;
-			}
-		}
-	}
-
-
-
-	public void disableFeatures(UserSecurityContext ctx) {
-		for (int i = 0; i < this.list.getWidgetCount(); i++) {
-			Hyperlink hl = (Hyperlink) this.list.getWidget(i);
-			if (ctx.disabledFeatures.contains(hl.getText())) {
-				hl.setVisible(false);
-			}
-		}
-	}
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoggedInUserInfo.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -18,12 +18,10 @@
 
 
 
-import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.GenericCallback;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 import org.drools.brms.client.rpc.UserSecurityContext;
 
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Composite;
@@ -38,23 +36,18 @@
 
 
     public LoggedInUserInfo() {
-
         widgetcontent = new HTML();
         initWidget( widgetcontent );
     }
 
     public void setUserName(String userName) {
         StringBuffer content = new StringBuffer();
-
-
-
-        content.append( "<div id='user_info'>" );
-        content.append( "Welcome: &nbsp;" + userName );
-        content.append( "&nbsp;&nbsp;&nbsp;<a href='logout.jsp'>[Sign Out]</a>" );
+        content.append( "<div id='user_info' class='headerBarblue'>" );
+        content.append( "<small>Welcome: &nbsp;" + userName );
+        content.append( "&nbsp;&nbsp;&nbsp;<a href='logout.jsp'>[Sign Out]</a></small>" );
         content.append( "</div>" );
         widgetcontent.setHTML( content.toString() );
 
-
         //we have the timer to keep the session alive.
         Timer timer = new Timer() {
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoginWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoginWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/LoginWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 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.
@@ -17,6 +17,7 @@
 
 
 
+import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.FormStyleLayout;
 import org.drools.brms.client.common.GenericCallback;
 import org.drools.brms.client.common.LoadingPopup;
@@ -25,45 +26,115 @@
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DeferredCommand;
 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.PasswordTextBox;
 import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ButtonConfig;
+import com.gwtext.client.widgets.LayoutDialog;
+import com.gwtext.client.widgets.LayoutDialogConfig;
+import com.gwtext.client.widgets.Toolbar;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.ToolbarTextItem;
+import com.gwtext.client.widgets.event.ButtonListener;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.form.Form;
+import com.gwtext.client.widgets.form.FormConfig;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.ContentPanel;
+import com.gwtext.client.widgets.layout.ContentPanelConfig;
+import com.gwtext.client.widgets.layout.LayoutRegionConfig;
 
 /**
  * Used for logging in, obviously !
- * 
+ *
  * @author Michael Neale
  */
-public class LoginWidget extends Composite {
+public class LoginWidget {
 
-    private FormStyleLayout layout;
+
     private TextBox userName;
+    private PasswordTextBox password;
     private Command loggedInEvent;
+	private LayoutDialog dialog;
 
-    
-    public LoginWidget() {
-        layout = new FormStyleLayout("images/login.gif", "Please enter your details");
-        
-        userName = new TextBox();
-        userName.setTabIndex( 1 );
-        layout.addAttribute( "User name:", userName );
-        
-        final PasswordTextBox password = new PasswordTextBox();
-        password.setTabIndex( 2 );
-        layout.addAttribute( "Password:", password );
-        
-        Button login = new Button("Login");
-        login.setTabIndex( 3 );
-        layout.addAttribute( "", login );
-        
-        login.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
+
+
+	public void show() {
+		LayoutRegionConfig center = new LayoutRegionConfig() {
+    	    {
+    	        setAutoScroll(true);
+    	        setTabPosition("top");
+    	        setCloseOnTab(true);
+    	        setAlwaysShowTabs(true);
+    	    }
+    	};
+
+    	dialog = new LayoutDialog(new LayoutDialogConfig() {
+    	    {
+    	        setModal(true);
+    	        setWidth(500);
+    	        setHeight(350);
+    	        setShadow(true);
+    	        setResizable(false);
+    	        setClosable(false);
+    	        setProxyDrag(true);
+    	        setTitle("Sign in");
+    	    }
+    	}, center);
+
+
+
+    	final BorderLayout layout = dialog.getLayout();
+    	layout.beginUpdate();
+
+    	ContentPanel signInPanel = new ContentPanel(Ext.generateId(), "Sign In");
+    	final Widget signInForm = getSignInForm();
+
+    	VerticalPanel signInWrapper = new VerticalPanel() {
+    	    {
+    	        setSpacing(30);
+    	        setWidth("100%");
+    	        setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
+    	    }
+    	};
+    	signInWrapper.add(signInForm);
+
+    	signInPanel.add(signInWrapper);
+    	layout.add(LayoutRegionConfig.CENTER, signInPanel);
+
+
+    	final Toolbar tb = new Toolbar("my-tb");
+    	tb.addButton(new ToolbarButton("About", new ButtonConfig()));
+    	tb.addSeparator();
+    	tb.addItem(new ToolbarTextItem("Copyright (c) 2006 JBoss, a division of Red Hat."));
+
+    	ContentPanel infoPanel = new ContentPanel(Ext.generateId(), new ContentPanelConfig() {
+    	    {
+    	        setTitle("Info");
+    	        setClosable(true);
+    	        setBackground(true);
+    	        setToolbar(tb);
+    	    }
+    	});
+    	infoPanel.setContent("Drools Business Rule Management System (BRMS). See http://labs.jboss.com/drools/ for more information.");
+
+    	layout.add(LayoutRegionConfig.CENTER, infoPanel);
+    	layout.endUpdate();
+
+
+        Button login = dialog.addButton("Sign in");
+
+
+        login.addButtonListener( new ButtonListenerAdapter() {
+        	public void onClick(Button button, EventObject e) {
                 LoadingPopup.showMessage( "Logging in..." );
-                
-                DeferredCommand.add( new Command() {
+
+                DeferredCommand.addCommand( new Command() {
                     public void execute() {
                         doLogin( loggedInEvent, userName, password );
                     }
@@ -71,16 +142,10 @@
             }
 
         });
-        
-        
-        
-        initWidget( layout );
-        
+        dialog.show();
         userName.setFocus( true );
-        
-        setStyleName( "login-Form" );
-    }
-    
+	}
+
     private void doLogin(final Command loggedInEvent, final TextBox userName, final PasswordTextBox password) {
         RepositoryServiceFactory.login( userName.getText(), password.getText(), new GenericCallback() {
             public void onSuccess(Object o) {
@@ -90,12 +155,29 @@
                     Window.alert( "Incorrect username or password." );
                 } else {
                     loggedInEvent.execute();
+                    dialog.destroy();
                 }
             }
         });
     }
-    
-    
+
+    private Widget getSignInForm() {
+
+        FormStyleLayout layout = new FormStyleLayout("images/login.gif", "BRMS Login");
+
+        userName = new TextBox();
+        userName.setTabIndex( 1 );
+        layout.addAttribute( "User name:", userName );
+
+        password = new PasswordTextBox();
+        password.setTabIndex( 2 );
+        layout.addAttribute( "Password:", password );
+
+
+        return layout;
+
+    }
+
     /**
      * Return the name that was entered.
      */
@@ -109,5 +191,6 @@
     public void setLoggedInEvent(Command loggedInEvent) {
         this.loggedInEvent = loggedInEvent;
     }
-    
+
+
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,43 +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.rulelist.AssetBrowser;
-
-/**
- * This controls the "Rules manager" top level feature.
- * 
- * @author Michael Neale
- */
-public class RulesFeature extends JBRMSFeature {
-
-	public static ComponentInfo init() {
-		return new ComponentInfo("Rules", "Find and edit rules.") {
-			public JBRMSFeature createInstance() {
-				return new RulesFeature();
-			}
-
-		};
-	}
-
-	public RulesFeature() {
-		AssetBrowser assetBrowser = new AssetBrowser();
-		assetBrowser.setOpenedViewersContainer(JBRMSFeature.openedViewers);
-		initWidget(assetBrowser);
-	}
-
-}
\ 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-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/ArchivedAssetManager.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -47,7 +47,6 @@
             	TabPanel tab = new TabPanel();
             	pop.addRow(tab);
             	EditorLauncher.showLoadEditor( new HashMap(), tab, key, true );
-            	pop.setPopupPosition(20, 20);
             	pop.show();
             }
         }, AssetItemListViewer.ARCHIVED_RULE_LIST_TABLE_ID );

Modified: 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/client/categorynav/CategoryExplorerWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/categorynav/CategoryExplorerWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -22,6 +22,8 @@
 import org.drools.brms.client.rpc.RepositoryServiceAsync;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.AbsolutePanel;
 import com.google.gwt.user.client.ui.Button;
@@ -107,34 +109,38 @@
     /** This will refresh the tree and restore it back to the original state */
     private void loadInitialTree() {
         navTreeWidget.addItem( "Please wait..." );
-        service.loadChildCategories( "/",
-                                     new GenericCallback() {
+        DeferredCommand.addCommand(new Command() {
+			public void execute() {
+		        service.loadChildCategories( "/",
+		                                     new GenericCallback() {
 
 
-                                         public void onSuccess(Object result) {
-                                             selectedPath = null;
-                                             navTreeWidget.removeItems();
-                                             String[] categories = (String[]) result;
+		                                         public void onSuccess(Object result) {
+		                                             selectedPath = null;
+		                                             navTreeWidget.removeItems();
+		                                             String[] categories = (String[]) result;
 
-                                             if (categories.length == 0) {
-                                                 showEmptyTree();
-                                             } else {
-                                                 hideEmptyTree();
-                                             }
-                                             for ( int i = 0; i < categories.length; i++ ) {
-                                                 TreeItem it = new TreeItem();
-                                                 it.setHTML( "<img src=\"images/category_small.gif\"/>" + categories[i] );
-                                                 it.setUserObject( categories[i] );
-                                                 it.addItem( new PendingItem() );
-                                                 navTreeWidget.addItem( it );
-                                             }
+		                                             if (categories.length == 0) {
+		                                                 showEmptyTree();
+		                                             } else {
+		                                                 hideEmptyTree();
+		                                             }
+		                                             for ( int i = 0; i < categories.length; i++ ) {
+		                                                 TreeItem it = new TreeItem();
+		                                                 it.setHTML( "<img src=\"images/category_small.gif\"/>" + categories[i] );
+		                                                 it.setUserObject( categories[i] );
+		                                                 it.addItem( new PendingItem() );
+		                                                 navTreeWidget.addItem( it );
+		                                             }
 
 
-                                         }
+		                                         }
 
 
 
-                                     } );
+		                                     } );
+			}}
+        );
 
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtyableComposite.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtyableComposite.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DirtyableComposite.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -16,13 +16,22 @@
  * limitations under the License.
  */
 
+import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Composite;
 
 public abstract class DirtyableComposite extends Composite implements
 		DirtyableWidget {
+    
 	protected boolean dirtyflag = false;
+	
+	public DirtyableComposite() {
+	}
 
-	/*
+    public void onBrowserEvent(Event event) {
+        super.onBrowserEvent( event );
+    }
+
+    /*
 	 * (non-Javadoc)
 	 * 
 	 * @see org.drools.brms.client.common.isDirtable#isDirty()

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -19,116 +19,119 @@
 
 import org.drools.brms.client.rpc.DetailedSerializableException;
 
-import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 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.PopupPanel;
+import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ButtonConfig;
+import com.gwtext.client.widgets.LayoutDialog;
+import com.gwtext.client.widgets.LayoutDialogConfig;
+import com.gwtext.client.widgets.event.ButtonListener;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.form.Form;
+import com.gwtext.client.widgets.form.FormConfig;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.ContentPanel;
+import com.gwtext.client.widgets.layout.LayoutRegionConfig;
 
 
 /**
  * Generic error dialog popup.
  */
-public class ErrorPopup extends DialogBox {
+public class ErrorPopup  {
 
     public static ErrorPopup instance = null;
+    //new Image("images/error_dialog.png")
 
-    Label errorMessage = new Label();
-    Panel panel = new HorizontalPanel();
-    Image ok = new ImageButton("images/close.gif");
 
+    private ErrorPopup(final String message, final String longMessage) {
 
-    private ErrorPopup(String message, String longMessage) {
-        super(true);
+      //create and configure layout dialog
+        final LayoutDialog dialog = new LayoutDialog(new LayoutDialogConfig() {
+        	{
+        		setTitle("Error");
+        		setModal(true);
+        		setWidth(500);
+        		setHeight((longMessage != null) ? 500 : 150);
+        		setShadow(true);
+        		//setMinHeight(300);
+        		//setMinHeight(300);
+        	}
+        }, new LayoutRegionConfig());
 
 
+        //another way to add button
+        dialog.addButton(new Button("OK", new ButtonConfig() {
+        	{
+        		setText("Cancel");
+        		setButtonListener(new ButtonListenerAdapter() {
+        			public void onClick(Button button, EventObject e) {
+        				dialog.hide();
+        			}
+        		});
+        	}
+        }));
 
-        this.errorMessage.setText( message );
+        //add content to the center region
+        BorderLayout layout = dialog.getLayout();
+        ContentPanel contentPanel = new ContentPanel();
 
-        panel.add( new Image("images/error_dialog.png") );
-        VerticalPanel vert = new VerticalPanel();
-        vert.add( errorMessage );
-        panel.add( vert );
 
-        if (longMessage != null) {
-            addDetail(vert, longMessage);
+        VerticalPanel vp = new VerticalPanel();
+        if (longMessage == null) {
+        	vp.add(new HTML("<image src='images/error_dialog.png'/>&nbsp;<strong><b>" + message +"</b></strong>"));
+        } else {
+        	vp.add(new HTML("<image src='images/error_dialog.png'/>&nbsp;<strong><b>" + message +"</b></strong><hr/>"));
         }
 
-        panel.add( ok );
-        final PopupPanel self = this;
-        ok.addClickListener( new ClickListener() {
-            public void onClick(Widget arg0) {
-                self.hide();
-            }
-        });
-        this.setWidget( panel );
-        this.setPopupPosition( 40, 40 );
-        //setHeight( "150px" );
-        setStyleName( "rule-error-Popup" );
-    }
+        final SimplePanel detailPanel = new SimplePanel();
+        if (longMessage != null && !"".equals(longMessage)) {
+	        Button showD = new Button("Show detail");
+	        showD.addButtonListener(new ButtonListenerAdapter() {
+				public void onClick(Button button, EventObject e) {
+					detailPanel.clear();
+					detailPanel.add(new HTML("<small>" + longMessage + "</small>"));
 
+				}
+	        });
+	        detailPanel.add(showD);
+        }
+        vp.setWidth("100%");
+        vp.add(detailPanel);
+        contentPanel.add(vp);
 
+        layout.add(contentPanel);
 
+        dialog.show();
 
+    }
 
-    /**
-     * Add a detailed report section (which is hidden by default).
-     */
-    private void addDetail(Panel panel,
-                           final String detailedError) {
-        VerticalPanel vert = new VerticalPanel();
-        panel.add( vert );
-        final Button show = new Button("Details");
-        vert.add( show );
 
-        final Label detail = new Label(detailedError);
-        detail.setVisible( false );
 
 
-        vert.add( detail );
 
-        show.addClickListener( new ClickListener() {
 
-            public void onClick(Widget w) {
-                detail.setVisible( true );
-                show.setVisible( false );
-            }
 
-        });
-
-    }
-
-    public void setMessage(String message) {
-        errorMessage.setText( message );
-    }
-
-
-    public void hide() {
-        errorMessage.setText( "" );
-        super.hide();
-    }
-
-
     /** Convenience method to popup the message. */
     public static void showMessage(String message) {
-        ErrorPopup p = new ErrorPopup(message, null);
-        LoadingPopup.close();
-
-        p.show();
+    	new ErrorPopup(message, null);
     }
 
     /**
      * For showing a more detailed report.
      */
     public static void showMessage(DetailedSerializableException exception) {
-        ErrorPopup p = new ErrorPopup(exception.getMessage(), exception.getLongDescription());
+        new ErrorPopup(exception.getMessage(), exception.getLongDescription());
         LoadingPopup.close();
-        p.show();
     }
 
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup2.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup2.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ErrorPopup2.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,139 @@
+package org.drools.brms.client.common;
+/*
+ * 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.rpc.DetailedSerializableException;
+
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+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.PopupPanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+
+/**
+ * Generic error dialog popup.
+ */
+public class ErrorPopup2 extends DialogBox {
+
+    public static ErrorPopup2 instance = null;
+
+    Label errorMessage = new Label();
+    Panel panel = new HorizontalPanel();
+    Image ok = new ImageButton("images/close.gif");
+
+
+    private ErrorPopup2(String message, String longMessage) {
+        super(true);
+
+
+
+        this.errorMessage.setText( message );
+
+        panel.add( new Image("images/error_dialog.png") );
+        VerticalPanel vert = new VerticalPanel();
+        vert.add( errorMessage );
+        panel.add( vert );
+
+        if (longMessage != null) {
+            addDetail(vert, longMessage);
+        }
+
+        panel.add( ok );
+        final PopupPanel self = this;
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget arg0) {
+                self.hide();
+            }
+        });
+        this.setWidget( panel );
+        this.setPopupPosition( 40, 40 );
+        //setHeight( "150px" );
+        setStyleName( "rule-error-Popup" );
+    }
+
+
+
+
+
+    /**
+     * Add a detailed report section (which is hidden by default).
+     */
+    private void addDetail(Panel panel,
+                           final String detailedError) {
+        VerticalPanel vert = new VerticalPanel();
+        panel.add( vert );
+        final Button show = new Button("Details");
+        vert.add( show );
+
+        final Label detail = new Label(detailedError);
+        detail.setVisible( false );
+
+
+        vert.add( detail );
+
+        show.addClickListener( new ClickListener() {
+
+            public void onClick(Widget w) {
+                detail.setVisible( true );
+                show.setVisible( false );
+            }
+
+        });
+
+    }
+
+    public void setMessage(String message) {
+        errorMessage.setText( message );
+    }
+
+
+    public void hide() {
+        errorMessage.setText( "" );
+        super.hide();
+    }
+
+
+    /** Convenience method to popup the message. */
+    public static void showMessage(String message) {
+        ErrorPopup2 p = new ErrorPopup2(message, null);
+        LoadingPopup.close();
+
+        p.show();
+    }
+
+    /**
+     * For showing a more detailed report.
+     */
+    public static void showMessage(DetailedSerializableException exception) {
+        ErrorPopup2 p = new ErrorPopup2(exception.getMessage(), exception.getLongDescription());
+        LoadingPopup.close();
+        p.show();
+    }
+
+
+
+
+
+
+}
\ No newline at end of file


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStyleLayout.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.common;
 /*
  * 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.
@@ -22,18 +22,17 @@
 import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
 
 /**
  * This form style class is to be extended to provide
  * "form style" dialogs (eg in a popup).
- * 
+ *
  * @author Michael Neale
  */
 public class FormStyleLayout extends DirtyableComposite {
-    
+
     private DirtyableFlexTable layout = new DirtyableFlexTable();
     private FlexCellFormatter formatter = layout.getFlexCellFormatter();
     private int numInLayout = 0;
@@ -45,12 +44,12 @@
         addHeader( image, title );
         initWidget( layout );
     }
-    
+
     /** This has no header */
     public FormStyleLayout() {
         initWidget( layout );
     }
-    
+
     /**
      * Clears the layout table.
      */
@@ -64,7 +63,7 @@
      */
     public void addAttribute(String lbl,
                              Widget editor) {
-        HTML label = new HTML("<b>" + lbl + "</b>");
+        HTML label = new HTML("<small>" + lbl + "</small>");
         layout.setWidget( numInLayout, 0, label );
         formatter.setAlignment( numInLayout, 0, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_TOP );
         layout.setWidget( numInLayout, 1, editor );
@@ -73,13 +72,7 @@
         numInLayout++;
     }
 
-    public void addWidget(Widget editor) {
-        layout.setWidget( numInLayout, 1, editor );
-        formatter.setAlignment( numInLayout, 1, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP );
-        numInLayout++;
-    }
 
-
     /** Adds a widget that takes up a whole row. */
     public void addRow(Widget w) {
         layout.setWidget( numInLayout, 0, w);
@@ -91,7 +84,7 @@
      * Adds a header at the top.
      */
     protected void addHeader(String image, String title) {
-        Label name = new Label(title);
+        HTML name = new HTML("<small><b>" + title + "</b></small>");
         name.setStyleName( "resource-name-Label" );
         doHeader( image, name );
     }
@@ -102,26 +95,30 @@
         layout.setWidget( 0, 1, title );
         numInLayout++;
     }
-    
-    
-    
+
+
+
     protected void addHeader(String image, String title, Widget titleIcon) {
-        Label name = new Label(title);
+    	HTML name = new HTML("<small><b>" + title + "</b></small>");
         name.setStyleName( "resource-name-Label" );
         HorizontalPanel horiz = new HorizontalPanel();
         horiz.add( name );
         horiz.add( titleIcon );
         doHeader( image, horiz );
-        
+
     }
-    
+
     public void setFlexTableWidget(int row, int col, Widget widget){
         layout.setWidget( row, col, widget );
     }
-    
+
     public boolean isDirty() {
         return layout.hasDirty();
-    } 
+    }
 
+    public int getNumAttributes() {
+    	return numInLayout;
+    }
 
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.common;
 /*
  * 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.
@@ -17,45 +17,92 @@
 
 
 
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.widgets.LayoutDialog;
+import com.gwtext.client.widgets.LayoutDialogConfig;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.ContentPanel;
+import com.gwtext.client.widgets.layout.LayoutRegionConfig;
 
 /**
- * This builds on the FormStyleLayout for providing common popup features in a 
+ * This builds on the FormStyleLayout for providing common popup features in a
  * columnar form layout, with a title and a large (ish) icon.
- * 
+ *
  * @author Michael Neale
  */
-public class FormStylePopup extends PopupPanel {
+public class FormStylePopup {
 
-    
+
     private FormStyleLayout form;
- 
+	private LayoutDialog dialog;
+	private String title;
+
+	private Boolean shadow;
+	private Integer width;
+	private Integer height;
+
     public FormStylePopup(String image,
-                          String title) {
-        super( true );
+                          final String title) {
+
         form = new FormStyleLayout( image, title );
-        this.setStyleName( "ks-popups-Popup" );
+        this.title = title;
 
-        Image close = new ImageButton("images/close.gif");
-        close.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                hide();                
-            }            
-        });
+    }
 
-        form.setFlexTableWidget( 0, 2, close );
-        add( form );
-        
+    public FormStylePopup(String image, final String title, Integer width, Integer height, Boolean shadow) {
+    	this(image, title);
+    	this.shadow = shadow;
+    	this.height = height;
+    	this.width = width;
     }
 
+
+
     public void addAttribute(String label, Widget wid) {
         form.addAttribute( label, wid );
     }
-    
+
     public void addRow(Widget wid) {
         form.addRow( wid );
     }
+
+    public void hide() {
+    	this.dialog.destroy();
+    }
+
+
+
+	public void show() {
+		LayoutRegionConfig center = new LayoutRegionConfig() {
+    	    {
+    	        setAutoScroll(true);
+    	        setAlwaysShowTabs(false);
+    	    }
+    	};
+
+
+    	dialog = new LayoutDialog(new LayoutDialogConfig() {
+    	    {
+    	        setModal(true);
+    	        setWidth((width == null)? 500 : width.intValue());
+    	        setHeight((height == null)? form.getNumAttributes() * 40 + 100 : height.intValue());
+    	        setShadow((shadow == null)? true : shadow.booleanValue());
+    	        setResizable(true);
+    	        setClosable(true);
+    	        setProxyDrag(true);
+    	        setTitle(title);
+    	    }
+    	}, center);
+
+
+    	final BorderLayout layout = dialog.getLayout();
+
+    	ContentPanel cp = new ContentPanel();
+    	layout.add(cp);
+
+
+    	cp.add(form);
+
+		this.dialog.show();
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/GenericCallback.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -22,6 +22,11 @@
 
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.HTML;
+import com.gwtext.client.widgets.LayoutDialog;
+import com.gwtext.client.widgets.LayoutDialogConfig;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.ContentPanel;
+import com.gwtext.client.widgets.layout.LayoutRegionConfig;
 
 /**
  * This is a generic call back that handles errors (very simply).
@@ -46,11 +51,27 @@
 
 
     public static void showSessionExpiry() {
-        FormStylePopup pop = new FormStylePopup("images/warning-large.png", "Session expired");
-        pop.addRow( new HTML("<i>Your session expired due to inactivity.</i>" +
-                "&nbsp;&nbsp;&nbsp;Please <a href='/drools-jbrms/'>[Log in].</a>") );
-        pop.setPopupPosition( 40, 40 );
-        pop.show();
+
+
+    	final LayoutDialog dialog = new LayoutDialog(new LayoutDialogConfig() {
+    		{
+    			setTitle("Session expired");
+    			setModal(true);
+    			setWidth(500);
+    			setHeight(300);
+    			setShadow(true);
+    			setMinHeight(300);
+    			setMinHeight(300);
+    		}
+    	}, new LayoutRegionConfig());
+
+    	//add content to the center region
+    	BorderLayout layout = dialog.getLayout();
+    	ContentPanel contentPanel = new ContentPanel();
+    	contentPanel.add(new HTML("<i>Your session expired due to inactivity.</i>" +
+                "&nbsp;&nbsp;&nbsp;Please <a href='/drools-jbrms/'>[Log in].</a>"));
+    	layout.add(contentPanel);
+    	dialog.show();
         LoadingPopup.close();
 
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/InfoPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/InfoPopup.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/InfoPopup.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.common;
 /*
  * 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.
@@ -25,7 +25,7 @@
 
 /**
  * This is handy for in-place context help.
- * 
+ *
  * @author Michael Neale
  */
 public class InfoPopup extends Composite {
@@ -37,7 +37,7 @@
             public void onClick(Widget w) {
                 final FormStylePopup pop = new FormStylePopup("images/information.gif", title);
                 pop.addRow( new Lbl(message, "small-Text") );
-                pop.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+
                 pop.show();
             }
         } );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/LoadingPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/LoadingPopup.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/LoadingPopup.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -17,6 +17,7 @@
 
 
 
+import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
@@ -24,33 +25,21 @@
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.widgets.MessageBox;
+import com.gwtext.client.widgets.MessageBoxConfig;
 
 
 /**
  * Generic "busy" dialog popup.
  * This is a lazy singleton, only really need one to be shown at time.
  */
-public class LoadingPopup extends PopupPanel {
+public class LoadingPopup  {
 
     public static LoadingPopup instance = null;
 
-    Label errorMessage = new Label();
-    Panel panel = new HorizontalPanel();
-    Image ok = new Image("images/close.gif");
 
-    public LoadingPopup() {
-        super(false);
-        panel.add( errorMessage );
-        panel.add( ok );
-        panel.add( new Image("images/searching.gif") );
-        ok.addClickListener( new ClickListener() {
-            public void onClick(Widget arg0) {
-                hide();
-            }
-        });
-        this.add( panel );
-        this.setPopupPosition( 0, 0 );
-        setStyleName( "loading-Popup" );
+
+    private LoadingPopup() {
     }
 
 
@@ -58,14 +47,10 @@
      * Close the single instance of this dialog...
      */
     public static void close() {
-        getInstance().hide();
+        MessageBox.hide();
     }
 
 
-    public void hide() {
-        errorMessage.setText( "" );
-        super.hide();
-    }
 
     public static LoadingPopup getInstance() {
         if (instance == null) {
@@ -75,11 +60,16 @@
     }
 
     /** Convenience method to popup the message. */
-    public static void showMessage(String message) {
-        LoadingPopup p = getInstance();
+    public static void showMessage(final String message) {
+    	MessageBox.show(new MessageBoxConfig() {
+    		{
 
-        p.errorMessage.setText( message );
-        p.show();
+    			setTitle("Please wait...");
+
+    			setMsg(message);
+    			setClosable(true);
+    		}
+    	});
     }
 
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/PrettyFormLayout.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/PrettyFormLayout.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/PrettyFormLayout.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,119 @@
+package org.drools.brms.client.common;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.util.DOMUtil;
+import com.gwtext.client.widgets.form.Form;
+import com.gwtext.client.widgets.form.FormConfig;
+
+/**
+ * Uses ext forms to do a prettier layout.
+ *
+ * @author Michael Neale
+ */
+public class PrettyFormLayout extends Composite {
+
+	private VerticalPanel layout = new VerticalPanel();
+	private FlexTable	currentTable;
+	private String sectionName;
+
+	public PrettyFormLayout() {
+        layout.setWidth("100%");
+		initWidget(layout);
+	}
+
+	public void startSection() {
+		this.currentTable = new FlexTable();
+	}
+
+	public void startSection(String title) {
+		startSection();
+		this.sectionName = title;
+	}
+
+	public void clear() {
+		this.layout.clear();
+	}
+
+	public void addHeader(String img, String name, Image edit) {
+		HorizontalPanel h = new HorizontalPanel();
+		h.add(new Image(img));
+		h.add(new Label(name));
+		if (edit != null) h.add(edit);
+
+
+		Form f = newForm(null);
+		String id = Ext.generateId();
+		f.container(id);
+		f.end();
+		f.render();
+		DOMUtil.convertDivToPanel(id).add(h);
+
+		layout.add(f);
+	}
+
+	public void addHeader(String img, Widget content) {
+		HorizontalPanel h = new HorizontalPanel();
+		h.add(new Image(img));
+		h.add(content);
+		Form f = newForm(null);
+		String id = Ext.generateId();
+		f.container(id);
+		f.end();
+		f.render();
+		DOMUtil.convertDivToPanel(id).add(h);
+
+		layout.add(f);
+	}
+
+	private Form newForm(final String hdr) {
+		return new Form(new FormConfig() {
+			{
+        		setWidth("100%");
+        		setSurroundWithBox(true);
+        		if (hdr != null) {
+        			setHeader(hdr);
+        		}
+			}
+		});
+	}
+
+    public void endSection() {
+
+		Form f = newForm(this.sectionName);
+
+		String id = Ext.generateId();
+		f.container(id);
+		f.end();
+		f.render();
+
+		FlowPanel fp = DOMUtil.convertDivToPanel(id);
+		fp.add(this.currentTable);
+		this.layout.add(f);
+		this.sectionName = null;
+	}
+
+	public void addRow(final Widget versionBrowser) {
+    	int i = currentTable.getRowCount();
+    	currentTable.setWidget(i, 0, versionBrowser);
+    	currentTable.getFlexCellFormatter().setColSpan(i, 0, 2);
+	}
+
+
+	public void addAttribute(String lbl, final Widget categories) {
+		int i = this.currentTable.getRowCount();
+		currentTable.setWidget(i, 0, new Label(lbl));
+		currentTable.setWidget(i, 1, categories);
+		currentTable.getFlexCellFormatter().setHorizontalAlignment(i, 0, HasHorizontalAlignment.ALIGN_RIGHT);
+	}
+
+
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/RulePackageSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/RulePackageSelector.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/RulePackageSelector.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -22,6 +22,8 @@
 import org.drools.brms.client.rpc.PackageConfigData;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.ListBox;
@@ -38,8 +40,19 @@
     public RulePackageSelector() {
         packageList = new ListBox();
 
-        RepositoryServiceFactory.getService().listPackages( new GenericCallback() {
+        DeferredCommand.addCommand(new Command() {
+			public void execute() {
+		        loadPackageList();
+			}
+        });
 
+
+        initWidget( packageList );
+    }
+
+	private void loadPackageList() {
+		RepositoryServiceFactory.getService().listPackages( new GenericCallback() {
+
             public void onSuccess(Object o) {
                 PackageConfigData[] list = (PackageConfigData[]) o;
 
@@ -54,11 +67,8 @@
             }
 
         });
+	}
 
-
-        initWidget( packageList );
-    }
-
     /**
      * Returns the selected package.
      */

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/BRMSContentManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/BRMSContentManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/BRMSContentManager.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,62 @@
+package org.drools.brms.client.explorer;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.core.UpdateManager;
+import com.gwtext.client.widgets.layout.ContentPanel;
+import com.gwtext.client.widgets.layout.event.ContentPanelListenerAdapter;
+import com.gwtext.client.widgets.tree.TreeNode;
+
+public abstract class BRMSContentManager {
+
+	private boolean init = false;
+	protected ContentPanel[] panels;
+
+	public ContentPanel[] getPanels() {
+		if (!init) {
+			init = true;
+			setup();
+		}
+		return panels;
+	}
+
+	public abstract void setup();
+
+	protected VerticalPanel createPanel() {
+		VerticalPanel vp = new VerticalPanel();
+		vp.setSpacing(15);
+		return vp;
+	}
+
+	protected ContentPanel getUrlContentPanel(String label, String sourceUrl) {
+		ContentPanel panel = new ContentPanel(Ext.generateId(), label);
+
+		final UpdateManager updateManager = panel.getUpdateManager();
+		updateManager.setDefaultUrl(sourceUrl);
+		updateManager.setLoadScripts(true);
+		updateManager.setDisableCaching(false);
+
+		panel.addContentPanelListener(new ContentPanelListenerAdapter() {
+			public void onActivate(final ContentPanel cp) {
+				Timer t = new Timer() {
+					public void run() {
+						if (cp.getEl().isVisible()) {
+							updateManager.refresh();
+							cp.purgeListeners();
+						}
+					}
+				};
+				t.schedule(1000);
+			}
+		});
+		return panel;
+	}
+
+	public static String getScreenName(TreeNode node, String name) {
+		TreeNode parentNode = (TreeNode) node.getParentNode();
+		return (parentNode == null || parentNode.getParentNode() == null) ? name
+				: getScreenName(parentNode, parentNode.getText() + ">" + name);
+	}
+
+}
\ No newline at end of file


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

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerLayoutManager.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,531 @@
+package org.drools.brms.client.explorer;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.drools.brms.client.LoggedInUserInfo;
+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 org.drools.brms.client.common.ErrorPopup;
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.packages.PackageManagerView;
+import org.drools.brms.client.packages.SuggestionCompletionCache;
+import org.drools.brms.client.rpc.PackageConfigData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.client.ruleeditor.NewAssetWizard;
+import org.drools.brms.client.ruleeditor.RuleViewer;
+import org.drools.brms.client.rulelist.AssetItemGrid;
+import org.drools.brms.client.rulelist.AssetItemGridDataLoader;
+import org.drools.brms.client.rulelist.EditItemEvent;
+import org.drools.brms.client.rulelist.QuickFindWidget;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.DockPanel;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.data.Node;
+import com.gwtext.client.data.NodeTraversalCallback;
+import com.gwtext.client.util.DelayedTask;
+import com.gwtext.client.util.Format;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ButtonConfig;
+import com.gwtext.client.widgets.QuickTips;
+import com.gwtext.client.widgets.TabPanel;
+import com.gwtext.client.widgets.TabPanelItem;
+import com.gwtext.client.widgets.Toolbar;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.event.TabPanelItemListener;
+import com.gwtext.client.widgets.event.TabPanelItemListenerAdapter;
+import com.gwtext.client.widgets.event.TabPanelListener;
+import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
+import com.gwtext.client.widgets.form.Field;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.ContentPanel;
+import com.gwtext.client.widgets.layout.LayoutRegion;
+import com.gwtext.client.widgets.layout.LayoutRegionConfig;
+import com.gwtext.client.widgets.layout.event.ContentPanelListener;
+import com.gwtext.client.widgets.layout.event.ContentPanelListenerAdapter;
+import com.gwtext.client.widgets.tree.AsyncTreeNode;
+import com.gwtext.client.widgets.tree.AsyncTreeNodeConfig;
+
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.TreeNodeConfig;
+import com.gwtext.client.widgets.tree.TreePanel;
+import com.gwtext.client.widgets.tree.TreePanelConfig;
+import com.gwtext.client.widgets.tree.XMLTreeLoader;
+import com.gwtext.client.widgets.tree.XMLTreeLoaderConfig;
+import com.gwtext.client.widgets.tree.event.TreeNodeListener;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+import com.gwtext.client.widgets.tree.event.TreePanelListener;
+import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
+
+public class ExplorerLayoutManager {
+
+    private Map screens = new HashMap();
+
+    private BorderLayout layout;
+    private boolean packagesLoaded = false;
+
+    ExplorerViewCenterPanel centertabbedPanel;
+
+	private VerticalPanel packagesPanel;
+
+    public BorderLayout getBaseLayout() {
+        return layout;
+    }
+
+    public ExplorerLayoutManager(LoggedInUserInfo uif) {
+        Field.setMsgTarget("side");
+        QuickTips.init();
+
+        layout = createBorderLayout();
+
+        centertabbedPanel = new ExplorerViewCenterPanel();
+
+        ContentPanel ncp = new ContentPanel("north", "North Title");
+
+
+        // setup the main / center panel
+        ContentPanel centerPanel = new ContentPanel("center-panel");
+        /*
+        VerticalPanel contentPanel = new VerticalPanel();
+        contentPanel.setWidth("100%");
+        contentPanel.setHeight("100%");
+
+        contentPanel.add(centertabbedPanel);
+        */
+        centerPanel.add(centertabbedPanel);
+
+        layout.add(LayoutRegionConfig.CENTER, centerPanel);
+
+        DockPanel dock = new DockPanel();
+        dock.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);
+        dock.add(new HTML("<div class='headerBarblue'><img src='images/hdrlogo_drools50px.gif' /></div>"),DockPanel.WEST);
+
+        dock.add(uif, DockPanel.EAST);
+
+        dock.setStyleName("headerBarblue");
+
+        dock.setWidth("100%");
+        ncp.add(dock);
+
+
+        layout.add(LayoutRegionConfig.NORTH, ncp);
+
+
+        // add a navigation tree menu
+
+        final TabPanel tp = new TabPanel("tab-1");
+        tp.setWidth("100%");
+        tp.setHeight("100%");
+
+        TabPanelItem tpCategory = tp.addTab("tpi1", "Rules", false);
+        TabPanelItem tpPackageExplorer = tp.addTab("tpi2", "Packages", false);
+        TabPanelItem tpArchivedAssetManager = tp.addTab("tpi3", "Deployment",
+                false);
+        TabPanelItem tpBackupManager = tp.addTab("tpi4", "Admin", false);
+
+        VerticalPanel vp1 = new VerticalPanel();
+        packagesPanel = new VerticalPanel();
+        VerticalPanel vp3 = new VerticalPanel();
+        VerticalPanel vp4 = new VerticalPanel();
+
+        // vp1.add(categoriesExplorer(layout, "drools-rules"));
+
+        /** **************************** */
+        ContentPanel baseCategory = new ContentPanel("eg-explorer",
+                "BRMS Explorer");
+        baseCategory.setWidth(" 100%");
+
+        TreePanel categoryTree = basicTreeStructure(ExplorerNodeConfig
+                .getRulesStructure(), new TreePanelListenerAdapter() {
+
+            public void onClick(final TreeNode self, EventObject e) {
+
+                //this refreshes the list.
+                if (self.getAttribute("id").equals(
+                        ExplorerNodeConfig.CATEGORY_ID)) {
+                    self.getParentNode().replaceChild(
+                            ExplorerNodeConfig.getCategoriesStructure(), self);
+                } else if (self.getAttribute("id").equals(
+                        ExplorerNodeConfig.STATES_ID)) {
+                    self.getParentNode().replaceChild(
+                            ExplorerNodeConfig.getStatesStructure(), self);
+                } else if (self.getAttribute("id").equals("FIND")) {
+                	centertabbedPanel.openFind();
+                } else {
+
+                    final String key = (String) self.getUserObject();
+                    final boolean isState = key.startsWith("-");
+
+                    if (!centertabbedPanel.showIfOpen(key)) {
+                        AssetItemGrid list = new AssetItemGrid(new EditItemEvent() {
+                            public void open(String uuid) {
+                                centertabbedPanel.openAsset( uuid);
+                            }
+                        },
+                        AssetItemGrid.RULE_LIST_TABLE_ID,
+                        new AssetItemGridDataLoader() {
+                            public void loadData(int skip, int numberOfRows, GenericCallback cb) {
+                            	if (isState) {
+                            		RepositoryServiceFactory.getService().loadRuleListForState(key.substring(1) , skip, numberOfRows, cb);
+                            	} else {
+                            		RepositoryServiceFactory.getService().loadRuleListForCategories(key, skip, numberOfRows, cb);
+                            	}
+                            }
+                        }
+                        );
+
+                        centertabbedPanel.addTab(((isState) ?"State: " : "Category: ") + self.getText(), true, list, key);
+                    }
+
+                }
+
+            }
+        });
+        centertabbedPanel.openFind();
+
+        baseCategory.add(categoryTree);
+        Toolbar tb = new Toolbar(Ext.generateId());
+        vp1.add(tb);
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+                setText("New rule");
+                setButtonListener(new ButtonListenerAdapter() {
+                    public void onClick(Button button, EventObject e) {
+                        NewAssetWizard n = new NewAssetWizard(new EditItemEvent() {
+                            public void open(String key) {
+                               centertabbedPanel.openAsset(key);
+                            }
+                        }, true, null, "New rule" );
+                        n.show();
+                    }
+                });
+        	}
+        }));
+        vp1.add(baseCategory);
+        vp1.setWidth("100%");
+
+
+        /** **************************** */
+
+
+
+
+        vp3.add(createExamplesExplorer(layout, "drools-deployment"));
+
+        /** ****************** */
+        ContentPanel cp = new ContentPanel("eg-explorer", "BRMS Explorer");
+        cp.setWidth(" 100%");
+
+        TreePanel adminTree = basicTreeStructure(ExplorerNodeConfig
+                .getAdminStructure(), new TreePanelListenerAdapter() {
+            public void onClick(TreeNode self, EventObject e) {
+
+
+                int id = Integer.parseInt(self.getAttribute("id"));
+                switch (id) {
+                case 0:
+                    centertabbedPanel.addTab("Category Manager", true, new CategoryManager(), "catman");
+                    break;
+                case 1:
+                    centertabbedPanel.addTab("Archived Manager", true, new ArchivedAssetManager(), "archman");
+                    break;
+
+                case 2:
+                    centertabbedPanel.addTab("State Manager", true, new StateManager(), "stateman");
+                    break;
+                case 3:
+                    centertabbedPanel.addTab("Backup Manager", true, new BackupManager(), "bakman");
+                    break;
+
+                case 4:
+                    break;
+                }
+
+            }
+        });
+
+        cp.add(adminTree);
+        vp4.add(cp);
+
+        /** ****************** */
+
+        tpCategory.setContent(vp1);
+
+
+        tpPackageExplorer.setContent(packagesPanel);
+        tpArchivedAssetManager.setContent(vp3);
+        tpBackupManager.setContent(vp4);
+        tpPackageExplorer.addTabPanelItemListener(new TabPanelItemListenerAdapter() {
+			public void onActivate(TabPanelItem tab) {
+        		if (!packagesLoaded) {
+        			packagesPanel.add(packageExplorer(centertabbedPanel));
+        			packagesLoaded = true;
+        		}
+        	}
+        });
+
+
+        tp.activate(0);
+
+
+        ContentPanel tree = new ContentPanel();
+        tree.add(tp);
+        layout.add(LayoutRegionConfig.WEST, tree);
+    }
+
+
+    private TreePanel basicTreeStructure(TreeNode basenode, TreePanelListenerAdapter listener) {
+
+        TreePanel adminTreePanel = genericExplorerWidget(basenode);
+
+        adminTreePanel.addTreePanelListener(listener);
+        return adminTreePanel;
+    }
+
+    private BorderLayout createBorderLayout() {
+
+        LayoutRegionConfig north = new LayoutRegionConfig();
+        north.setSplit(false);
+        north.setInitialSize(50);
+        north.setTitlebar(false);
+        north.setAutoScroll(false);
+
+        LayoutRegionConfig west = new LayoutRegionConfig();
+        west.setSplit(true);
+        west.setInitialSize(300);
+        west.setMinSize(175);
+        west.setMaxSize(400);
+        west.setTitlebar(true);
+        west.setCollapsible(true);
+        west.setAnimate(true);
+        west.setCollapsed(false);
+        west.setAutoScroll(false);
+
+
+        LayoutRegionConfig center = new LayoutRegionConfig();
+        center.setTitlebar(false);
+        center.setAutoScroll(true);
+        center.setTabPosition("top");
+
+        return new BorderLayout("100%", "100%", north, null, west, null, center );
+    }
+
+    private ContentPanel createExamplesExplorer(final BorderLayout layout,
+            final String menuconfig) {
+
+        // create and configure the main tree
+        final TreePanel menuTree = new TreePanel("eg-tree",
+                new TreePanelConfig() {
+                    {
+                        setAnimate(true);
+                        setEnableDD(true);
+                        setContainerScroll(true);
+                        setRootVisible(true);
+                    }
+                });
+
+
+
+        final XMLTreeLoader loader = new XMLTreeLoader(
+                new XMLTreeLoaderConfig() {
+                    {
+
+                        setDataUrl("site-nav.xml");
+                        setMethod("get");
+                        setRootTag(menuconfig);
+                        setFolderTag("node");
+                        setFolderTitleMapping("@title");
+                        setLeafTitleMapping("@title");
+                        setLeafTag("leaf");
+                    }
+                });
+
+        AsyncTreeNode root = new AsyncTreeNode("", new AsyncTreeNodeConfig() {
+            {
+                setLoader(loader);
+            }
+        });
+
+        // setup a tree listener that reads the content panel associated with
+        // the
+        // node that is clicked and then displays it in the main / center panel
+        TreePanelListener treePanelListener = new TreePanelListenerAdapter() {
+            public void onClick(TreeNode self, EventObject e) {
+                String screenName = BRMSContentManager.getScreenName(self, self
+                        .getText());
+                if (screens.containsKey(screenName)) {
+                    BRMSContentManager panel = (BRMSContentManager) screens
+                            .get(screenName);
+                    LayoutRegion region = layout
+                            .getRegion(LayoutRegionConfig.CENTER);
+                    region.removeAll(true);
+                    ContentPanel[] panels = panel.getPanels();
+                    for (int i = 0; i < panels.length; i++) {
+                        ContentPanel contentPanel = panels[i];
+                        layout.add(contentPanel);
+                    }
+                    region.showPanel(0);
+                }
+                System.out.println("Clicked on Node: " + self.getText());
+                System.out.println("Clicked on Node: "
+                        + self.getAttribute("id"));
+            }
+        };
+
+        // register listener
+        menuTree.addTreePanelListener(treePanelListener);
+
+        menuTree.setRootNode(root);
+        // menuTree.getRootNode().appendChild( child )
+        menuTree.render();
+
+        // loads tree data asynchronously
+        root.expand();
+
+        menuTree.expandAll();
+
+        ContentPanel cp = new ContentPanel("eg-explorer", "BRMS Explorer");
+
+        cp.setWidth(" 100%");
+        cp.add(menuTree);
+
+        return cp;
+    }
+
+    /**
+     * Build the package explorer panel.
+     */
+    private ContentPanel packageExplorer(
+            final ExplorerViewCenterPanel tabPanel) {
+
+        final ContentPanel cp = new ContentPanel(Ext.generateId(), "Package Explorer");
+        cp.setWidth(" 100%");
+
+        TreeNode root = new TreeNode("Packages");
+        root.setAttribute("icon", "images/silk/chart_organisation.gif");
+
+		final TreePanel panel = genericExplorerWidget(root);
+        cp.add(panel);
+        loadPackages(root);
+
+
+        TreePanelListener treePanelListener = new TreePanelListenerAdapter() {
+            public void onClick(TreeNode node, EventObject e) {
+        		if (node.getUserObject() instanceof PackageConfigData) {
+        			String uuid = ((PackageConfigData) node.getUserObject()).uuid;
+		        			centertabbedPanel.openPackageEditor(uuid, new Command() {
+								public void execute() {
+									//refresh the package tree.
+									packagesPanel.remove(1);
+									packagesPanel.add(packageExplorer(centertabbedPanel));
+								}
+		        			});
+	    		} else if (node.getUserObject() instanceof Object[] ){
+        			Object[] uo = (Object[]) node.getUserObject();
+        			final String[] fmts = (String[]) uo[0];
+        			final PackageConfigData pc = (PackageConfigData) node.getParentNode().getUserObject();
+        			String key = key(fmts, pc);
+        			if (!centertabbedPanel.showIfOpen(key)) {
+                        AssetItemGrid list = new AssetItemGrid(new EditItemEvent() {
+                            public void open(String uuid) {
+                                centertabbedPanel.openAsset(uuid);
+                            }
+                        },
+                        AssetItemGrid.RULE_LIST_TABLE_ID,
+                        new AssetItemGridDataLoader() {
+                            public void loadData(int skip, int numRows, GenericCallback cb) {
+                            	RepositoryServiceFactory.getService().listAssets(pc.uuid, fmts, skip, numRows, cb);
+                            }
+                        }
+                        );
+
+        				tabPanel.addTab(uo[1] + " [" + pc.name + "]", true, list, key);
+        			}
+        		}
+            }
+
+
+
+
+            public void onCollapse(final TreeNode node) {
+            	if (node.getText().equals("Packages")) {
+            		Node[] children = node.getChildNodes();
+	            	for (int i = 0; i < children.length; i++) {
+						node.removeChild(children[i]);
+					}
+	            	loadPackages(node);
+            	}
+            }
+
+
+        };
+        // register listener
+        panel.addTreePanelListener(treePanelListener);
+        panel.render();
+
+        return cp;
+    }
+
+	private void loadPackages(final TreeNode root) {
+		RepositoryServiceFactory.getService().listPackages(
+                new GenericCallback() {
+                    public void onSuccess(Object data) {
+                        PackageConfigData value[] = (PackageConfigData[]) data;
+                        for (int i = 0; i < value.length; i++) {
+                            root.appendChild(loadPackage(root, value[i]));
+                        }
+                        root.expand();
+                    }
+                });
+	}
+
+	private String key(String[] fmts,
+			PackageConfigData userObject) {
+		String key = userObject.uuid;
+		for (int i = 0; i < fmts.length; i++) {
+			key = key + fmts[i];
+		}
+		return key;
+	}
+
+	private TreeNode loadPackage(final TreeNode root,
+			PackageConfigData packagedata) {
+		TreeNode pn = ExplorerNodeConfig.getPackageItemStructure(packagedata.name, packagedata.uuid);
+		pn.setUserObject(packagedata);
+		return pn;
+	}
+
+    private TreePanel genericExplorerWidget(final TreeNode childNode) {
+        // create and configure the main tree
+        final TreePanel menuTree = new TreePanel(Ext.generateId(),
+                new TreePanelConfig() {
+                    {
+                        setAnimate(true);
+                        setEnableDD(true);
+                        setContainerScroll(true);
+                        setRootVisible(true);
+                    }
+                });
+
+        menuTree.setRootNode(childNode);
+        menuTree.render();
+
+        menuTree.expandAll();
+
+        return menuTree;
+    }
+
+
+
+}


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

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerNodeConfig.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,213 @@
+package org.drools.brms.client.explorer;
+
+import org.drools.brms.client.common.AssetFormats;
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+
+import com.gwtext.client.data.Node;
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.TreeNodeConfig;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+
+/*
+ * This class contains static node config for BRMS' explorer widget
+ */
+public class ExplorerNodeConfig {
+
+	public static String CATEGORY_ID = "category";
+	public static String STATES_ID = "states";
+
+	public static TreeNode getPackageItemStructure(String packageName, String uuid) {
+
+		TreeNode pkg = new TreeNode(packageName);
+		pkg.setAttribute("uuid", uuid);
+		pkg.setAttribute("icon", "images/package.gif");
+
+        pkg.appendChild( makeItem( "Business rule assets",
+                "images/rule_asset.gif", AssetFormats.BUSINESS_RULE_FORMATS ) );
+        pkg.appendChild( makeItem( "Technical rule assets",
+                "images/technical_rule_assets.gif", new String[]{AssetFormats.DRL} )  );
+		pkg.appendChild( makeItem( "Functions",
+		                "images/function_assets.gif", new String[]{AssetFormats.FUNCTION} ) );
+		pkg.appendChild( makeItem( "DSL configurations",
+		                "images/dsl.gif",
+
+		                               new String[]{AssetFormats.DSL} ) );
+		pkg.appendChild( makeItem( "Model",
+		                "images/model_asset.gif",
+
+		                               new String[]{AssetFormats.MODEL} ) ) ;
+
+		pkg.appendChild( makeItem( "Rule Flows",
+		 "images/ruleflow_small.gif",
+
+		                new String[]{AssetFormats.RULE_FLOW_RF} ) ) ;
+
+		pkg.appendChild( makeItem( "Enumerations",
+		 "images/enumeration.gif",
+
+		                new String[]{AssetFormats.ENUMERATION} ) ) ;
+
+
+		pkg.appendChild(makeItem( "Test Scenarios",
+		                "images/test_manager.gif",
+
+		                               new String[]{AssetFormats.TEST_SCENARIO} ) ) ;
+
+
+		return pkg;
+	}
+
+	private static TreeNode makeItem(final String txt, final String img,
+			final String[] formats) {
+		TreeNode tn = new TreeNode(new TreeNodeConfig() {
+			{
+				setIcon(img);
+				setText(txt);
+
+			}
+		});
+		tn.setUserObject(new Object[] {formats, txt});
+		return tn;
+	}
+
+	public static TreeNode getAdminStructure() {
+
+		TreeNode adminNode = new TreeNode("Admin");
+		adminNode.setAttribute("icon", "images/managment.gif");
+
+		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
+
+		for (int i = 0; i < adminStructure.length; i++) {
+
+			String[] packageData = adminStructure[i];
+			TreeNode localChildNode = new TreeNode(packageData[0]);
+			localChildNode.setAttribute("icon", packageData[1]);
+			localChildNode.setAttribute("id", String.valueOf(i));
+
+			adminNode.appendChild(localChildNode);
+		}
+		return adminNode;
+	}
+
+	public static TreeNode getRulesStructure () {
+
+		//final TreeNode adminNode = new TreeNode("Rules");
+		return new TreeNode(new TreeNodeConfig() {
+			{
+				setText("Rules");
+				setExpanded(true);
+			}
+		}) {
+			{
+				appendChild(new TreeNode(new TreeNodeConfig() {
+					{
+						setIcon("images/find.gif");
+						setId("FIND");
+						setText("Find");
+
+					}
+				}));
+				appendChild(getStatesStructure());
+				appendChild(getCategoriesStructure());
+			}
+
+		};
+
+	}
+
+	public static TreeNode getCategoriesStructure () {
+		final TreeNode treeNode = new TreeNode("Categories");
+		treeNode.setAttribute("icon", "images/silk/chart_organisation.gif");
+		treeNode.setAttribute("id",CATEGORY_ID);
+		doCategoryNode(treeNode, "/");
+		return treeNode;
+	}
+
+	private static void doCategoryNode(final TreeNode treeNode, final String path) {
+		infanticide(treeNode);
+		RepositoryServiceFactory.getService().loadChildCategories(path,
+				new GenericCallback() {
+					public void onSuccess(Object data) {
+						final String value[] = (String[]) data;
+						if (value.length == 0) {
+							infanticide(treeNode);
+						} else {
+							for (int i = 0; i < value.length; i++) {
+
+								final String current = value[i];
+								System.err.println("VALUE: " + current + "(" + i + ")");
+								final TreeNode childNode = new TreeNode( new TreeNodeConfig() {
+									{
+										setIcon("images/category_small.gif");
+										setText(current);
+									}
+								});
+
+								childNode.setUserObject((path.equals("/")) ? current : path + "/" + current);
+								childNode.appendChild(new TreeNode("Please wait..."));
+								childNode.addTreeNodeListener(new TreeNodeListenerAdapter() {
+
+									boolean expanding = false;
+
+
+									public void onExpand(Node node) {
+
+										if (!expanding) {
+											expanding = true;
+											infanticide(childNode);
+											doCategoryNode(childNode, (String) childNode.getUserObject());
+											childNode.expand();
+											expanding = false;
+										}
+									}
+								});
+
+								treeNode.appendChild(childNode);
+							}
+						}
+					}
+
+
+				});
+	}
+
+	private static void infanticide(final TreeNode treeNode) {
+		for (int i = 0; i < treeNode.getChildNodes().length; i++) {
+			treeNode.removeChild(treeNode.getChildNodes()[i]);
+		}
+	}
+
+	public static TreeNode getStatesStructure () {
+
+		final TreeNode treeNode = new TreeNode("States");
+		treeNode.setAttribute("icon", "images/status_small.gif");
+		treeNode.setAttribute("id",STATES_ID);
+
+
+		RepositoryServiceFactory.getService().listStates(new GenericCallback() {
+			public void onSuccess(Object data) {
+				String value[] = (String[]) data;
+
+
+				for (int i = 0; i < value.length; i++) {
+					TreeNode childNode = new TreeNode(value[i]);
+					childNode.setAttribute("icon", "images/category_small.gif");
+					childNode.setUserObject("-" + value[i]);
+					treeNode.appendChild(childNode);
+				}
+			}
+		});
+
+		return treeNode;
+	}
+
+}
+
+


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

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/explorer/ExplorerViewCenterPanel.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,165 @@
+package org.drools.brms.client.explorer;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.packages.PackageEditor2;
+import org.drools.brms.client.packages.SuggestionCompletionCache;
+import org.drools.brms.client.rpc.PackageConfigData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.client.ruleeditor.RuleViewer;
+import org.drools.brms.client.rulelist.EditItemEvent;
+import org.drools.brms.client.rulelist.QuickFindWidget;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.widgets.TabPanel;
+import com.gwtext.client.widgets.TabPanelItem;
+import com.gwtext.client.widgets.event.TabPanelItemListenerAdapter;
+import com.gwtext.client.widgets.event.TabPanelListener;
+import com.gwtext.client.widgets.layout.ContentPanel;
+
+/**
+ * This is the tab panel manager.
+ * @author Fernando Meyer, Michael Neale
+ */
+public class ExplorerViewCenterPanel extends ContentPanel {
+
+	final TabPanel tp = new TabPanel("tab-2");
+	private int index = 0;
+	private HashMap 	openedTabs = new HashMap();
+
+	public ExplorerViewCenterPanel() {
+
+		super(Ext.generateId());
+
+		tp.setWidth("100%");
+		tp.setHeight("100%");
+
+		tp.autoSizeTabs();
+		tp.setResizeTabs(true);
+
+		add(tp);
+	}
+
+
+	/**
+	 * Add a new tab. Should only do this if have checked showIfOpen to avoid dupes being opened.
+	 * @param tabname The displayed tab name.
+	 * @param closeable If you can close it !
+	 * @param widget The contentx.
+	 * @param key A key which is unique.
+	 */
+	public void addTab (String tabname, boolean closeable, Widget widget, String key) {
+		TabPanelItem localTP = tp.addTab(key, tabname, closeable);
+		SimplePanel sp = new SimplePanel();
+		sp.add(widget);
+
+		localTP.setContent(sp);
+
+
+		localTP.addTabPanelItemListener(new TabPanelItemListenerAdapter() {
+			public void onClose(TabPanelItem tab) {
+				openedTabs.remove(tab.getId());
+			}
+		});
+		tp.activate(tp.getCount()-1);
+		openedTabs.put(key, localTP);
+	}
+
+	/**
+	 * Will open if existing. If not it will return false;
+	 */
+	public boolean showIfOpen(String key) {
+		if (openedTabs.containsKey(key)) {
+			LoadingPopup.close();
+			TabPanelItem tpi = (TabPanelItem) openedTabs.get(key);
+			tpi.activate();
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+
+	public void close(String key) {
+		tp.removeTab(key);
+		openedTabs.remove(key);
+	}
+
+
+    /**
+     * Open an asset if it is not already open.
+     */
+	public void openAsset(
+			final String uuid) {
+		LoadingPopup.showMessage("Loading asset...");
+		if (!showIfOpen(uuid)) {
+			RepositoryServiceFactory.getService().loadRuleAsset(uuid, new GenericCallback() {
+				public void onSuccess(Object data) {
+					final RuleAsset a = (RuleAsset) data;
+					SuggestionCompletionCache.getInstance().doAction(a.metaData.packageName, new Command() {
+						public void execute() {
+							RuleViewer rv = new RuleViewer(a);
+							addTab(a.metaData.name, true, rv, uuid);
+							rv.setCloseCommand(new Command() {
+								public void execute() {
+									close(uuid);
+								}
+							});
+							LoadingPopup.close();
+						}
+					});
+
+				}
+			});
+		}
+
+	}
+
+
+	/**
+	 * Open a package editor if it is not already open.
+	 */
+	public void openPackageEditor(final String uuid, final Command refPackageList) {
+
+		if (!showIfOpen(uuid)) {
+			RepositoryServiceFactory.getService().loadPackageConfig(uuid, new GenericCallback() {
+				public void onSuccess(Object data) {
+					PackageConfigData conf = (PackageConfigData) data;
+					PackageEditor2 ed = new PackageEditor2(conf, new Command() {
+						public void execute() {
+							close(uuid);
+						}
+					},refPackageList, new EditItemEvent() {
+						public void open(String uuid) {
+							openAsset(uuid);
+						}
+					});
+					addTab(conf.name, true, ed, conf.uuid);
+					LoadingPopup.close();
+				}
+			});
+		}
+	}
+
+	public void openFind() {
+		if (!showIfOpen("FIND")) {
+			this.addTab("Find", true, new QuickFindWidget(new EditItemEvent() {
+				public void open(String uuid) {
+					openAsset(uuid);
+				}
+			}), "FIND");
+		}
+	}
+
+
+
+
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionInsertFactWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionInsertFactWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionInsertFactWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -136,7 +136,6 @@
 
     protected void showAddFieldPopup(Widget w) {
         final FormStylePopup popup = new FormStylePopup("images/newex_wiz.gif", "Add a field");
-        popup.setStyleName( "ks-popups-Popup" );
         final ListBox box = new ListBox();
         box.addItem( "..." );
 
@@ -157,9 +156,6 @@
             }
         });
 
-
-
-        popup.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
         popup.show();
 
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionSetFieldWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -138,7 +138,7 @@
 
     protected void showAddFieldPopup(Widget w) {
         final FormStylePopup popup = new FormStylePopup("images/newex_wiz.gif", "Add a field");
-        popup.setStyleName( "ks-popups-Popup" );
+
         final ListBox box = new ListBox();
         box.addItem( "..." );
 
@@ -161,8 +161,6 @@
         });
 
 
-
-        popup.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
         popup.show();
 
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ActionValueEditor.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -175,7 +175,6 @@
         });
 
         form.addAttribute("Formula:", widgets(formula, new InfoPopup("Formula", "A formula is used when values are calculated, or a variable is used.")));
-        form.setPopupPosition(w.getAbsoluteLeft(), w.getAbsoluteTop());
         form.show();
 	}
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/CompositeFactPatternWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.modeldriven.ui;
 /*
  * 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.
@@ -40,8 +40,8 @@
 
 /**
  * This represents a top level CE, like an OR, NOT, EXIST etc...
- * Contains a list of FactPatterns. 
- * 
+ * Contains a list of FactPatterns.
+ *
  * @author Michael Neale
  *
  */
@@ -58,7 +58,7 @@
         this.completions = completions;
         this.pattern = pattern;
         this.modeller = modeller;
- 
+
         this.layout = new DirtyableFlexTable();
         this.layout.setStyleName( "model-builderInner-Background" );
 
@@ -96,7 +96,7 @@
                 showFactTypeSelector( w );
             }
         } );
-        
+
         horiz.add( new Label( HumanReadable.getCEDisplayName( pattern.type ) ) );
         horiz.add( edit );
         horiz.setStyleName( "modeller-composite-Label" );
@@ -115,7 +115,7 @@
             box.addItem( facts[i] );
         }
         box.setSelectedIndex( 0 );
-        
+
         final FormStylePopup popup = new FormStylePopup( "images/new_fact.gif",
                                                          "New fact pattern..." );
         popup.addAttribute( "choose fact type",
@@ -128,17 +128,14 @@
                 popup.hide();
             }
         } );
-        popup.setStyleName( "ks-popups-Popup" );
 
-        popup.setPopupPosition( w.getAbsoluteLeft() - 400,
-                                w.getAbsoluteTop() );
         popup.show();
     }
 
     public boolean isDirty() {
         return layout.hasDirty();
     }
-    
-    
 
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/ConstraintValueEditor.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -339,7 +339,6 @@
         form.addAttribute( "A formula:", widgets( formula, new InfoPopup( "A formula",
                                                                           "A formula is an expression that calculates and returns a value " + ". That value is used to enforce the constraint." ) ) );
 
-        form.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
         form.show();
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/FactPatternWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -269,7 +269,7 @@
     private void showPatternPopupForComposite(Widget w, final CompositeFieldConstraint composite) {
         final FormStylePopup popup = new FormStylePopup( "images/newex_wiz.gif",
                                                          "Add fields to this constraint" );
-        popup.setStyleName( "ks-popups-Popup" );
+
         final ListBox box = new ListBox();
         box.addItem( "..." );
         String[] fields = this.completions.getFieldCompletions( this.pattern.factType );
@@ -313,7 +313,6 @@
         horiz.add( infoComp );
         popup.addAttribute( "Multiple field constraint", horiz );
 
-        popup.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
         popup.show();
 
     }
@@ -324,7 +323,7 @@
     private void showPatternPopup(Widget w) {
         final FormStylePopup popup = new FormStylePopup( "images/newex_wiz.gif",
                                                          "Modify constraints for " + pattern.factType );
-        popup.setStyleName( "ks-popups-Popup" );
+
         final ListBox box = new ListBox();
         box.addItem( "..." );
         String[] fields = this.completions.getFieldCompletions( this.pattern.factType );
@@ -386,7 +385,6 @@
 
         doBindingEditor( popup );
 
-        popup.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
         popup.show();
     }
 
@@ -552,7 +550,7 @@
             }
         } );
         popup.addAttribute( "Variable name", vn );
-        popup.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+
         popup.show();
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -150,10 +150,10 @@
             }
         });
 
-        pop.setStyleName( "ks-popups-Popup" );
 
+
         pop.addAttribute( "Attribute", list );
-        pop.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
+
         pop.show();
     }
 
@@ -242,7 +242,6 @@
                 }
             }
         });
-        popup.setStyleName( "ks-popups-Popup" );
 
         //
         // The list of top level CEs
@@ -288,8 +287,6 @@
             });
             popup.addAttribute( "DSL sentence", dsls );
         }
-
-        popup.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
         popup.show();
 
     }
@@ -303,7 +300,6 @@
     protected void showActionSelector(Widget w) {
         final FormStylePopup popup = new FormStylePopup("images/new_fact.gif", "Add a new action...");
 
-        popup.setStyleName( "ks-popups-Popup" );
 
         //
         // First load up the stuff to do with bound variables or globals
@@ -434,9 +430,6 @@
             });
             popup.addAttribute( "DSL sentence", dsls );
         }
-
-
-        popup.setPopupPosition( Window.getClientWidth()/3, Window.getClientHeight()/3 );
         popup.show();
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/NewPackageWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/NewPackageWizard.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/NewPackageWizard.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -122,7 +122,6 @@
 
         newPackageLayout.addAttribute( "", create );
 
-        setStyleName( "ks-popups-Popup" );
 
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -137,7 +137,7 @@
 	 */
 	public static void showSource(final String content, String name) {
 		FormStylePopup pop = new FormStylePopup("images/view_source.gif",
-				"Viewing source for: " + name);
+				"Viewing source for: " + name, null, new Integer(600), Boolean.FALSE);
 		final TextArea area = new TextArea();
 		area.setVisibleLines(30);
 		area.setWidth("100%");
@@ -145,8 +145,7 @@
 		pop.addRow(area);
 		area.setText(content);
 		area.setEnabled(true);
-		area
-				.setTitle("THIS IS READ ONLY - you may copy and paste, but not edit.");
+		area.setTitle("THIS IS READ ONLY - you may copy and paste, but not edit.");
 
 		area.addKeyboardListener(new KeyboardListener() {
 
@@ -165,8 +164,7 @@
 		});
 
 		LoadingPopup.close();
-		pop.setPopupPosition((DirtyableComposite.getWidth() - pop
-				.getOffsetWidth()) / 2, 100);
+
 		pop.show();
 
 	}
@@ -399,11 +397,6 @@
 						});
 			}
 		});
-
-		form.setWidth("50%");
-
-		form.setPopupPosition((DirtyableComposite.getWidth() - form
-				.getOffsetWidth()) / 2, 100);
 		form.show();
 
 		// form.setPopupPosition( Window.getClientWidth() / 3,

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -44,6 +44,20 @@
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.SimpleStore;
+import com.gwtext.client.widgets.form.ContainerConfig;
+import com.gwtext.client.widgets.form.Field;
+import com.gwtext.client.widgets.form.Form;
+import com.gwtext.client.widgets.form.FormConfig;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.form.TextFieldConfig;
+import com.gwtext.client.widgets.form.event.FieldListener;
+import com.gwtext.client.widgets.form.event.FormListener;
+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.event.GridRowListener;
 
 /**
  * This is the package editor and viewer for package configuration.
@@ -133,7 +147,6 @@
             show.addClickListener( new ClickListener() {
                 public void onClick(Widget w) {
                     ValidationMessageWidget wid = new ValidationMessageWidget(previousResponse.errorHeader, previousResponse.errorMessage);
-                    wid.setPopupPosition( Window.getClientWidth()/4, w.getAbsoluteTop()  );
                     wid.show();
                 }
             } );
@@ -231,8 +244,6 @@
             }
         } );
 
-        pop.setWidth( "40%" );
-        pop.setPopupPosition( Window.getClientWidth() / 3, Window.getClientHeight() / 3 );
         pop.show();
     }
 
@@ -251,10 +262,10 @@
 
         ok.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
-            	if (!PackageNameValidator.validatePackageName(name.getText())) {
-            		Window.alert("Not a valid package name.");
-            		return;
-            	}
+                if (!PackageNameValidator.validatePackageName(name.getText())) {
+                    Window.alert("Not a valid package name.");
+                    return;
+                }
                 RepositoryServiceFactory.getService().copyPackage( conf.name, name.getText(), new GenericCallback() {
                     public void onSuccess(Object data) {
                         refreshCommand.execute();
@@ -265,8 +276,6 @@
             }
         } );
 
-        pop.setWidth( "40%" );
-        pop.setPopupPosition( Window.getClientWidth() / 3, Window.getClientHeight() / 3 );
         pop.show();
 
     }
@@ -394,7 +403,6 @@
         newFactTemplate.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
                 final FactTemplateWizard wiz = new FactTemplateWizard();
-                wiz.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() - 250 );
                 wiz.setOKClick( new Command() {
                     public void execute() {
                         area.setText( area.getText() + "\n" +

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor2.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor2.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor2.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,474 @@
+package org.drools.brms.client.packages;
+/*
+ * 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 java.util.Date;
+
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.common.PrettyFormLayout;
+import org.drools.brms.client.common.StatusChangePopup;
+import org.drools.brms.client.common.ValidationMessageWidget;
+import org.drools.brms.client.rpc.PackageConfigData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.ValidatedResponse;
+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.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the package editor and viewer for package configuration.
+ *
+ * @author Michael Neale
+ */
+public class PackageEditor2 extends PrettyFormLayout {
+
+
+
+    private PackageConfigData conf;
+    private HTML status;
+    protected ValidatedResponse previousResponse;
+	private Command close;
+	private Command refreshPackageList;
+	private EditItemEvent editEvent;
+
+    public PackageEditor2(PackageConfigData data, Command close, Command refreshPackageList, EditItemEvent editEvent) {
+        this.conf = data;
+        this.close = close;
+        this.refreshPackageList = refreshPackageList;
+        this.editEvent = editEvent;
+
+        //setStyleName( "package-Editor" );
+        setWidth( "100%" );
+        refreshWidgets();
+    }
+
+    private void refreshWidgets() {
+        clear();
+
+        startSection("Package name: [" + conf.name + "]");
+
+
+        FlexTable headerWidgets = new FlexTable();
+        headerWidgets.setWidget(0, 0, new HTML("<b>Package name:</b>"));
+        headerWidgets.setWidget(0, 1, new Label(this.conf.name));
+        if (!conf.isSnapshot) {
+
+        	//headerWidgets.setWidget(1, 1, modifyWidgets() );
+        	addAttribute("Modify:", modifyWidgets());
+        }
+
+        endSection();
+
+        //addHeader( "images/package_large.png", headerWidgets );
+
+        startSection("Configuration");
+
+        addRow( warnings() );
+        addAttribute( "Configuration:", header() );
+        addAttribute( "Description:", description() );
+        if (!conf.isSnapshot) {
+            Button save = new Button("Save and validate configuration");
+            save.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {
+                    doSaveAction(null);
+                }
+            } );
+        	addAttribute("", save);
+        }
+
+        endSection();
+
+        startSection("Build and validate");
+
+        addRow(new PackageBuilderWidget(this.conf, editEvent));
+
+        endSection();
+
+        startSection("Information");
+
+        addAttribute( "Last modified:", new Label(getDateString(conf.lastModified))  );
+        addAttribute( "Last contributor:", new Label(this.conf.lasContributor));
+        addAttribute( "Date created:", new Label(getDateString(this.conf.dateCreated)));
+
+        status = new HTML();
+        HorizontalPanel statusBar = new HorizontalPanel();
+        Image editState = new ImageButton("images/edit.gif");
+        editState.setTitle( "Change status." );
+        editState.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showStatusChanger(w);
+            }
+
+        } );
+        statusBar.add( status );
+
+        if (!this.conf.isSnapshot) {
+            statusBar.add( editState );
+        }
+
+        setState(conf.state);
+        addAttribute("Status:", statusBar);
+
+
+
+        endSection();
+
+    }
+
+
+
+	private String getDateString(Date d) {
+		if (d != null)
+			return d.toLocaleString();
+		else
+			return "";
+	}
+
+
+
+
+
+
+
+
+    private Widget warnings() {
+        if (this.previousResponse != null && this.previousResponse.hasErrors) {
+            Image img = new Image("images/warning.gif");
+            HorizontalPanel h = new HorizontalPanel();
+            h.add( img );
+            HTML msg = new HTML("<b>There were errors validating this package configuration.");
+            h.add( msg );
+            Button show = new Button("View errors");
+            show.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {
+                    ValidationMessageWidget wid = new ValidationMessageWidget(previousResponse.errorHeader, previousResponse.errorMessage);
+                    wid.show();
+                }
+            } );
+            h.add( show );
+            return h;
+        } else {
+            return new SimplePanel();
+        }
+    }
+
+    protected void showStatusChanger(Widget w) {
+        final StatusChangePopup pop = new StatusChangePopup(conf.uuid, true);
+        pop.setChangeStatusEvent(new Command() {
+            public void execute() {
+                setState( pop.getState() );
+            }
+        });
+        pop.setPopupPosition( w.getAbsoluteLeft(), w.getAbsoluteTop() );
+        pop.show();
+
+    }
+
+    private void setState(String state) {
+        status.setHTML( "<b>" + state + "</b>" );
+    }
+
+    /**
+     * This will get the save widgets.
+     */
+    private Widget modifyWidgets() {
+
+        HorizontalPanel horiz = new HorizontalPanel();
+
+        Button copy = new Button("Copy");
+        copy.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showCopyDialog();
+            }
+        } );
+        horiz.add( copy );
+
+        Button rename = new Button("Rename");
+        rename.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showRenameDialog();
+            }
+        } );
+        horiz.add( rename );
+
+
+        Button archive = new Button("Archive");
+        archive.addClickListener(new ClickListener() {
+            public void onClick(Widget w) {
+                if ( Window.confirm( "Are you sure you want to archive (remove) this package?" ) ) {
+                    conf.archived = true;
+                    doSaveAction(close);
+                }
+            }
+        });
+        horiz.add(archive);
+
+        return horiz;
+    }
+
+
+
+    private void showRenameDialog() {
+        final FormStylePopup pop = new FormStylePopup("images/new_wiz.gif", "Rename the package");
+        pop.addRow( new HTML("<i>Rename the package. A new unique name is required.</i>") );
+        final TextBox name = new TextBox();
+        pop.addAttribute( "New package name:", name );
+        Button ok = new Button("OK");
+        pop.addAttribute( "", ok );
+
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                RepositoryServiceFactory.getService().renamePackage( conf.uuid, name.getText(), new GenericCallback() {
+                    public void onSuccess(Object data) {
+                        refreshPackageList.execute();
+                        Window.alert( "Package renamed successfully." );
+                        pop.hide();
+                    }
+                });
+            }
+        } );
+
+        pop.show();
+    }
+
+
+
+    /**
+     * Will show a copy dialog for copying the whole package.
+     */
+    private void showCopyDialog() {
+        final FormStylePopup pop = new FormStylePopup("images/new_wiz.gif", "Copy the package");
+        pop.addRow( new HTML("<i>Copy the package and all its assets. A new unique name is required.</i>") );
+        final TextBox name = new TextBox();
+        pop.addAttribute( "New package name:", name );
+        Button ok = new Button("OK");
+        pop.addAttribute( "", ok );
+
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                if (!PackageNameValidator.validatePackageName(name.getText())) {
+                    Window.alert("Not a valid package name.");
+                    return;
+                }
+                RepositoryServiceFactory.getService().copyPackage( conf.name, name.getText(), new GenericCallback() {
+                    public void onSuccess(Object data) {
+                        refreshPackageList.execute();
+                        Window.alert( "Package copied successfully." );
+                        pop.hide();
+                    }
+                });
+            }
+        } );
+
+        pop.show();
+
+    }
+
+    protected void doCopyPackage(String name) {
+
+    }
+
+    private void doSaveAction(final Command refresh) {
+        LoadingPopup.showMessage( "Saving package configuration. Please wait ..." );
+        RepositoryServiceFactory.getService().savePackage( this.conf, new GenericCallback() {
+            public void onSuccess(Object data) {
+
+                previousResponse = (ValidatedResponse) data;
+
+                reload();
+                LoadingPopup.showMessage( "Package configuration updated successfully, refreshing content cache..." );
+
+                SuggestionCompletionCache.getInstance().refreshPackage( conf.name, new Command() {
+                    public void execute() {
+                        if (refresh != null) {
+                            refresh.execute();
+                        }
+                        LoadingPopup.close();
+                    }
+                });
+
+
+
+
+            }
+        });
+
+    }
+
+
+
+    /**
+     * Will refresh all the data.
+     */
+    private void reload() {
+        LoadingPopup.showMessage( "Refreshing package data..." );
+        RepositoryServiceFactory.getService().loadPackageConfig( this.conf.uuid, new GenericCallback() {
+            public void onSuccess(Object data) {
+                LoadingPopup.close();
+                conf = (PackageConfigData) data;
+                refreshWidgets();
+            }
+        });
+    }
+
+    private Widget externalURI() {
+        final TextBox box = new TextBox();
+        box.setWidth( "100%" );
+        box.setText( this.conf.externalURI );
+        box.addChangeListener( new ChangeListener() {
+            public void onChange(Widget w) {
+                conf.externalURI = box.getText();
+            }
+        });
+        return box;
+    }
+
+    private Widget header() {
+
+    	return new PackageHeaderWidget(this.conf);
+
+//        final TextArea area = new TextArea();
+//        area.setWidth( "100%" );
+//        area.setVisibleLines( 8 );
+//
+//        area.setCharacterWidth( 100 );
+//
+//        area.setText( this.conf.header );
+//        area.addChangeListener( new ChangeListener() {
+//            public void onChange(Widget w) {
+//                 conf.header = area.getText();
+//            }
+//        });
+//
+//
+//
+//        HorizontalPanel panel = new HorizontalPanel();
+//        panel.add( area );
+//
+//        VerticalPanel vert = new VerticalPanel();
+//
+//        Image max = new Image("images/max_min.gif");
+//        max.addClickListener( new ClickListener() {
+//            public void onClick(Widget w) {
+//                if (area.getVisibleLines() != 32) {
+//                    area.setVisibleLines( 32 );
+//                } else {
+//                    area.setVisibleLines( 8 );
+//                }
+//            }
+//        } );
+//        max.setTitle( "Increase view area." );
+//        vert.add( max );
+//
+//        Image newImport = new Image("images/new_import.gif");
+//        newImport.addClickListener( new ClickListener() {
+//            public void onClick(Widget w) {
+//                area.setText( area.getText(  ) + "\n" +
+//                              "import <your class here>");
+//                conf.header = area.getText();
+//            }
+//        });
+//        vert.add( newImport );
+//        newImport.setTitle( "Add a new Type/Class import to the package." );
+//
+//        Image newGlobal = new Image("images/new_global.gif");
+//        newGlobal.addClickListener( new ClickListener() {
+//            public void onClick(Widget w) {
+//                area.setText( area.getText() + "\n" +
+//                              "global <your class here> <variable name>");
+//                conf.header = area.getText();
+//            }
+//        });
+//        newGlobal.setTitle( "Add a new global variable declaration." );
+//        vert.add( newGlobal );
+//
+//        Image newFactTemplate = new Image("images/fact_template.gif");
+//        newFactTemplate.addClickListener( new ClickListener() {
+//            public void onClick(Widget w) {
+//                final FactTemplateWizard wiz = new FactTemplateWizard();
+//                wiz.setOKClick( new Command() {
+//                    public void execute() {
+//                        area.setText( area.getText() + "\n" +
+//                                      wiz.getTemplateText() );
+//                        conf.header = area.getText();
+//
+//                    }
+//                } );
+//                wiz.show();
+//            }
+//        });
+//        newFactTemplate.setTitle( "Add a new fact template." );
+//        //vert.add( newFactTemplate );
+//
+//        panel.setWidth( "100%" );
+//
+//        panel.add( vert );
+//        return panel;
+    }
+
+
+//    private HorizontalPanel expandableTextArea(final TextArea area) {
+//        HorizontalPanel panel = new HorizontalPanel();
+//        panel.add( area );
+//
+//        Image max = new Image("images/max_min.gif");
+//        max.setTitle( "Increase view area" );
+//
+//        panel.add( max );
+//        max.addClickListener( new ClickListener() {
+//            public void onClick(Widget w) {
+//                if (area.getVisibleLines() != 32) {
+//                    area.setVisibleLines( 32 );
+//                } else {
+//                    area.setVisibleLines( 8 );
+//                }
+//            }
+//        } );
+//        return panel;
+//    }
+
+    private Widget description() {
+
+    	final TextBox box = new TextBox();
+    	box.setText(conf.description);
+    	box.addChangeListener(new ChangeListener() {
+			public void onChange(Widget arg0) {
+				conf.description = box.getText();
+			}
+    	});
+    	box.setVisibleLength(64);
+
+    	return box;
+    }
+
+}
\ No newline at end of file


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -212,8 +212,6 @@
                                                          "Create a new rule asset",
                                                          currentlySelectedPackage );
 
-                pop.setPopupPosition( (DirtyableComposite.getWidth() - pop.getOffsetWidth()) / 2,
-                                      100 );
                 pop.show();
             }
 
@@ -324,8 +322,6 @@
                 refreshTreeView();
             }
         } );
-        pop.setPopupPosition( (DirtyableComposite.getWidth() - pop.getOffsetWidth()) / 2,
-                              100 );
         pop.show();
     }
 
@@ -569,8 +565,6 @@
                                                  title,
                                                  currentlySelectedPackage );
 
-        pop.setPopupPosition( (DirtyableComposite.getWidth() - pop.getOffsetWidth()) / 3,
-                              100 );
         pop.show();
     }
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageHeaderWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageHeaderWidget.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageHeaderWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,345 @@
+package org.drools.brms.client.packages;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.ImageButton;
+import org.drools.brms.client.common.InfoPopup;
+import org.drools.brms.client.rpc.PackageConfigData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ChangeListener;
+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.Label;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.TextArea;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is for managing imports etc.
+ * @author Michael Neale
+ */
+public class PackageHeaderWidget extends Composite {
+
+
+	private PackageConfigData conf;
+	private SimplePanel layout;
+	private ListBox importList;
+	private ListBox globalList;
+
+
+	public PackageHeaderWidget(PackageConfigData conf) {
+		this.conf = conf;
+		layout = new SimplePanel();
+		render();
+
+
+		initWidget(layout);
+	}
+
+
+	private void render() {
+
+		final Types t = parseHeader(conf.header);
+		if (t == null) {
+			textEditorVersion();
+		} else {
+			layout.clear();
+			HorizontalPanel main = new HorizontalPanel();
+
+			VerticalPanel imports = new VerticalPanel();
+			imports.add(new Label("Imported types:"));
+			importList = new ListBox(true);
+
+			doImports(t);
+			HorizontalPanel importCols = new HorizontalPanel();
+			importCols.add(importList);
+			VerticalPanel importActions = new VerticalPanel();
+			importActions.add(new ImageButton("images/new_item.gif") {
+				{
+					addClickListener(new ClickListener() {
+						public void onClick(Widget w) {
+							showTypeQuestion(w, t, false, "Fact types are classes from 'jar' files that have been uploaded to the current package.");
+						}
+					});
+				}
+			});
+			importActions.add(new ImageButton("images/trash.gif") {
+				{
+					addClickListener(new ClickListener() {
+						public void onClick(Widget w) {
+							if (Window.confirm("Are you sure you want to remove this fact type?")) {
+								int i = importList.getSelectedIndex();
+								importList.removeItem(i);
+								t.imports.remove(i);
+								updateHeader(t);
+							}
+						}
+					});
+				}
+			});
+
+			importCols.add(importActions);
+			imports.add(importCols);
+
+
+			VerticalPanel globals = new VerticalPanel();
+			globals.add(new Label("Globals:"));
+			globalList = new ListBox(true);
+			doGlobals(t);
+			HorizontalPanel globalCols = new HorizontalPanel();
+			globalCols.add(globalList);
+			VerticalPanel globalActions = new VerticalPanel();
+			globalActions.add(new ImageButton("images/new_item.gif") {
+				{
+					addClickListener(new ClickListener() {
+						public void onClick(Widget w) {
+							showTypeQuestion(w, t, true, "Global types are classes from 'jar' files that have been uploaded to the current package.");
+						}
+					});
+				}
+			});
+			globalActions.add(new ImageButton("images/trash.gif") {
+				{
+					addClickListener(new ClickListener() {
+						public void onClick(Widget w) {
+							if (Window.confirm("Are you sure you want to remove this global?")) {
+								int i = globalList.getSelectedIndex();
+								globalList.removeItem(i);
+								t.globals.remove(i);
+								updateHeader(t);
+							}
+						}
+					});
+				}
+			});
+			globalCols.add(globalActions);
+			globals.add(globalCols);
+
+			main.add(imports);
+			main.add(globals);
+
+			Button advanced = new Button() {
+				{
+					setText("Advanced view");
+					setTitle("Switch to text mode editing.");
+					addClickListener(new ClickListener() {
+						public void onClick(Widget w) {
+							if (Window.confirm("Switch to advanced text mode for package editing?")) {
+								textEditorVersion();
+							}
+						}
+					});
+				}
+			};
+			main.add(advanced);
+
+
+			layout.add(main);
+
+		}
+	}
+
+
+	private void textEditorVersion() {
+		layout.clear();
+		final TextArea area = new TextArea();
+		area.setWidth( "100%" );
+		area.setVisibleLines( 8 );
+
+		area.setCharacterWidth( 100 );
+
+		area.setText( this.conf.header );
+		area.addChangeListener( new ChangeListener() {
+		    public void onChange(Widget w) {
+		         conf.header = area.getText();
+		    }
+		});
+		layout.add(area);
+	}
+
+	private void showTypeQuestion(Widget w, final Types t, final boolean global, String headerMessage) {
+
+		final FormStylePopup pop = new FormStylePopup("images/home_icon.gif", "Choose a fact type");
+		pop.addRow(new HTML("<small><i>" + headerMessage +
+				" </i></small>"));
+		final ListBox factList = new ListBox();
+		factList.addItem("loading list ....");
+
+		RepositoryServiceFactory.getService().listTypesInPackage(this.conf.uuid, new GenericCallback() {
+			public void onSuccess(Object data) {
+				factList.clear();
+				String[] list = (String[]) data;
+				for (int i = 0; i < list.length; i++) {
+					factList.addItem(list[i]);
+				}
+			}
+		});
+
+		InfoPopup info = new InfoPopup("Types in the package", "If no types appear in the list, create a model asset, and upload a jar file to it for this package. " +
+				"The jar file should contain the .class files for the types needed by the rules only.");
+		HorizontalPanel h = new HorizontalPanel();
+		h.add(factList);
+		h.add(info);
+		pop.addAttribute("Choose class type:", h);
+		final TextBox globalName = new TextBox();
+		if (global) {
+			pop.addAttribute("Global name:", globalName);
+		}
+		final TextBox className = new TextBox();
+		InfoPopup infoClass = new InfoPopup("Entering a type class name", "You should only need to do this if a fact class is on the BRMS classpath itself. Otherwise it should be in the list above.");
+		h = new HorizontalPanel();
+		h.add(className);
+		h.add(infoClass);
+		pop.addAttribute("(advanced) class name:", h);
+
+		Button ok = new Button("OK") {
+			{
+				addClickListener(new ClickListener() {
+					public void onClick(Widget w) {
+						String type = (!"".equals(className.getText())) ? className.getText() : factList.getItemText(factList.getSelectedIndex());
+						if (!global) {
+							t.imports.add(new Import(type));
+							doImports(t);
+						} else {
+							if ("".equals(globalName.getText())) {
+								Window.alert("You must enter a global variable name.");
+								return;
+							}
+							t.globals.add(new Global(type, globalName.getText()));
+							doGlobals(t);
+						}
+						updateHeader(t);
+						pop.hide();
+					}
+				});
+			}
+		};
+		pop.addAttribute("", ok);
+
+		pop.show();
+
+
+
+	}
+
+
+
+	private void updateHeader(Types t) {
+		this.conf.header = renderTypes(t);
+	}
+
+	private void doGlobals(Types t) {
+		globalList.clear();
+		for (Iterator it = t.globals.iterator(); it.hasNext();) {
+			Global g = (Global) it.next();
+			globalList.addItem(g.type + " [" + g.name + "]");
+		}
+	}
+
+
+	private void doImports(Types t) {
+		importList.clear();
+		for (Iterator it = t.imports.iterator(); it.hasNext();) {
+			Import i = (Import) it.next();
+			importList.addItem(i.type);
+		}
+	}
+
+
+	/**
+	 * Attempt to parse out a model, if it can't, it will return null in which case an "advanced" editor should be used.
+	 */
+	static Types parseHeader(String header) {
+		if (header == null || header.equals("")) {
+			Types t = new Types();
+			return t;
+		} else {
+			Types t = new Types();
+
+			String[] lines = header.split("\\n");
+
+			for (int i = 0; i < lines.length; i++) {
+				String tk = lines[i].trim();
+				if (!tk.equals("") && !tk.startsWith("#")) {
+					if (tk.startsWith("import")) {
+						tk = tk.substring(6).trim();
+						if (tk.endsWith(";")) {
+							tk = tk.substring(0, tk.length() - 1);
+						}
+						t.imports.add(new Import(tk));
+					} else if (tk.startsWith("global")) {
+						tk = tk.substring(6).trim();
+						if (tk.endsWith(";")) {
+							tk = tk.substring(0, tk.length() - 1);
+						}
+						String[] gt = tk.split("\\s+");
+						t.globals.add(new Global(gt[0], gt[1]));
+					} else {
+						return null;
+					}
+				}
+			}
+
+			return t;
+
+		}
+
+	}
+
+
+
+
+	static String renderTypes(Types t) {
+		StringBuffer sb = new StringBuffer();
+		for (Iterator iterator = t.imports.iterator(); iterator.hasNext();) {
+			Import i = (Import) iterator.next();
+			sb.append("import " + i.type + "\n");
+		}
+
+		for (Iterator it = t.globals.iterator(); it.hasNext();) {
+			Global g = (Global) it.next();
+			sb.append("global " + g.type + " " + g.name);
+		}
+		return sb.toString();
+	}
+
+	static class Types {
+		List imports = new ArrayList();
+		List globals = new ArrayList();
+	}
+
+	static class Import {
+		String type;
+
+		Import(String t) {
+			this.type = t;
+		}
+	}
+
+	static class Global {
+		String type;
+		String name;
+
+		Global(String type, String name) {
+			this.type = type;
+			this.name = name;
+		}
+	}
+
+}
+
+
+
+


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.packages;
 /*
  * 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.
@@ -18,7 +18,6 @@
 
 
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.drools.brms.client.ruleeditor.EditorLauncher;
@@ -29,13 +28,13 @@
 
 /**
  * This view is a tabbed browser for package management.
- * The first tab always shows the list of packages in tree form, 
+ * The first tab always shows the list of packages in tree form,
  * with a list/explorer like motif.
- * 
+ *
  * This can also be specified to only show one package (ie when viewing a snapshot).
- * 
+ *
  * Each editor that is opened is opened in a new tab.
- * 
+ *
  * @author Michael Neale
  */
 public class PackageManagerView extends Composite {
@@ -59,28 +58,28 @@
         tab = new TabPanel();
         tab.setWidth("100%");
         tab.setHeight("30%");
-        
+
         EditItemEvent editEvent = new EditItemEvent() {
             public void open(String key) {
                 EditorLauncher.showLoadEditor( openedViewers, tab, key, (snapshotName != null) );
             }
         };
         PackageExplorerWidget explorer = null;
-        
+
         if (packageUUID == null) {
-            explorer = new PackageExplorerWidget(editEvent);            
+            explorer = new PackageExplorerWidget(editEvent);
         } else {
             explorer = new PackageExplorerWidget(editEvent, packageUUID, snapshotName);
         }
-        
-        tab.add( explorer,  "<img src='images/explore.gif'/>Explore", true);        
+
+        tab.add( explorer,  "<img src='images/explore.gif'/>Explore", true);
         tab.selectTab( 0 );
-        
+
         initWidget( tab );
     }
 
 	public void setOpenedViewersContainer(Map openedViewers) {
 		this.openedViewers = openedViewers;
 	}
-    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -240,7 +240,7 @@
         Button btn = new Button("Copy");
         btn.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
-      		  copy.setPopupPosition((DirtyableComposite.getWidth() - copy.getOffsetWidth()) / 2, 100);
+
     		  copy.show();
             }
         });

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/QAManagerWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/QAManagerWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/QAManagerWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -195,8 +195,7 @@
 			}
 		}, false, format, title, currentlySelectedPackage);
 
-		pop.setPopupPosition((DirtyableComposite.getWidth() - pop
-				.getOffsetWidth()) / 3, 100);
+
 		pop.show();
 	}
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/qa/ScenarioWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -236,7 +236,6 @@
 		        insertFact.add(factTypes); insertFact.add(new Label("Fact name:")); insertFact.add(factName); insertFact.add(add);
 		        pop.addAttribute("New global:", insertFact);
 
-				pop.setPopupPosition(Window.getClientWidth()/3, w.getAbsoluteTop() );
 				pop.show();
 			}
 		});
@@ -324,10 +323,6 @@
 		        }
 
 
-
-
-
-				pop.setPopupPosition(Window.getClientWidth()/3, w.getAbsoluteTop() );
 				pop.show();
 
 			}
@@ -379,7 +374,6 @@
 				h.add(ok);
 				pop.addAttribute("Fact value:", h);
 
-				pop.setPopupPosition(Window.getClientWidth()/3, w.getAbsoluteTop() );
 				pop.show();
 			}
 		});
@@ -651,7 +645,7 @@
 									}
 								});
 				pop.addRow(ok);
-				pop.setPopupPosition(w.getAbsoluteLeft(), w.getAbsoluteTop());
+
 				pop.show();
 			}
 		};
@@ -906,7 +900,6 @@
 
         pop.addRow(ruleSelector);
 
-        pop.setPopupPosition(w.getAbsoluteLeft(), w.getAbsoluteTop());
         pop.show();
 
     }
@@ -1040,7 +1033,6 @@
 									}
 								});
 				pop.addRow(ok);
-				pop.setPopupPosition(w.getAbsoluteLeft(), w.getAbsoluteTop());
 				pop.show();
 
 			}

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-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -39,9 +39,16 @@
      * Return a a 2d array/grid of results for rules.
      * @param A "/" delimited path to a category.
      */
-    public TableDataResult loadRuleListForCategories(String categoryPath) throws SerializableException;
+    public TableDataResult loadRuleListForCategories(String categoryPath, int skip, int numRows) throws SerializableException;
 
     /**
+     * Return a a 2d array/grid of results for rules.
+     * @param The name of the state.
+     */
+    public TableDataResult loadRuleListForState(String state, int skip, int numRows) throws SerializableException;
+
+
+    /**
      * This will return a TableConfig of header names.
      * @param listName The name of the list that we are going to render.
      */
@@ -147,7 +154,7 @@
      * @param numRows The number of rows to return. -1 means all.
      * @param startRow The starting row number if paging - if numRows is -1 then this is ignored.
      */
-    public TableDataResult listAssets(String packageUUID, String formats[], int numRows, int startRow) throws SerializableException;
+    public TableDataResult listAssets(String packageUUID, String formats[], int skip, int numRows) throws SerializableException;
 
     /**
      * Returns a list of valid states.
@@ -338,4 +345,11 @@
      */
     public AnalysisReport analysePackage(String packageUUID) throws SerializableException;
 
+
+    /**
+     * List the fact types (class names) in the scope of a given package.
+     * This may not include things on the "system" classpath, but only things specifically scoped to the package
+     * (eg in jars that have been uploaded to it as an asset).
+     */
+    public String[] listTypesInPackage(String packageUUID) throws SerializableException;
 }
\ 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-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -34,7 +34,8 @@
 
 	/** Generated by AsyncInterfaceGenerator hackery */
 	public void loadChildCategories(java.lang.String p0, AsyncCallback cb);
-	public void loadRuleListForCategories(java.lang.String p0, AsyncCallback cb);
+	public void loadRuleListForCategories(java.lang.String p0, int p1, int p2, AsyncCallback cb);
+	public void loadRuleListForState(java.lang.String p0, int p1, int p2, AsyncCallback cb);
 	public void loadTableConfig(java.lang.String p0, AsyncCallback cb);
 	public void createCategory(java.lang.String p0, java.lang.String p1, java.lang.String p2, AsyncCallback cb);
 	public void createNewRule(java.lang.String p0, java.lang.String p1, java.lang.String p2, java.lang.String p3, java.lang.String p4, AsyncCallback cb);
@@ -76,7 +77,6 @@
 	public void runScenario(java.lang.String p0, org.drools.brms.client.modeldriven.testing.Scenario p1, AsyncCallback cb);
 	public void runScenariosInPackage(java.lang.String p0, AsyncCallback cb);
 	public void analysePackage(java.lang.String p0, AsyncCallback cb);
+	public void listTypesInPackage(java.lang.String p0, AsyncCallback cb);
 
-
-
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/TableDataResult.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.rpc;
 /*
  * 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.
@@ -27,7 +27,9 @@
 public class TableDataResult
     implements
     IsSerializable {
-    
+
     public TableDataRow[] data;
-    
+    public long total;
+    public boolean hasNext;
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/ActionToolbar.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -18,10 +18,8 @@
 
 
 
-import org.drools.brms.client.common.DirtyableComposite;
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
-import org.drools.brms.client.common.ImageButton;
 import org.drools.brms.client.common.RulePackageSelector;
 import org.drools.brms.client.common.StatusChangePopup;
 import org.drools.brms.client.rpc.MetaData;
@@ -33,15 +31,17 @@
 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.FlexTable;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.widgets.ButtonConfig;
+import com.gwtext.client.widgets.QuickTipsConfig;
+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;
 
 /**
  * This contains the widgets used to action a rule asset
@@ -50,21 +50,17 @@
  */
 public class ActionToolbar extends Composite {
 
-    private FlexTable layout = new FlexTable();
-    private Command closeCommand;
-
+	private Toolbar		toolbar;
     private MetaData      metaData;
     private Command checkinAction;
     private Command archiveAction;
     private Command deleteAction;
     private String uuid;
-    private HTML state;
+    private ToolbarTextItem state;
 
     public ActionToolbar(final RuleAsset asset,
-
                          final Command checkin,
                          final Command archiv,
-                         final Command minimiseMaximise,
                          final Command delete, boolean readOnly) {
 
         this.metaData = asset.metaData;
@@ -72,128 +68,141 @@
         this.uuid = asset.uuid;
         this.archiveAction = archiv;
         this.deleteAction = delete;
-        this.state = new HTML();
+        this.state = new ToolbarTextItem("Status: ");
+
+
+        toolbar = new Toolbar(Ext.generateId());
+
+
         String status = metaData.status;
 
-        FlexCellFormatter formatter = layout.getFlexCellFormatter();
-        HorizontalPanel saveControls = new HorizontalPanel();
         setState(status);
 
-
-        saveControls.add( state );
-
         if (!readOnly) {
-        controls(
-                  formatter,
-                  saveControls );
-
+        	controls();
         }
 
-        windowControls( minimiseMaximise, formatter );
+        toolbar.addItem(this.state);
 
-        initWidget( layout );
-        setWidth( "100%" );
+        initWidget( toolbar );
     }
 
     /**
      * Sets the visible status display.
      */
     private void setState(String status) {
-        state.setHTML( "Status: <b>[" + status + "]</b>");
+        state.setText("Status: [" + status + "]");
     }
 
-    private void controls(FlexCellFormatter formatter,
-                          HorizontalPanel saveControls) {
-        Image editState = new ImageButton("images/edit.gif");
-        editState.setTitle( "Change status." );
-        editState.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                showStatusChanger(w);
-            }
+    private void controls() {
 
 
-        } );
-        saveControls.add( editState );
 
+        toolbar.addButton( new ToolbarButton(new ButtonConfig() {
+	        	{
+	        		setText("Save changes");
+	        		setTooltip(getTip("Commit any changes for this asset."));
+	        		setButtonListener(new ButtonListenerAdapter() {
+	        			public void onClick(
+	        					com.gwtext.client.widgets.Button button,
+	        					EventObject e) {
+	                        	doCheckinConfirm(button);
+        				}
+	        			});
+	        		}
+	        	})
+	        );
 
-        layout.setWidget( 0, 0, saveControls );
-        formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
+        toolbar.addButton( new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("Copy");
+        		setTooltip("Copy this asset.");
+        		setButtonListener(new ButtonListenerAdapter() {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+                        	doCopyDialog(button);
+    				}
+	    			});
+	    		}
+	    	})
+	    );
 
+        toolbar.addButton( new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("Archive");
+        		setTooltip(getTip("Archive this asset. This will not permanently delete it."));
+        		setButtonListener(new ButtonListenerAdapter() {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+		                        if (Window.confirm( "Are you sure you want to archive this item?" )) {
+		                            metaData.checkinComment = "Archived Item on " + new java.util.Date().toString();
+		                            archiveAction.execute();
+		                        }
+    				}
+	    			});
+	    		}
+	    	})
+	    );
 
 
-        //Image save = new Image("images/save_edit.gif");
-        Button save = new Button("Save changes");
-        save.setTitle( "Check in changes." );
-        save.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                doCheckinConfirm(w);
-            }
-        });
+        if (this.metaData.versionNumber == 0) {
+            toolbar.addButton( new ToolbarButton(new ButtonConfig() {
+            	{
+            		setText("Delete");
+            		setTooltip(getTip("Permanently delete this asset. This will only be shown before the asset is checked in."));
+            		setButtonListener(new ButtonListenerAdapter() {
+            			public void onClick(
+            					com.gwtext.client.widgets.Button button,
+            					EventObject e) {
+		                            if (Window.confirm( "Are you sure you want to permanently delete this (unversioned) item?" ) ) {
+		                                deleteAction.execute();
+		                            }
+        				}
+    	    			});
+    	    		}
+    	    	})
+    	    );
+        }
 
-        saveControls.add( save );
 
-        Button copy = new Button("Copy");
-        copy.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                doCopyDialog(w);
-            }
-        } );
+        toolbar.addFill();
 
-        saveControls.add( copy );
+        toolbar.addSeparator();
 
-        Button archive = new Button("Archive");
-        archive.addClickListener(new ClickListener() {
-            public void onClick(Widget w) {
-                if (Window.confirm( "Are you sure you want to archive this item?" )) {
-                    metaData.checkinComment = "Archived Item on " + new java.util.Date().toString();
-                    archiveAction.execute();
-                }
-            }
-        });
-        saveControls.add(archive);
 
-        if (this.metaData.versionNumber == 0) {
-        Button delete = new Button( "Delete" );
-            delete.addClickListener( new ClickListener() {
+        toolbar.addButton( new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("Change state");
+        		setTooltip(getTip("Change the status of this asset."));
+        		setButtonListener(new ButtonListenerAdapter() {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+        				showStatusChanger(button);
+    				}
+	    			});
+	    		}
 
-                public void onClick(Widget w) {
-                    if (Window.confirm( "Are you sure you want to permanently delete this (unversioned) item?" ) ) {
-                        deleteAction.execute();
-                    }
-                }
-            } );
-            saveControls.add( delete );
-        }
 
-    }
+	    	})
+	    );
 
-    private void windowControls(final Command minimiseMaximise,
-                                FlexCellFormatter formatter) {
-        HorizontalPanel windowControls = new HorizontalPanel();
 
-        Image maxMinImage = new ImageButton("images/max_min.gif");
-        maxMinImage.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                minimiseMaximise.execute();
-            }
-        });
 
-        windowControls.add( maxMinImage );
+    }
 
-        Image closeImg = new ImageButton("images/close.gif");
-        closeImg.setTitle( "Close." );
-        closeImg.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                closeCommand.execute(  );
-            }
-        });
+	private QuickTipsConfig getTip(final String t) {
+		return new QuickTipsConfig() {
+			{
+				setText(t);
+			}
 
-        windowControls.add( closeImg );
+		};
+	}
 
-        layout.setWidget( 0, 1, windowControls );
-        formatter.setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_TOP );
 
-    }
 
     protected void doCopyDialog(Widget w) {
         final FormStylePopup form = new FormStylePopup("images/rule_asset.gif", "Copy this item");
@@ -222,7 +231,7 @@
         } );
         form.addAttribute( "", ok );
 
-		form.setPopupPosition((DirtyableComposite.getWidth() - form.getOffsetWidth()) / 2, 100);
+		//form.setPopupPosition((DirtyableComposite.getWidth() - form.getOffsetWidth()) / 2, 100);
 		form.show();
 
     }
@@ -262,11 +271,6 @@
         pop.show();
     }
 
-    /**
-     * This needs to be set to allow the current viewer to be closed.
-     */
-    public void setCloseCommand(Command c) {
-        this.closeCommand = c;
-    }
 
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/CheckinPopup.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.ruleeditor;
 /*
  * 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.
@@ -27,20 +27,20 @@
 import com.google.gwt.user.client.ui.Widget;
 
 /**
- * 
+ *
  * A popup and confirmation dialog for committing an asset.
- * 
+ *
  * @author Michael Neale
  *
  */
 public class CheckinPopup {
 
-    
+
     private TextArea comment;
     private Button save;
     private FormStylePopup pop;
 
-    
+
     public CheckinPopup(int left, int top, String message) {
         pop = new FormStylePopup("images/checkin.gif", message);
         comment = new TextArea();
@@ -48,16 +48,12 @@
         save = new Button("Save");
         pop.addAttribute( "Comment", comment );
         pop.addAttribute( "", save);
-                
-        
-        pop.setStyleName( "ks-popups-Popup" );
-        pop.setPopupPosition( left, top );
-    
+
     }
-    
+
     public void setCommand(final Command checkin) {
         save.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {                
+            public void onClick(Widget w) {
                 checkin.execute();
                 pop.hide();
             }
@@ -65,12 +61,11 @@
     }
 
     public void show() {
-		pop.setPopupPosition((DirtyableComposite.getWidth() - pop.getOffsetWidth()) / 2, 100);
 		pop.show();
     }
-    
+
     public String getCheckinComment() {
         return comment.getText();
     }
-    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -63,6 +63,7 @@
         //depending on the format, load the appropriate editor
         if ( asset.metaData.format.equals( AssetFormats.BUSINESS_RULE ) ) {
             return new RuleValidatorWrapper( new RuleModeller( asset  ), asset);
+        	//return new RuleModeller( asset  );
         } else if ( asset.metaData.format.equals( AssetFormats.DSL_TEMPLATE_RULE ) ) {
             return new RuleValidatorWrapper(new DSLRuleEditor( asset ), asset);
         } else if ( asset.metaData.format.equals( AssetFormats.MODEL ) ) {

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/MetaDataWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -19,10 +19,10 @@
 
 import java.util.Date;
 
-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.ImageButton;
+import org.drools.brms.client.common.PrettyFormLayout;
 import org.drools.brms.client.common.RulePackageSelector;
 import org.drools.brms.client.rpc.MetaData;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
@@ -44,7 +44,7 @@
  * It also captures edits, but it does not load or save anything itself.
  * @author Michael Neale
  */
-public class MetaDataWidget extends FormStyleLayout {
+public class MetaDataWidget extends PrettyFormLayout {
 
 
     private MetaData data;
@@ -53,9 +53,17 @@
     private Command refreshView;
     AssetCategoryEditor ed;
 
-	public MetaDataWidget(MetaData d, boolean readOnly, String uuid, Command refreshView) {
+	public MetaDataWidget(final MetaData d, boolean readOnly, String uuid, Command refreshView) {
 
-        setStyleName( "metadata-Widget" );
+		super();
+//        layout = new Form(new FormConfig() {
+//        	{
+//        		setWidth(250);
+//        		//setHeader(d.name);
+//        		setLabelWidth(75);
+//        		setSurroundWithBox(true);
+//        	}
+//        });
 
         if (!readOnly) {
             Image edit = new ImageButton("images/edit.gif", "Rename this asset");
@@ -66,21 +74,31 @@
             });
             addHeader( "images/meta_data.png", d.name, edit );
         } else {
-            addHeader( "images/asset_version.png", d.name );
+            addHeader( "images/asset_version.png", d.name, null );
         }
+
         this.uuid = uuid;
         this.data = d;
         this.readOnly = readOnly;
         this.refreshView = refreshView;
+
         loadData(d);
+
+
+
 	}
 
 
-    private void loadData(MetaData d) {
+
+
+
+	private void loadData(MetaData d) {
         this.data = d;
+        startSection();
         addAttribute("Categories:", categories());
-        addRow( new HTML("<hr/>") );
+        endSection();
 
+        startSection();
         addAttribute("Modified on:", readOnlyDate(data.lastModifiedDate));
         addAttribute("by:", readOnlyText(data.lastContributor));
         addAttribute("Note:", readOnlyText( data.checkinComment ));
@@ -92,8 +110,9 @@
         addAttribute("Created by:", readOnlyText(data.creator));
         addAttribute("Format:", new HTML( "<b>" + data.format + "</b>" ));
 
+        endSection();
 
-        addRow(new HTML("<hr/>"));
+        startSection();
 
         addAttribute("Package:", packageEditor(data.packageName));
         addAttribute("Subject:", editableText(new FieldBinding() {
@@ -139,13 +158,19 @@
 
         }, "A short description or code indicating the source of the rule."));
 
+        endSection();
+        startSection();
+
         if (!readOnly) {
             addRow( new VersionBrowser(this.uuid, this.data, refreshView) );
         }
+
+        endSection();
     }
 
 
-    private Widget packageEditor(final String packageName) {
+
+	private Widget packageEditor(final String packageName) {
         if (this.readOnly) {
             return readOnlyText( packageName );
         } else {
@@ -181,8 +206,6 @@
             }
         } );
 
-        pop.setPopupPosition( source.getParent().getParent().getAbsoluteLeft() - 18,
-                              source.getParent().getParent().getAbsoluteTop() );
         pop.show();
     }
 
@@ -206,7 +229,6 @@
                                                                           "Moved from : " + pkg,
                                                                           new GenericCallback() {
                                                                               public void onSuccess(Object data) {
-                                                                                  makeDirty();
                                                                                   refreshView.execute();
                                                                                   pop.hide();
                                                                               }
@@ -217,8 +239,7 @@
             }
 
         });
-        pop.setPopupPosition( source.getParent().getParent().getAbsoluteLeft(),
-                              source.getParent().getParent().getAbsoluteTop() );
+
         pop.show();
     }
 
@@ -257,9 +278,9 @@
             final TextBox box = new TextBox();
             box.setTitle( toolTip );
             box.setText( bind.getValue() );
+            box.setVisibleLength(10);
             ChangeListener listener = new ChangeListener() {
                 public void onChange(Widget w) {
-                    makeDirty();
                     bind.setValue( box.getText() );
                 }
             };
@@ -284,9 +305,6 @@
     }
 
 
-    public boolean isDirty() {
-        return (ed.isDirty() || dirtyflag) ;
-    }
 
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewAssetWizard.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -22,21 +22,15 @@
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
-import org.drools.brms.client.common.ImageButton;
 import org.drools.brms.client.common.LoadingPopup;
 import org.drools.brms.client.common.RulePackageSelector;
 import org.drools.brms.client.common.WarningPopup;
-import org.drools.brms.client.packages.NewPackageWizard;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 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.FlexTable;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.TextBox;
@@ -95,8 +89,6 @@
 
         addAttribute( "", ok );
 
-
-        setStyleName( "ks-popups-Popup" );
     }
 
     /**
@@ -137,10 +129,10 @@
     void ok() {
 
         if (this.showCats && this.initialCategory == null) {
-            WarningPopup.showMessage( "You have to pick an initial category.", this.getAbsoluteLeft(), this.getAbsoluteTop() );
+            Window.alert( "You have to pick an initial category." );
             return;
         } else if (this.name.getText() == null || "".equals( this.name.getText() )) {
-            WarningPopup.showMessage( "Asset must have a name", this.getAbsoluteLeft(), this.getAbsoluteTop() );
+            Window.alert( "Asset must have a name" );
             return;
         }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleDocumentWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.client.ruleeditor;
 /*
  * 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.
@@ -33,45 +33,38 @@
 public class RuleDocumentWidget extends DirtyableComposite {
 
 	private TextArea text;
-	
+
 	public RuleDocumentWidget(MetaData data) {
-//        
+//
 //        HorizontalPanel horiz = new HorizontalPanel();
-//        
-        
+//
+
 		text = new TextArea();
-        
-//        horiz.add( text );
-//        Image max = new Image("images/max_min.gif");
-//        max.setTitle( "Show/hide the documentation panel." );
-//        max.addClickListener( new ClickListener() {
-//            public void onClick(Widget w) {
-//                text.setVisible( !text.isVisible() );
-//            }            
-//        });
-//        horiz.add( max );
-//        horiz.setWidth( "100%" );
+
+
         text.setWidth( "100%" );
         text.setVisibleLines( 10 );
-        text.setStyleName( "rule-viewer-Documentation" );        
-        text.setTitle( "This is rule documentation. Human friendly descriptions of the business logic.");        
+        text.setStyleName( "rule-viewer-Documentation" );
+        text.setTitle( "This is rule documentation. Human friendly descriptions of the business logic.");
 		initWidget(text);
         loadData(data);
 	}
 
+
+
     private void loadData(final MetaData data) {
         text.setText(data.description);
         text.addChangeListener( new ChangeListener() {
-            public void onChange(Widget w) {                
+            public void onChange(Widget w) {
                 data.description = text.getText();
                 makeDirty();
-            }            
+            }
         });
         if (data.description == null || "".equals(data.description )) {
             text.setText( "<documentation>" );
         }
     }
-    
-    
-	
+
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleValidatorWrapper.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -18,7 +18,6 @@
 
 
 import org.drools.brms.client.common.DirtyableComposite;
-import org.drools.brms.client.common.DirtyableFlexTable;
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
 import org.drools.brms.client.common.LoadingPopup;
@@ -27,16 +26,18 @@
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
 import org.drools.brms.client.rpc.RuleAsset;
 
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.ScrollPanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+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.event.ButtonListenerAdapter;
 
 /**
  * This widget wraps a rule asset widget, and provides actions to validate and view source.
@@ -45,52 +46,57 @@
 public class RuleValidatorWrapper extends DirtyableComposite {
 
     private RuleAsset asset;
-    private DirtyableFlexTable layout;
+    private VerticalPanel layout = new VerticalPanel();
+	private Widget editor;
 
-    public boolean isDirty() {
-        return layout.hasDirty();
-    }
-
     public RuleValidatorWrapper(Widget editor, RuleAsset asset) {
         this.asset = asset;
+        this.editor = editor;
 
-        layout = new DirtyableFlexTable();
-        layout.setStyleName( "asset-editor-Layout" );
-        layout.setWidget( 0, 0, editor );
-        if (!asset.isreadonly)
-            layout.setWidget( 1, 0, validatorActions() );
-        layout.getCellFormatter().setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_TOP );
+        layout.add(editor);
+        if (!asset.isreadonly) {
+        	validatorActions();
+        }
 
-
         layout.setWidth("100%");
         layout.setHeight( "100%" );
 
         initWidget( layout );
     }
 
-    private Widget validatorActions() {
-        HorizontalPanel horiz = new HorizontalPanel();
-        Button viewSource = new Button("View source");
-        horiz.add( viewSource );
+    private void validatorActions() {
+        Toolbar tb = new Toolbar(Ext.generateId());
+        layout.setCellHeight(editor, "95%");
+        layout.add(tb);
 
-        Button validate = new Button("Validate");
-        horiz.add( validate );
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("View source");
+        		setButtonListener(new ButtonListenerAdapter()  {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+                        doViewsource();
+        			}
+        		});
+        	}
+        }));
 
-        viewSource.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                doViewsource();
-            }
+        tb.addSeparator();
 
-        });
+        tb.addButton(new ToolbarButton(new ButtonConfig() {
+        	{
+        		setText("Validate");
+        		setButtonListener(new ButtonListenerAdapter()  {
+        			public void onClick(
+        					com.gwtext.client.widgets.Button button,
+        					EventObject e) {
+        				doValidate();
+        			}
+        		});
+        	}
+        }));
 
-        validate.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                doValidate();
-            }
-        });
-
-        horiz.setStyleName( "asset-validator-Buttons" );
-        return horiz;
     }
 
     private void doValidate() {
@@ -153,7 +159,6 @@
 //            pop.setHeight( "50%" );
 
         }
-        pop.setPopupPosition( 100, 100 );
         pop.show();
         LoadingPopup.close();
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/RuleViewer.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -19,7 +19,6 @@
 
 import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.common.DirtyableComposite;
-import org.drools.brms.client.common.DirtyableFlexTable;
 import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
@@ -29,16 +28,18 @@
 import org.drools.brms.client.rpc.RuleAsset;
 
 import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.rpc.AsyncCallback;
 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.DisclosurePanel;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.HorizontalSplitPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.VerticalSplitPanel;
 import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
 
 /**
  * The main layout parent/controller the rule viewer.
@@ -49,7 +50,6 @@
 
     private Command           closeCommand;
     protected RuleAsset       asset;
-    private final DirtyableFlexTable layout;
 
     private boolean readOnly;
 
@@ -58,6 +58,7 @@
     private Widget editor;
 
     private ActionToolbar toolbar;
+	private VerticalPanel layout;
 
 
     public RuleViewer(RuleAsset asset) {
@@ -73,25 +74,29 @@
     public RuleViewer(RuleAsset asset, boolean historicalReadOnly) {
         this.asset = asset;
         this.readOnly = historicalReadOnly;
-        layout = new DirtyableFlexTable();
 
+        this.layout = new VerticalPanel();
+
+        layout.setWidth("100%");
+        layout.setHeight("100%");
+
+        initWidget( layout );
+
         doWidgets();
-        initWidget( this.layout );
 
         LoadingPopup.close();
     }
 
-    /**
-     * This will actually load up the data (this is called by the callback
+
+
+	/**
+     * This will actually load up the data (this is called by the callback)
      * when we get the data back from the server,
      * also determines what widgets to load up).
      */
     private void doWidgets() {
-        this.layout.clear();
+    	layout.clear();
 
-        FlexCellFormatter formatter = layout.getFlexCellFormatter();
-
-
         //the action widgets (checkin/close etc).
         toolbar = new ActionToolbar( asset,
                                      new Command() {
@@ -104,23 +109,20 @@
                         doArchive();
                     }
                 },
+
                 new Command() {
                     public void execute() {
-                        zoomIntoAsset();
-                    }
-                },
-                new Command() {
-                    public void execute() {
                         doDelete();
                     }
                 },
         readOnly);
 
+        //layout.add(toolbar, DockPanel.NORTH);
+        layout.add(toolbar);
+        layout.setCellHeight(toolbar, "30px");
+        layout.setCellHorizontalAlignment(toolbar, HasHorizontalAlignment.ALIGN_LEFT);
+        layout.setCellWidth(toolbar, "100%");
 
-        layout.setWidget( 0, 0, toolbar );
-        formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_TOP );
-
-
         metaWidget = new MetaDataWidget( this.asset.metaData, readOnly, this.asset.uuid, new Command() {
             public void execute() {
                 refreshDataAndView();
@@ -128,40 +130,47 @@
 
         });
 
-        //now the main layout table
-        layout.setWidget( 0, 1, metaWidget );
 
-        formatter.setRowSpan( 0, 1, 3 );
-        formatter.setVerticalAlignment( 0, 1, HasVerticalAlignment.ALIGN_TOP );
-        formatter.setWidth( 0, 1, "30%" );
+        HorizontalPanel hsp = new HorizontalPanel();
 
 
-        //REMEMBER: subsequent rows have only one column, doh that is confusing !
-        //GAAAAAAAAAAAAAAAAAAAAAAAAAAH
+        layout.add(hsp);
 
+
         editor = EditorLauncher.getEditorViewer(asset, this);
-        toolbar.setCloseCommand( new Command() {
-            public void execute() {
-                if (layout.hasDirty()) {
-                    doCloseUnsavedWarning( );
-                } else {
 
-                closeCommand.execute();
-                }
-            }
-        } );
+        //the document widget
+        doco = new RuleDocumentWidget(asset.metaData);
 
-        layout.setWidget( 1, 0, editor);
-        formatter.setVerticalAlignment(1, 0, HasVerticalAlignment.ALIGN_TOP);
 
 
-        //the document widget
-        doco = new RuleDocumentWidget(asset.metaData);
-        layout.setWidget( 2, 0, doco );
-        formatter.setVerticalAlignment(2, 0, HasVerticalAlignment.ALIGN_TOP);
+        VerticalPanel vert = new VerticalPanel();
+        vert.add(editor);
+        editor.setHeight("100%");
+        vert.add(doco);
+
+        vert.setWidth("100%");
+        vert.setHeight("100%");
+
+        hsp.add(vert);
+        //hsp.addStyleName("HorizontalSplitPanel");
+
+        hsp.add(metaWidget);
+        hsp.setCellWidth(metaWidget, "15%");
+
+        //hsp.setSplitPosition("80%");
+        hsp.setHeight("100%");
+
     }
 
-    void doDelete() {
+
+
+    protected boolean hasDirty() {
+    	//not sure how to implement this now.
+		return false;
+	}
+
+	void doDelete() {
         RepositoryServiceFactory.getService().deleteUncheckedRule( this.asset.uuid , this.asset.metaData.packageName, new GenericCallback() {
           public void onSuccess(Object o) {
               closeCommand.execute();
@@ -180,7 +189,7 @@
     }
 
     void doCheckin() {
-        this.layout.clear();
+        layout.clear();
 
         LoadingPopup.showMessage( "Saving, please wait..." );
         RepositoryServiceFactory.getService().checkinVersion( this.asset, new GenericCallback() {
@@ -206,7 +215,6 @@
                     ((DirtyableComposite) editor).resetDirty();
                 }
 
-                metaWidget.resetDirty();
                 doco.resetDirty();
 
                 refreshDataAndView( );
@@ -234,7 +242,7 @@
      * This will reload the contents from the database, and refresh the widgets.
      */
     public void refreshDataAndView() {
-
+    	LoadingPopup.showMessage("Refreshing item...");
         RepositoryServiceFactory.getService().loadRuleAsset( asset.uuid, new GenericCallback() {
             public void onSuccess(Object a) {
                 asset = (RuleAsset) a;
@@ -244,16 +252,7 @@
         });
     }
 
-    /**
-     * Calling this will toggle the visibility of the meta-data widget (effectively zooming
-     * in the rule asset).
-     */
-    public void zoomIntoAsset() {
 
-       boolean vis = !layout.getFlexCellFormatter().isVisible( 2, 0 );
-       this.layout.getFlexCellFormatter().setVisible( 0, 1, vis );
-       this.layout.getFlexCellFormatter().setVisible( 2, 0, vis );
-    }
 
 
     /**
@@ -293,9 +292,7 @@
             }
         });
 
-        pop.setStyleName( "warning-Popup" );
 
-		pop.setPopupPosition((DirtyableComposite.getWidth() - pop.getOffsetWidth()) / 2, 100);
 		pop.show();
     }
 

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,218 +0,0 @@
-package org.drools.brms.client.rulelist;
-
-/*
- * 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 java.util.Collections;
-import java.util.Map;
-
-import org.drools.brms.client.categorynav.CategoryExplorerWidget;
-import org.drools.brms.client.categorynav.CategorySelectHandler;
-import org.drools.brms.client.common.GenericCallback;
-import org.drools.brms.client.common.ImageButton;
-import org.drools.brms.client.common.LoadingPopup;
-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.ruleeditor.NewAssetWizard;
-
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DeferredCommand;
-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.FlexTable;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HasVerticalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.SimplePanel;
-import com.google.gwt.user.client.ui.TabPanel;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
-
-/**
- * This is the category based asset browser (ie it has a category tree browser, as well as
- * a search box).
- *
- * @author Michael Neale
- */
-public class AssetBrowser extends Composite {
-
-    public static final int     EDITOR_TAB    = 1;
-    private TabPanel            tab;
-    private Map                 openedViewers = Collections.EMPTY_MAP;
-    private AssetItemListViewer list;
-
-    public AssetBrowser() {
-        tab = new TabPanel();
-        tab.setWidth( "100%" );
-        tab.setHeight( "100%" );
-
-
-
-        tab.add( doExplorer(),
-                 "<img src='images/explore.gif'/>Explore",
-                 true );
-
-        tab.selectTab( 0 );
-        initWidget( tab );
-    }
-
-    /** This will setup the explorer tab */
-    private FlexTable doExplorer() {
-        final FlexTable table = new FlexTable();
-        //and the the delegate to open an editor for a rule resource when
-        //chosen to
-        list = new AssetItemListViewer( new EditItemEvent() {
-                                            public void open(String key) {
-                                                showLoadEditor( key );
-                                            }
-                                        },
-                                        AssetItemListViewer.RULE_LIST_TABLE_ID );
-
-        FlexCellFormatter formatter = table.getFlexCellFormatter();
-
-        //setup the nav, which will drive the list
-        CategoryExplorerWidget nav = new CategoryExplorerWidget( new CategorySelectHandler() {
-            public void selected(final String selectedPath) {
-                Command load = getRuleListLoadingCommand( list,
-                                                          selectedPath );
-                table.setWidget( 0,
-                                 1,
-                                 list );
-                LoadingPopup.showMessage( "Retrieving list, please wait..." );
-                DeferredCommand.add( load );
-                list.setRefreshCommand( load );
-            }
-
-        } );
-
-        final QuickFindWidget quick = new QuickFindWidget( new EditItemEvent() {
-            public void open(String key) {
-                showLoadEditor( key );
-            }
-        } );
-        table.setWidget(0, 1, quick);
-
-
-        formatter.setAlignment( 0,
-                                0,
-                                HasHorizontalAlignment.ALIGN_LEFT,
-                                HasVerticalAlignment.ALIGN_TOP );
-        formatter.setAlignment( 0,
-                                1,
-                                HasHorizontalAlignment.ALIGN_LEFT,
-                                HasVerticalAlignment.ALIGN_TOP );
-        formatter.setWidth( 0,
-                            0,
-                            "30%" );
-        formatter.setWidth( 0,
-                            1,
-                            "70%" );
-
-//        formatter.setHeight( 0,
-//                             0,
-//                             "90%" );
-
-
-
-
-        //Image newRule = new ImageButton( "images/new_rule.gif" );
-        Button newRule = new Button("Create new rule");
-        newRule.setTitle( "Create new rule" );
-
-        newRule.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                showNewAssetWizard();
-            }
-        } );
-
-        Image showFinder = new ImageButton( "images/system_search_small.png" );
-        showFinder.setTitle( "Show the rule finder." );
-        showFinder.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-            		table.setWidget(0, 1, quick);
-            }
-        } );
-
-        HorizontalPanel actions = new HorizontalPanel();
-
-        actions.add( newRule );
-        actions.add( showFinder );
-        actions.setStyleName( "new-asset-Icons" );
-
-
-
-        VerticalPanel left = new VerticalPanel();
-        left.add(actions);
-        left.add(nav);
-        left.setWidth("100%");
-
-        table.setWidget(0, 0, left);
-
-
-        return table;
-    }
-
-    private Command getRuleListLoadingCommand(final AssetItemListViewer list,
-                                              final String selectedPath) {
-        return new Command() {
-            public void execute() {
-                LoadingPopup.showMessage( "Loading list, please wait..." );
-                RepositoryServiceFactory.getService().loadRuleListForCategories( selectedPath,
-                                                                                 new GenericCallback() {
-                                                                                     public void onSuccess(Object o) {
-                                                                                         TableDataResult result = (TableDataResult) o;
-                                                                                         list.loadTableData( result );
-                                                                                         LoadingPopup.close();
-                                                                                     }
-                                                                                 } );
-            }
-        };
-    }
-
-    public void showLoadEditor(String uuid) {
-        EditorLauncher.showLoadEditor( openedViewers,
-                                       tab,
-                                       uuid,
-                                       false );
-    }
-
-    private void showNewAssetWizard() {
-        int left = 70;
-        int top = 100;
-
-        NewAssetWizard pop = new NewAssetWizard( new EditItemEvent() {
-                                                     public void open(String key) {
-                                                         showLoadEditor( key );
-
-                                                     }
-                                                 },
-                                                 true,
-                                                 null,
-                                                 "Create a new rule" );
-        pop.setPopupPosition( left,
-                              top );
-
-        pop.show();
-    }
-
-    public void setOpenedViewersContainer(Map openedViewers) {
-        this.openedViewers = openedViewers;
-    }
-}
\ No newline at end of file

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGrid.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,251 @@
+package org.drools.brms.client.rulelist;
+
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.TableConfig;
+import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.client.rpc.TableDataRow;
+import org.drools.brms.client.ruleeditor.EditorLauncher;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Ext;
+import com.gwtext.client.data.ArrayReader;
+import com.gwtext.client.data.FieldDef;
+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.util.Format;
+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.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;
+import com.gwtext.client.widgets.grid.event.GridRowListenerAdapter;
+
+/**
+ * Uses an awesome grid and does paging for asset lists.
+ * @author Michael Neale
+ */
+public class AssetItemGrid extends Composite {
+
+
+    public static final String            RULE_LIST_TABLE_ID          = "rulelist";
+    public static final String            ARCHIVED_RULE_LIST_TABLE_ID = "archivedrulelist";
+    private static final Map 			  columnConfigs = new HashMap();
+    private static final Map		      recordDefs = new HashMap();
+    private static final Map			  rowsPerPage = new HashMap();
+
+    private final EditItemEvent editEvent;
+    private SimplePanel layout;
+
+    private int currentPosition = 0;
+	protected Store store;
+
+    public AssetItemGrid(final EditItemEvent event, final String tableConfig, final AssetItemGridDataLoader source) {
+
+        this.editEvent = event;
+        this.layout = new SimplePanel();
+
+        if (!columnConfigs.containsKey(tableConfig)) {
+            RepositoryServiceFactory.getService().loadTableConfig(tableConfig, new GenericCallback() {
+                public void onSuccess(Object data) {
+                    TableConfig conf = (TableConfig) data;
+                    ColumnModel cm = createColumnModel(conf);
+                    columnConfigs.put(tableConfig, cm);
+                    RecordDef rd = createRecordDef(conf);
+                    recordDefs.put(tableConfig, rd);
+                    rowsPerPage.put(tableConfig, new Integer(conf.rowsPerPage));
+                    doGrid(source, cm, rd, conf.rowsPerPage);
+                }
+            });
+        } else {
+            doGrid(source,
+                    (ColumnModel) columnConfigs.get(tableConfig),
+                    (RecordDef) recordDefs.get(tableConfig), ((Integer) rowsPerPage.get(tableConfig)).intValue());
+        }
+
+        initWidget(layout);
+    }
+
+
+    /**
+     * Actually build the grid.
+     */
+    private void doGrid(final AssetItemGridDataLoader source, final ColumnModel cm, final RecordDef rd, final int pageSize) {
+        final int numFlds = rd.getFields().length;
+        LoadingPopup.showMessage("Loading data...");
+        source.loadData(currentPosition, pageSize, new GenericCallback() {
+            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++) {
+                    TableDataRow row = result.data[i];
+                    Object[] rowData = new Object[numFlds];
+                    rowData[0] = row.id;
+                    rowData[1] = row.format;
+                    for(int j = 2; j < numFlds; j++) {
+                        rowData[j] = row.values[j - 2];
+                    }
+                    gridData[i] = rowData;
+                }
+                MemoryProxy proxy = new MemoryProxy(gridData);
+                ArrayReader reader = new ArrayReader(rd);
+                store = new Store(proxy, reader);
+                final Grid g = new Grid(Ext.generateId(), "480px", "500px", store, cm);
+                g.render();
+                g.setLoadMask("Loading data...");
+
+                Toolbar tb = new Toolbar(g.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);
+                }
+                if (result.hasNext) {
+                    navButton(source, cm, rd, pageSize, g, true, tb);
+                }
+
+                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);
+                            }
+                        });
+                    }
+                }));
+
+
+
+                g.addGridRowListener(new GridRowListenerAdapter() {
+                    public void onRowDblClick(Grid grid, int rowIndex, EventObject e) {
+                        String uuid = grid.getSelectionModel().getSelected().getAsString("uuid");
+                        System.err.println("Opening: " + uuid);
+                        editEvent.open(uuid);
+                    }
+                });
+                store.load();
+                layout.add(g);
+                LoadingPopup.close();
+            }
+
+
+        });
+    }
+
+    private void navButton(final AssetItemGridDataLoader source,
+            final ColumnModel cm, final RecordDef rd,
+            final int pageSize, final Grid g, final boolean forward, Toolbar tb) {
+
+        ToolbarButton b = new ToolbarButton(new ButtonConfig() {
+            {
+                setText((forward) ? "Next ->" : "<- Previous");
+            }
+        });
+        tb.addButton(b);
+
+        b.addButtonListener(new ButtonListenerAdapter() {
+                    public void onClick(Button button, EventObject e) {
+                        currentPosition = (forward) ? currentPosition + pageSize : currentPosition - pageSize;
+                        layout.clear();
+                        g.destroy();
+                        doGrid(source, cm, rd, pageSize);
+                    }
+                });
+    }
+
+    private RecordDef createRecordDef(TableConfig conf) {
+        FieldDef[] fd = new FieldDef[conf.headers.length + 2]; //2 as we have format and UUID to tack on.
+        fd[0] = new StringFieldDef("uuid");
+        fd[1] = new StringFieldDef("format");
+        for (int i = 0; i < conf.headers.length; i++) {
+            fd[i + 2] = new StringFieldDef(conf.headers[i]);
+        }
+        return new RecordDef(fd);
+    }
+
+    private ColumnModel createColumnModel(TableConfig conf) {
+        ColumnConfig[] cfgs = new ColumnConfig[conf.headers.length + 1];
+
+        //first the UUID
+        cfgs[0] = new ColumnConfig() {
+            {
+                setHidden(true);
+                setDataIndex("uuid");
+            }
+        };
+
+
+        //now the visible headers
+        for (int i = 0; i < conf.headers.length; i++) {
+            final String header = conf.headers[i];
+
+            cfgs[i + 1] = new ColumnConfig() {
+                    {
+                        if (!header.equals("Description")) {
+                            setHeader(header);
+                            setSortable(true);
+                            setDataIndex(header);
+                            if (header.equals("Name")) { //name is special !
+                                setWidth(220);
+                                setRenderer(new Renderer() {
+                                    public String render(Object value,
+                                            CellMetadata cellMetadata, Record record,
+                                            int rowIndex, int colNum, Store store) {
+                                        String fmtIcon = "images/" + EditorLauncher.getAssetFormatIcon(record.getAsString("format"));
+                                        return Format.format("<img src='{0}'/><b>{1}</b><br/><small>{2}</small<", new String[]{fmtIcon,
+                                                (String) value,
+                                                record.getAsString("Description")});
+                                    }
+                                });
+                            }
+                        } else {
+                            setHidden(true); //don't want to show a separate description
+                        }
+
+
+                    }
+                };
+        }
+
+
+        return new ColumnModel(cfgs);
+    }
+
+
+
+}
\ No newline at end of file


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGridDataLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGridDataLoader.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemGridDataLoader.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,18 @@
+package org.drools.brms.client.rulelist;
+
+import org.drools.brms.client.common.GenericCallback;
+
+/**
+ * This is used by the grid view to load data, in a paged fashion (if possible to do paging).
+ *
+ * @author Michael Neale
+ */
+public interface AssetItemGridDataLoader {
+
+	/**
+	 * This will be called by the grid when loading data, needs to know how to skip, and how many rows to load up.
+	 *
+	 * cb will return TableDataResult type.
+	 */
+	void loadData(int startRow, int numberOfRows, GenericCallback cb);
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemListViewer.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemListViewer.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetItemListViewer.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -39,6 +39,9 @@
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.grid.Grid;
+import com.gwtext.client.widgets.grid.event.GridRowListener;
 
 /**
  * This is a viewer for viewing a list of rules for editing/selection.

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/QuickFindWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/QuickFindWidget.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/QuickFindWidget.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -23,6 +23,7 @@
 import org.drools.brms.client.common.FormStyleLayout;
 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.RepositoryServiceFactory;
 import org.drools.brms.client.rpc.TableDataResult;
 import org.drools.brms.client.rpc.TableDataRow;
@@ -83,27 +84,27 @@
         srch.add( searchBox );
         srch.add( go );
 
-        archiveBox = new CheckBox("Include archived items in list");
-        archiveBox.setStyleName( "small-Text" );
+        archiveBox = new CheckBox();
+
         archiveBox.setChecked(false);
 
         layout.addAttribute( "Find items with a name matching:", srch );
-        layout.addRow( archiveBox );
-        layout.addRow( new HTML("<hr/>") );
+        layout.addAttribute("Include archived items in list:", archiveBox);
 
+
         listPanel = new FlexTable();
         listPanel.setWidget( 0, 0, new HTML("<img src='images/information.gif'/>&nbsp;Enter the name or part of a name. Alternatively, use the categories to browse.") );
-        layout.addRow(listPanel);
 
-        listPanel.setStyleName( "editable-Surface" );
+        PrettyFormLayout pfl = new PrettyFormLayout();
+        pfl.startSection();
+        pfl.addRow(listPanel);
+        pfl.endSection();
+        layout.addRow(pfl);
 
 
 
-
         searchBox.addKeyboardListener( getKeyboardListener());
 
-        layout.setStyleName( "quick-find" );
-
         initWidget( layout );
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2008-01-31 07:57:21 UTC (rev 18215)
@@ -20,6 +20,31 @@
 }
 
 
+.VerticalSplitPanel .vsplitter
+{
+    background-color            :    #f3f2e7;
+	border: 1px solid #aa9;
+    /* Pretty much everything */
+    cursor                      :    n-resize;
+
+     /* IE6, IE7, FF2, Safari Win */
+    cursor                      :    row-resize;
+}
+
+.HorizontalSplitPanel .hsplitter
+{
+    background-color            :    #f3f2e7;
+	border: 1px solid #aa9;
+    /* Pretty much everything */
+    cursor                      :    n-resize;
+
+     /* IE6, IE7, FF2, Safari Win */
+    cursor                      :    col-resize;
+}
+
+
+
+
 .testErrorValue { border: 1px solid #CC0000;
 font-color: #CC000;
 font-size: small;
@@ -365,11 +390,11 @@
 	background:#FFF;
 }
 .login-Form {
-	border:1px solid #aa9;
+	border:4px solid #aa9;
 	background:#f6f6f6;
 }
 .resource-name-Label {
-	font-weight:700;
+	#font-weight:700;
 }
 .infoProse {
 	margin:8px;

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.html	2008-01-31 07:57:21 UTC (rev 18215)
@@ -2,14 +2,20 @@
 	<head>
 		<meta name='gwt:module' content='org.drools.brms.JBRMS'/>
 		<link rel='stylesheet' href='JBRMS.css'/>
+
 		<title>JBoss Business Rules Management System</title>
 	    <link rel="shortcut icon" href="images/drools.gif" type="image/gif"/>
 	    <link rel="icon" href="images/drools.gif" type="image/gif"/>
+
+	    <link rel="stylesheet" type="text/css" href="js/ext/resources/css/ext-all.css"/>
+    	<link rel="stylesheet" type="text/css" href="js/ext/resources/css/xtheme-gray.css" />
+
+
 	</head>
-	<body>
-	    <!--<div class="headerBarblue"><img src="images/jbossrules_hdrlogo.png" width="279" height="70" /></div> -->
-	    <div class="headerBarblue"><img src="images/hdrlogo_drools50px.gif" /></div>
-		<!-- This script is the bootstrap stuff that simply must be there; it is sent down uncompressed -->
+	<body class="xtheme-gray">
+	    <div id="loadingMessage" halign="center" valign="center"><img src="images/searching.gif">Loading application,
+	    Please wait. <br/><small>Tip: the first time the application is loaded this may take longer then usual.</small></div>
+	    <!-- script is the bootstrap stuff that simply must be there; it is sent down uncompressed -->
 		<script language='javascript' src='gwt.js'></script>
 		<iframe id='__gwt_historyFrame' style='width:0;height:0;border:0'></iframe>
 	</body>

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


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/site-nav.xml
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/site-nav.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/site-nav.xml	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,23 @@
+<!--
+	There are some static stuff needed by BRMS explorer view,
+	PLEASE DO NOT EDIT THIS FILE
+-->
+
+<side-nav>
+
+	<drools-rules>
+	</drools-rules>
+
+	<drools-packages>
+    </drools-packages>
+
+     <drools-deployment>
+
+     <node title="Deployment" qtip="Dialog Examples" icon="images/package_build.gif">
+     </node>
+
+    </drools-deployment>
+
+    <drools-admin>
+    </drools-admin>
+</side-nav>
\ No newline at end of file


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

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-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -19,6 +19,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.text.DateFormat;
 import java.util.ArrayList;
@@ -31,6 +32,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -38,6 +40,7 @@
 import javax.jcr.ItemExistsException;
 import javax.jcr.RepositoryException;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
@@ -67,6 +70,7 @@
 import org.drools.brms.server.contenthandler.ContentHandler;
 import org.drools.brms.server.contenthandler.IRuleAsset;
 import org.drools.brms.server.contenthandler.IValidating;
+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.MetaDataMapper;
@@ -83,6 +87,7 @@
 import org.drools.repository.AssetItem;
 import org.drools.repository.AssetItemIterator;
 import org.drools.repository.CategoryItem;
+import org.drools.repository.AssetPageList;
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryAdministrator;
@@ -270,18 +275,32 @@
 
     @WebRemote
     @Restrict("#{identity.loggedIn}")
-    public TableDataResult loadRuleListForCategories(String categoryPath) throws SerializableException {
-        long start = System.currentTimeMillis();
+    public TableDataResult loadRuleListForCategories(String categoryPath, int skip, int numRows) throws SerializableException {
+    	//love you
+        //long time = System.currentTimeMillis();
 
-        List list = repository.findAssetsByCategory( categoryPath );
+        AssetPageList list = repository.findAssetsByCategory( categoryPath, skip, numRows );
         TableDisplayHandler handler = new TableDisplayHandler(TableDisplayHandler.DEFAULT_TABLE_TEMPLATE);
-        //log.info("time for load: " + (System.currentTimeMillis() - start) );
-        return handler.loadRuleListTable( list.iterator(), -1 );
+        //log.debug("time for load: " + (System.currentTimeMillis() - time) );
+        return handler.loadRuleListTable( list );
 
     }
 
     @WebRemote
     @Restrict("#{identity.loggedIn}")
+    public TableDataResult loadRuleListForState(String stateName, int skip, int numRows) throws SerializableException {
+    	//love you
+        //long time = System.currentTimeMillis();
+
+        AssetPageList list = repository.findAssetsByState( stateName, false, skip, numRows );
+        TableDisplayHandler handler = new TableDisplayHandler(TableDisplayHandler.DEFAULT_TABLE_TEMPLATE);
+        //log.debug("time for load: " + (System.currentTimeMillis() - time) );
+        return handler.loadRuleListTable( list );
+
+    }
+
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
     public TableConfig loadTableConfig(String listName) {
         TableDisplayHandler handler = new TableDisplayHandler(listName);
         return handler.loadTableConfig();
@@ -609,17 +628,17 @@
     @Restrict("#{identity.loggedIn}")
     public TableDataResult listAssets(String uuid,
                                               String formats[],
-                                              int numRows,
-                                              int startRow) throws SerializableException {
+                                              int skip,
+                                              int numRows) throws SerializableException {
+    	if (numRows == 0) {
+    		throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
+    	}
         long start = System.currentTimeMillis();
         PackageItem pkg = repository.loadPackageByUUID( uuid );
         AssetItemIterator it = pkg.listAssetsByFormat( formats );
-        if (numRows != -1) {
-            it.skip( startRow );
-        }
         TableDisplayHandler handler = new TableDisplayHandler(TableDisplayHandler.DEFAULT_TABLE_TEMPLATE);
         log.debug("time for asset list load: " + (System.currentTimeMillis() - start) );
-        return handler.loadRuleListTable( it, numRows );
+        return handler.loadRuleListTable( it, skip,  numRows );
     }
 
 
@@ -1232,9 +1251,46 @@
 		}
 	}
 
+	@WebRemote
+    @Restrict("#{identity.loggedIn}")
+	public String[] listTypesInPackage(String packageUUID) throws SerializableException {
 
+		PackageItem pkg = this.repository.loadPackageByUUID(packageUUID);
+		List<String> res = new ArrayList<String>();
+		AssetItemIterator it = pkg.listAssetsByFormat(new String[] {AssetFormats.MODEL});
 
+		JarInputStream jis = null;
 
+		try {
+			while(it.hasNext()) {
+				AssetItem asset = (AssetItem) it.next();
+				if (!asset.isArchived()) {
+					jis = new JarInputStream(asset.getBinaryContentAttachment());
+					JarEntry entry = null;
+					while ((entry = jis.getNextJarEntry()) != null) {
+						if (!entry.isDirectory()) {
+							if (entry.getName().endsWith(".class")) {
+								 res.add(ModelContentHandler.convertPathToName(entry.getName()));
+							}
+						}
+					}
 
+				}
+			}
+			return res.toArray(new String[res.size()]);
+		} catch (IOException e) {
+			log.error(e);
+			throw new DetailedSerializableException("Unable to read the jar files in the package.", e.getMessage());
+		} finally {
+			IOUtils.closeQuietly(jis);
+		}
 
+
+	}
+
+
+
+
+
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/contenthandler/ModelContentHandler.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -59,7 +59,7 @@
 			while ((entry = jis.getNextJarEntry()) != null) {
 				if (!entry.isDirectory()) {
 					if (entry.getName().endsWith(".class")) {
-						 buf.append("import " + entry.getName().replace(".class", "").replace("/", "."));
+						 buf.append("import " + convertPathToName(entry.getName()));
 						 buf.append("\n");
 					}
 				}
@@ -72,4 +72,8 @@
 		}
 	}
 
+	public static String convertPathToName(String name) {
+		return name.replace(".class", "").replace("/", ".");
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/security/SecurityServiceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/security/SecurityServiceImpl.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/security/SecurityServiceImpl.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -76,7 +76,7 @@
         } else {
         	HashSet<String> disabled = new HashSet<String>();
         	//disabled.add("QA");
-            return new UserSecurityContext("SINGLE USER MODE (DEBUG) USE ONLY", disabled);
+            return new UserSecurityContext(null, new HashSet());//new UserSecurityContext("SINGLE USER MODE (DEBUG) USE ONLY", disabled);
         }
     }
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/TableDisplayHandler.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -2,13 +2,13 @@
 
 /*
  * 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.
@@ -26,17 +26,18 @@
 import org.drools.brms.client.rpc.TableDataResult;
 import org.drools.brms.client.rpc.TableDataRow;
 import org.drools.repository.AssetItem;
+import org.drools.repository.AssetItemIterator;
+import org.drools.repository.AssetPageList;
 
 import com.google.gwt.user.client.rpc.SerializableException;
 
 /**
  * This utility class handles loading of tables.
- * 
+ *
  * This is to give some flexibility in what fields are displayed.
- * This will likely be dynamic in the future (driven of user config stored in the 
- * repository).
- * 
- * @author michael neale
+ * rulelist.properties and archivedrulelist.properties are the files used.
+ *
+ * @author Michael Neale
  */
 public class TableDisplayHandler {
 
@@ -56,17 +57,38 @@
         ASSET_LIST = new RowLoader( tableconfig );
     }
 
-    public TableDataResult loadRuleListTable(Iterator list,
-                                             int numRows) throws SerializableException {
-        List<TableDataRow> data = new ArrayList<TableDataRow>();
+    public TableDataResult loadRuleListTable(AssetPageList list) throws SerializableException {
+        List<TableDataRow> data = loadRows(list.assets.iterator(), -1);
+        TableDataResult result = new TableDataResult();
+        result.data = (TableDataRow[]) data.toArray( new TableDataRow[data.size()] );
+        result.total  = list.totalSize;
+        result.hasNext = list.hasNext;
+        return result;
+    }
 
-        for ( Iterator iter = list; iter.hasNext(); ) {
-            AssetItem rule = (AssetItem) iter.next();
+    public TableDataResult loadRuleListTable(AssetItemIterator it, int skip, int numRows) {
+    	if (numRows != -1) {
+    		it.skip(skip);
+    	}
+        List<TableDataRow> data = loadRows(it, numRows);
+        TableDataResult result = new TableDataResult();
+        result.data = (TableDataRow[]) data.toArray( new TableDataRow[data.size()] );
+        result.total  = it.getSize();
+        result.hasNext = it.hasNext();
+        return result;
+
+    }
+
+	private List<TableDataRow> loadRows(Iterator<AssetItem> it, int numRows) {
+		List<TableDataRow> data = new ArrayList<TableDataRow>();
+
+        for ( Iterator<AssetItem> iter = it; iter.hasNext(); ) {
+            AssetItem r = (AssetItem) iter.next();
             TableDataRow row = new TableDataRow();
 
-            row.id = rule.getUUID();
-            row.format = rule.getFormat();
-            row.values = ASSET_LIST.getRow( rule );
+            row.id = r.getUUID();
+            row.format = r.getFormat();
+            row.values = ASSET_LIST.getRow( r );
             data.add( row );
             if ( numRows != -1 ) {
                 if ( data.size() == numRows ) {
@@ -74,10 +96,8 @@
                 }
             }
         }
-        TableDataResult result = new TableDataResult();
-        result.data = (TableDataRow[]) data.toArray( new TableDataRow[data.size()] );
-        return result;
-    }
+		return data;
+	}
 
     public String formatDate(Calendar cal) {
         DateFormat localFormat = DateFormat.getDateInstance();
@@ -89,7 +109,7 @@
         final TableConfig config = new TableConfig();
 
         config.headers = ASSET_LIST.getHeaders();
-        config.rowsPerPage = 30;
+        config.rowsPerPage = 40;
         return config;
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/resources/rulelist.properties
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/resources/rulelist.properties	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/resources/rulelist.properties	2008-01-31 07:57:21 UTC (rev 18215)
@@ -8,7 +8,11 @@
 #
 # @author Michael Neale
 #
-*=getFormat
+
+#these must stay the same.
 Name=getName
+Description=getDescription
+
+#you can modify the following...
 Last modified=getLastModified
 Status=getStateDescription

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/AsyncInterfaceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/AsyncInterfaceTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/AsyncInterfaceTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 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.
@@ -19,33 +19,32 @@
 
 import java.lang.reflect.Method;
 
+import junit.framework.TestCase;
+
 import org.drools.brms.client.rpc.RepositoryService;
 import org.drools.brms.client.rpc.RepositoryServiceAsync;
 import org.drools.brms.client.rpc.SecurityService;
 import org.drools.brms.client.rpc.SecurityServiceAsync;
-import org.drools.brms.server.ServiceImplementation;
 
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
-import junit.framework.TestCase;
 
-
 /**
  * This will verify that the interfaces are kosher for GWT to use.
  * @author Michael Neale
  */
 public class AsyncInterfaceTest extends TestCase {
-    
+
     public void testService() throws Exception {
-        
+
         checkService( RepositoryService.class, RepositoryServiceAsync.class );
         checkService( SecurityService.class, SecurityServiceAsync.class );
-        
+
     }
 
     private void checkService(Class clsInt, Class clsAsync) throws NoSuchMethodException {
         for ( Method m : clsInt.getMethods()) {
-            
+
             Class[] paramClasses = new Class[m.getParameterTypes().length + 1];
             Class[] sourceParamClasses = m.getParameterTypes();
             for ( int i = 0; i < sourceParamClasses.length; i++ ) {
@@ -55,5 +54,5 @@
             assertNotNull(clsAsync.getMethod( m.getName(), paramClasses ));
         }
     }
-    
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/packages/PackageHeaderWidgetTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/packages/PackageHeaderWidgetTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/packages/PackageHeaderWidgetTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,108 @@
+package org.drools.brms.client.packages;
+
+import org.drools.brms.client.packages.PackageHeaderWidget.Global;
+import org.drools.brms.client.packages.PackageHeaderWidget.Import;
+import org.drools.brms.client.packages.PackageHeaderWidget.Types;
+
+import junit.framework.TestCase;
+
+public class PackageHeaderWidgetTest extends TestCase {
+
+	public void testEmpty() {
+
+		PackageHeaderWidget.Types t = PackageHeaderWidget.parseHeader(null);
+		assertNotNull(t);
+		assertNotNull(t.globals);
+		assertNotNull(t.imports);
+
+		t = PackageHeaderWidget.parseHeader("");
+		assertNotNull(t);
+		assertNotNull(t.globals);
+		assertNotNull(t.imports);
+
+	}
+
+	public void testImports() {
+		String s = "import goo.bar.Whee;\n\nimport wee.waah.Foo\nimport nee.Nah";
+		PackageHeaderWidget.Types t = PackageHeaderWidget.parseHeader(s);
+		assertNotNull(t);
+		assertNotNull(t.globals);
+		assertNotNull(t.imports);
+
+		assertEquals(0, t.globals.size());
+		assertEquals(3, t.imports.size());
+		Import i = (Import) t.imports.get(0);
+		assertEquals("goo.bar.Whee", i.type);
+
+		i = (Import) t.imports.get(1);
+		assertEquals("wee.waah.Foo", i.type);
+
+		i = (Import) t.imports.get(2);
+		assertEquals("nee.Nah", i.type);
+
+	}
+
+	public void testGlobals() {
+		String s = "global goo.bar.Whee x;\n\nglobal wee.waah.Foo asd\nglobal nee.Nah d";
+		PackageHeaderWidget.Types t = PackageHeaderWidget.parseHeader(s);
+		assertNotNull(t);
+		assertNotNull(t.globals);
+		assertNotNull(t.imports);
+
+		assertEquals(3, t.globals.size());
+		assertEquals(0, t.imports.size());
+
+		Global i = (Global) t.globals.get(0);
+		assertEquals("goo.bar.Whee", i.type);
+		assertEquals("x", i.name);
+
+		i = (Global) t.globals.get(1);
+		assertEquals("wee.waah.Foo", i.type);
+		assertEquals("asd", i.name);
+
+		i = (Global) t.globals.get(2);
+		assertEquals("nee.Nah", i.type);
+		assertEquals("d", i.name);
+
+	}
+
+	public void testGlobalsImports() {
+		String s = "import goo.bar.Whee;\n\nglobal wee.waah.Foo asd";
+		PackageHeaderWidget.Types t = PackageHeaderWidget.parseHeader(s);
+		assertNotNull(t);
+		assertEquals(1, t.imports.size());
+		assertEquals(1, t.globals.size());
+
+		Import i = (Import) t.imports.get(0);
+		assertEquals("goo.bar.Whee", i.type);
+
+		Global g = (Global) t.globals.get(0);
+		assertEquals("wee.waah.Foo", g.type);
+		assertEquals("asd", g.name);
+
+
+	}
+
+	public void testAdvanced() {
+		String s = "import goo.bar.Whee;\nglobal Wee waa;\n \nsomething else maybe dialect !";
+		assertEquals(null, PackageHeaderWidget.parseHeader(s));
+	}
+
+	public void testRenderTypes() {
+		Types t = new Types();
+		t.imports.add(new Import("foo.bar.Baz"));
+		String h = PackageHeaderWidget.renderTypes(t);
+		assertNotNull(h);
+		assertEquals("import foo.bar.Baz", h.trim());
+		t = PackageHeaderWidget.parseHeader(h);
+		assertEquals(1, t.imports.size());
+		Import i = (Import) t.imports.get(0);
+		assertEquals("foo.bar.Baz", i.type);
+
+		t.globals.add(new Global("foo.Bar", "xs"));
+		h = PackageHeaderWidget.renderTypes(t);
+		assertEquals("import foo.bar.Baz\nglobal foo.Bar xs", h.trim());
+
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/client/packages/PackageHeaderWidgetTest.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-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -186,14 +186,16 @@
 				"testRuleTableLoad", "rule");
 
 		TableDataResult result = impl
-				.loadRuleListForCategories("testRuleTableLoad");
+				.loadRuleListForCategories("testRuleTableLoad", 0, -1);
 		assertEquals(2, result.data.length);
 
 		String key = result.data[0].id;
 		assertFalse(key.startsWith("testRule"));
 
 		assertEquals(result.data[0].format, "rule");
-		assertTrue(result.data[0].values[0].startsWith("rule"));
+
+
+		assertTrue(result.data[0].values[0].startsWith("testRuleTableLoad"));
 	}
 
 	public void testDateFormatting() throws Exception {
@@ -215,8 +217,10 @@
 				"testLoadRuleAsset", "testLoadRuleAsset", "drl");
 
 		TableDataResult res = impl
-				.loadRuleListForCategories("testLoadRuleAsset");
+				.loadRuleListForCategories("testLoadRuleAsset", 0, -1);
 		assertEquals(1, res.data.length);
+		assertEquals(1, res.total);
+		assertFalse(res.hasNext);
 
 		TableDataRow row = res.data[0];
 		String uuid = row.id;
@@ -506,31 +510,35 @@
 				"testListByFormat", "testListByFormat");
 
 		TableDataResult res = impl.listAssets(pkgUUID, arr("testListByFormat"),
-				-1, 0);
+				0, -1);
 		assertEquals(4, res.data.length);
 		assertEquals(uuid, res.data[0].id);
 		assertEquals("testListByFormat", res.data[0].values[0]);
 
-		res = impl.listAssets(pkgUUID, arr("testListByFormat"), 4, 0);
+		res = impl.listAssets(pkgUUID, arr("testListByFormat"), 0, 4);
 		assertEquals(4, res.data.length);
 
-		res = impl.listAssets(pkgUUID, arr("testListByFormat"), 2, 0);
+		res = impl.listAssets(pkgUUID, arr("testListByFormat"), 0, 2);
 		assertEquals(2, res.data.length);
 		assertEquals(uuid, res.data[0].id);
+		assertEquals(4, res.total);
+		assertTrue(res.hasNext);
 
 		res = impl.listAssets(pkgUUID, arr("testListByFormat"), 2, 2);
 		assertEquals(2, res.data.length);
 		assertEquals(uuid3, res.data[0].id);
+		assertEquals(4, res.total);
+		assertFalse(res.hasNext);
 
 		uuid = impl.createNewRule("testListByFormat5", "x", cat,
 				"testListByFormat", "otherFormat");
 
-		res = impl.listAssets(pkgUUID, arr("otherFormat"), 40, 0);
+		res = impl.listAssets(pkgUUID, arr("otherFormat"), 0, 40);
 		assertEquals(1, res.data.length);
 		assertEquals(uuid, res.data[0].id);
 
 		res = impl.listAssets(pkgUUID, new String[] { "otherFormat",
-				"testListByFormat" }, 40, 0);
+				"testListByFormat" }, 0, 40);
 		assertEquals(5, res.data.length);
 
 		TableDataResult result = impl.quickFindAsset("testListByForma", 5,
@@ -619,15 +627,15 @@
 				"sourcePackage", "drl");
 
 		TableDataResult res = impl.listAssets(destPkgId,
-				new String[] { "drl" }, 2, 0);
+				new String[] { "drl" }, 0, 2);
 		assertEquals(0, res.data.length);
 
 		impl.changeAssetPackage(uuid, "targetPackage", "yeah");
-		res = impl.listAssets(destPkgId, new String[] { "drl" }, 2, 0);
+		res = impl.listAssets(destPkgId, new String[] { "drl" }, 0, 2);
 
 		assertEquals(1, res.data.length);
 
-		res = impl.listAssets(sourcePkgId, new String[] { "drl" }, 2, 0);
+		res = impl.listAssets(sourcePkgId, new String[] { "drl" }, 0, 2);
 
 		assertEquals(0, res.data.length);
 
@@ -773,12 +781,12 @@
 				"testRemoveAsset", "testRemoveAsset");
 
 		TableDataResult res = impl.listAssets(pkgUUID, arr("testRemoveAsset"),
-				-1, 0);
+				0, -1);
 		assertEquals(4, res.data.length);
 
 		impl.removeAsset(uuid4);
 
-		res = impl.listAssets(pkgUUID, arr("testRemoveAsset"), -1, 0);
+		res = impl.listAssets(pkgUUID, arr("testRemoveAsset"), 0, -1);
 		assertEquals(3, res.data.length);
 	}
 
@@ -800,17 +808,19 @@
 				"testArchiveAsset", "testArchiveAsset");
 
 		TableDataResult res = impl.listAssets(pkgUUID, arr("testArchiveAsset"),
-				-1, 0);
+				0, -1);
 		assertEquals(4, res.data.length);
+		assertEquals(4, res.total);
+		assertFalse(res.hasNext);
 
 		impl.archiveAsset(uuid4, true);
 
-		res = impl.listAssets(pkgUUID, arr("testArchiveAsset"), -1, 0);
+		res = impl.listAssets(pkgUUID, arr("testArchiveAsset"), 0, -1);
 		assertEquals(3, res.data.length);
 
 		impl.archiveAsset(uuid4, false);
 
-		res = impl.listAssets(pkgUUID, arr("testArchiveAsset"), -1, 0);
+		res = impl.listAssets(pkgUUID, arr("testArchiveAsset"), 0, -1);
 		assertEquals(4, res.data.length);
 
 	}
@@ -1689,9 +1699,28 @@
 
 	}
 
+	public void testListFactTypesAvailableInPackage() throws Exception {
+		ServiceImplementation impl = getService();
+		RulesRepository repo = impl.repository;
 
+		PackageItem pkg = repo.createPackage("testAvailableTypes", "");
+		AssetItem model = pkg.addAsset("MyModel", "");
+		model.updateFormat(AssetFormats.MODEL);
+		model.updateBinaryContentAttachment(this.getClass()
+				.getResourceAsStream("/billasurf.jar"));
+		model.checkin("");
+		repo.save();
 
+		String[] s = impl.listTypesInPackage(pkg.getUUID());
+		assertNotNull(s);
+		assertEquals(2, s.length);
+		assertEquals("com.billasurf.Person", s[0]);
+		assertEquals("com.billasurf.Board", s[1]);
+	}
 
+
+
+
 	private ServiceImplementation getService() throws Exception {
 		ServiceImplementation impl = new ServiceImplementation();
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/contenthandler/ContentHandlerTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -79,4 +79,8 @@
 
     }
 
+    public void testNameConvertion() {
+    	assertEquals("com.foo.Bar", ModelContentHandler.convertPathToName("com/foo/Bar.class"));
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -278,6 +278,45 @@
 
 	}
 
+	public void XXtestHeadOOME() throws Exception {
+		RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper
+				.getSession());
+		PackageItem pkg = repo.createPackage("testHeadOOME", "");
+		pkg.updateHeader("import java.util.List");
+		pkg.updateCompiledPackage(new ByteArrayInputStream("foo".getBytes()));
+		pkg.checkin("");
+		repo.logout();
+
+		int iterations = 0;
+
+		while(true) {
+			iterations++;
+			FileManagerUtils fm = new FileManagerUtils();
+			fm.repository = new RulesRepository(TestEnvironmentSessionHelper
+					.getSession());
+
+			if (iterations % 50 == 0) {
+				updatePackage("testHeadOOME");
+			}
+
+			//fm.repository = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+			fm.getLastModified("testHeadOOME", "LATEST");
+			fm.repository.logout();
+			System.err.println("Number " + iterations + " free mem : " + Runtime.getRuntime().freeMemory());
+		}
+
+	}
+
+	private void updatePackage(String nm) throws Exception {
+		System.err.println("---> Updating the package ");
+		RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+		PackageItem pkg = repo.loadPackage(nm);
+		pkg.updateDescription(System.currentTimeMillis() + "");
+		pkg.checkin("a change");
+		repo.logout();
+
+	}
+
 	private List iteratorToList(Iterator assets) {
 		List<AssetItem> list = new ArrayList<AssetItem>();
 		for (Iterator iter = assets; iter.hasNext();) {

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TableDisplayHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TableDisplayHandlerTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/TableDisplayHandlerTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,13 +1,13 @@
 package org.drools.brms.server.util;
 /*
  * 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.
@@ -24,16 +24,17 @@
 public class TableDisplayHandlerTest extends TestCase {
 
     public void testRowLoaders() throws Exception {
-        TableDisplayHandler handler = new TableDisplayHandler(TableDisplayHandler.DEFAULT_TABLE_TEMPLATE);
+
         RowLoader loader = new RowLoader(TableDisplayHandler.DEFAULT_TABLE_TEMPLATE);
-        
+
         assertEquals(4, loader.getHeaders().length);
         String[] headers = loader.getHeaders();
-        assertEquals("*", headers[0]);
-        assertEquals("Name", headers[1]);
+
+        assertEquals("Name", headers[0]);
+        assertEquals("Description", headers[1]);
         assertEquals("Last modified", headers[2]);
         assertEquals("Status", headers[3]);
-        
+
         assertEquals(4, loader.extractors.size());
         assertTrue(loader.extractors.get( 0 ) instanceof Method);
         assertEquals("getLastModified", ((Method)loader.extractors.get( 2 )).getName());

Modified: labs/jbossrules/trunk/drools-jsr94/.project
===================================================================
--- labs/jbossrules/trunk/drools-jsr94/.project	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-jsr94/.project	2008-01-31 07:57:21 UTC (rev 18215)
@@ -1,11 +1,7 @@
 <projectDescription>
   <name>drools-jsr94</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-core</project>
-    <project>drools-compiler</project>
-    <project>drools-decisiontables</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-repository/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-repository/pom.xml	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/pom.xml	2008-01-31 07:57:21 UTC (rev 18215)
@@ -14,26 +14,6 @@
 
   <build>
     <finalName>drools-repository</finalName>
-    <pluginManagement>
-      <plugins>
-	    <plugin>
-	      <artifactId>maven-clean-plugin</artifactId>
-	      <configuration>
-	        <filesets>
-	          <fileset>
-	            <directory>./</directory>
-	            <includes>
-	              <include>repository**/*</include>
-				  <include>repository*.xml</include>
-				  <include>repository</include>				
-	            </includes>
-	            <followSymlinks>false</followSymlinks>
-	          </fileset>
-	        </filesets>
-	      </configuration>
-	    </plugin>
-      </plugins>
-    </pluginManagement>       
   </build>
 
   <repositories>

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -9,10 +9,10 @@
  * This iterates over nodes and produces RuleItem's.
  * Also allows "skipping" of results to jump to certain items,
  * as per JCRs "skip".
- * 
+ *
  * JCR iterators are/can be lazy, so this makes the most of it for large
  * numbers of assets.
- * 
+ *
  * @author Michael Neale
  */
 public class AssetItemIterator
@@ -48,4 +48,12 @@
         it.skip( i );
     }
 
+    /**
+     * @return the size of the underlying iterator's potential data set.
+     * May be -1 if not known.
+     */
+    public long getSize() {
+    	return it.getSize();
+    }
+
 }

Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetPageList.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetPageList.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetPageList.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,24 @@
+package org.drools.repository;
+
+import java.util.List;
+
+/**
+ * Used for holding a page of asset data.
+ *
+ * @author Michael Neale
+ */
+public class AssetPageList {
+
+	public final List assets;
+	public final long totalSize;
+	public final boolean hasNext;
+
+	public AssetPageList(List categories, long totalSize, boolean hasNext) {
+		this.assets = categories;
+		this.totalSize = totalSize;
+		this.hasNext = hasNext;
+	}
+
+
+
+}


Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetPageList.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -11,8 +11,10 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+import javax.jcr.AccessDeniedException;
 import javax.jcr.ImportUUIDBehavior;
 import javax.jcr.ItemExistsException;
+import javax.jcr.ItemNotFoundException;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.PathNotFoundException;
@@ -59,9 +61,7 @@
  * system, and if there is sufficient demand, we can modify our versioning
  * scheme to be better aligned with JCR's versioning abilities.
  *
- * @author Ben Truitt
- * @author Fernando Meyer
- * @author Michael Neale
+ * @author Ben Truitt - with contributions from Michael Neale and Fernando Meyer over time.
  */
 public class RulesRepository {
 
@@ -520,7 +520,8 @@
 
         long oldVersionNumber = headVersion.getVersionNumber();
 
-        Version v = (Version) versionToRestore.getNode();
+        Object vToRestore = versionToRestore.getNode();
+        Version v = (Version) vToRestore;
         try {
             headVersion.getNode().restore( v, true );
             AssetItem newHead = loadAssetByUUID( headVersion.getUUID() );
@@ -680,42 +681,63 @@
      * provided category. Only the latest versions of each RuleItem will be
      * returned (you will have to delve into the rules deepest darkest history
      * yourself... mahahahaha).
+     *
+     * Pass in startRow of 0 to start at zero, numRowsToReturn can be set to -1 should you want it all.
      */
-    public List findAssetsByCategory(String categoryTag, boolean seekArchivedAsset) throws RulesRepositoryException {
+    public AssetPageList findAssetsByCategory(String categoryTag, boolean seekArchivedAsset, int skip, int numRowsToReturn) throws RulesRepositoryException {
+        CategoryItem item = this.loadCategory( categoryTag );
 
-        CategoryItem item = this.loadCategory( categoryTag );
-        List results = new ArrayList();
         try {
-            PropertyIterator it = item.getNode().getReferences();
-
-            while ( it.hasNext() ) {
-                Property ruleLink = (Property) it.next();
-                Node parentNode = ruleLink.getParent();
-                if ( isNotSnapshot( parentNode ) && parentNode.getPrimaryNodeType().getName().equals( AssetItem.RULE_NODE_TYPE_NAME ) ) {
-                    if ( seekArchivedAsset || !parentNode.getProperty( AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG ).getBoolean() ) results.add( new AssetItem( this,
-                                                                                                                                                            parentNode ) );
-                }
-            }
-            return results;
+            return loadLinkedAssets(seekArchivedAsset, skip, numRowsToReturn,
+					item.getNode());
         } catch ( RepositoryException e ) {
             throw new RulesRepositoryException( e );
         }
     }
 
     /**
-     * TODO: Comment
+     * Finds the AssetItem's linked to the requested state.
+     * Similar to finding by category.
      */
-    public List findAssetsByCategory(String categoryTag) throws RulesRepositoryException {
-        return this.findAssetsByCategory( categoryTag, false );
+    public AssetPageList findAssetsByState(String stateName, boolean seekArchivedAsset, int skip, int numRowsToReturn) throws RulesRepositoryException {
+    	StateItem item = this.getState(stateName);
+        try {
+            return loadLinkedAssets(seekArchivedAsset, skip, numRowsToReturn,
+					item.getNode());
+        } catch ( RepositoryException e ) {
+            throw new RulesRepositoryException( e );
+        }
     }
 
-    /**
-     * TODO: comment
-     * @return
-     * @throws IOException
-     * @throws PathNotFoundException
-     * @throws RepositoryException
-     */
+	private AssetPageList loadLinkedAssets(boolean seekArchivedAsset, int skip,
+			int numRowsToReturn, Node n)
+			throws RepositoryException {
+		int rows = 0;
+        List results = new ArrayList();
+
+		PropertyIterator it = n.getReferences();
+		if (skip > 0) it.skip(skip);
+
+		while ( it.hasNext() && (numRowsToReturn == -1 || rows < numRowsToReturn)) {
+		    Property ruleLink = (Property) it.next();
+		    Node parentNode = ruleLink.getParent();
+		    if ( isNotSnapshot( parentNode ) && parentNode.getPrimaryNodeType().getName().equals( AssetItem.RULE_NODE_TYPE_NAME ) ) {
+		        if ( seekArchivedAsset || !parentNode.getProperty( AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG ).getBoolean() )
+		        	{
+		        		results.add( new AssetItem( this, parentNode ) );
+		        		rows++;
+		        	}
+		    }
+		}
+
+		return new AssetPageList(results, it.getSize(), it.hasNext());
+	}
+
+    public AssetPageList findAssetsByCategory(String categoryTag, int skip, int numRowsToReturn) throws RulesRepositoryException {
+        return this.findAssetsByCategory( categoryTag, false, skip, numRowsToReturn );
+    }
+
+
     public byte[] exportRulesRepository() throws IOException,
                                          PathNotFoundException,
                                          RepositoryException {

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ArchiveItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ArchiveItemTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ArchiveItemTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -15,7 +15,7 @@
     private PackageItem getDefaultPackage() {
         return getRepo().loadDefaultPackage();
     }
-    
+
     public void testFindArchivedAssets() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
 
@@ -27,14 +27,14 @@
                                             "X" );
         repo.loadDefaultPackage().addAsset( "testFindArchivedAssets4",
                                             "X" );
-        
+
         AssetItem item = RepositorySessionUtil.getRepository().loadDefaultPackage().loadAsset( "testFindArchivedAssets1" );
         assertFalse( item.isArchived() );
         item.archiveItem( true );
         item.checkin( "archiving item 1" );
         item = RepositorySessionUtil.getRepository().loadDefaultPackage().loadAsset( "testFindArchivedAssets1" );
         assertTrue( item.isArchived() );
-        
+
         item = RepositorySessionUtil.getRepository().loadDefaultPackage().loadAsset( "testFindArchivedAssets2" );
         assertFalse( item.isArchived() );
         item.archiveItem( true );
@@ -48,13 +48,13 @@
         item.checkin( "archiving item 1" );
         item = RepositorySessionUtil.getRepository().loadDefaultPackage().loadAsset( "testFindArchivedAssets3" );
         assertTrue( item.isArchived() );
-        
-        
-        AssetItemIterator it =  repo.findArchivedAssets(); 
-        
+
+
+        AssetItemIterator it =  repo.findArchivedAssets();
+
         List list = iteratorToList( it );
         assertEquals(3, list.size());
-        
+
     }
 
     public void testArchiveBooleanFlag() throws Exception {
@@ -93,12 +93,12 @@
         assertEquals( "drl",
                       as1.getFormat() );
 
-        List rules = getRepo().findAssetsByCategory( "testFindRulesByCatArchive" );
+        List rules = getRepo().findAssetsByCategory( "testFindRulesByCatArchive", 0, -1  ).assets;
         assertEquals( 1,
                       rules.size() );
 
         List rules1 = getRepo().findAssetsByCategory( "testFindRulesByCatArchive",
-                                                      true );
+                                                      true, 0, -1  ).assets;
         assertEquals( 2,
                       rules1.size() );
     }

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/AssetItemTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -126,47 +126,106 @@
     }
 
 
+    public void testCategoriesPagination() {
+    		PackageItem pkg = getRepo().createPackage("testPagination", "");
+    		getRepo().loadCategory( "/" ).addCategory( "testPagedTag", "description" );
+
+            AssetItem a = pkg.addAsset("testPage1", "test content");
+            a.addCategory("testPagedTag");
+            a.checkin("");
+
+            a = pkg.addAsset("testPage2", "test content");
+            a.addCategory("testPagedTag");
+            a.checkin("");
+
+            a = pkg.addAsset("testPage3", "test content");
+            a.addCategory("testPagedTag");
+            a.checkin("");
+
+            a = pkg.addAsset("testPage4", "test content");
+            a.addCategory("testPagedTag");
+            a.checkin("");
+
+            a = pkg.addAsset("testPage5", "test content");
+            a.addCategory("testPagedTag");
+            a.checkin("");
+
+            AssetPageList list = getRepo().findAssetsByCategory("testPagedTag", 0, -1);
+            assertEquals(5, list.totalSize);
+            assertEquals(5, list.assets.size());
+            assertEquals(false, list.hasNext);
+
+
+
+            list = getRepo().findAssetsByCategory("testPagedTag", 0, 2);
+            assertEquals(5, list.totalSize);
+            assertEquals(true, list.hasNext);
+            assertEquals(2, list.assets.size());
+
+            assertEquals("testPage1", ((AssetItem)list.assets.get(0)).getName());
+            assertEquals("testPage2", ((AssetItem)list.assets.get(1)).getName());
+
+            list = getRepo().findAssetsByCategory("testPagedTag", 2, 2);
+            assertEquals(5, list.totalSize);
+            assertEquals(true, list.hasNext);
+            assertEquals(2, list.assets.size());
+
+            assertEquals("testPage3", ((AssetItem)list.assets.get(0)).getName());
+            assertEquals("testPage4", ((AssetItem)list.assets.get(1)).getName());
+
+            list = getRepo().findAssetsByCategory("testPagedTag", 2, 3);
+            assertEquals(5, list.totalSize);
+            assertEquals(false, list.hasNext);
+            assertEquals(3, list.assets.size());
+
+            assertEquals("testPage3", ((AssetItem)list.assets.get(0)).getName());
+            assertEquals("testPage4", ((AssetItem)list.assets.get(1)).getName());
+            assertEquals("testPage5", ((AssetItem)list.assets.get(2)).getName());
+
+    }
+
     public void testCategories() {
-            AssetItem ruleItem1 = getDefaultPackage().addAsset("testAddTag", "test content");
+        AssetItem ruleItem1 = getDefaultPackage().addAsset("testAddTag", "test content");
 
-            getRepo().loadCategory( "/" ).addCategory( "testAddTagTestTag", "description" );
+        getRepo().loadCategory( "/" ).addCategory( "testAddTagTestTag", "description" );
 
-            ruleItem1.addCategory("testAddTagTestTag");
-            List tags = ruleItem1.getCategories();
-            assertEquals(1, tags.size());
-            assertEquals("testAddTagTestTag", ((CategoryItem)tags.get(0)).getName());
+        ruleItem1.addCategory("testAddTagTestTag");
+        List tags = ruleItem1.getCategories();
+        assertEquals(1, tags.size());
+        assertEquals("testAddTagTestTag", ((CategoryItem)tags.get(0)).getName());
 
-            getRepo().loadCategory( "/" ).addCategory( "testAddTagTestTag2", "description" );
-            ruleItem1.addCategory("testAddTagTestTag2");
-            tags = ruleItem1.getCategories();
-            assertEquals(2, tags.size());
+        getRepo().loadCategory( "/" ).addCategory( "testAddTagTestTag2", "description" );
+        ruleItem1.addCategory("testAddTagTestTag2");
+        tags = ruleItem1.getCategories();
+        assertEquals(2, tags.size());
 
-            ruleItem1.checkin( "woot" );
+        ruleItem1.checkin( "woot" );
 
-            //now test retrieve by tags
-            List result = getRepo().findAssetsByCategory("testAddTagTestTag");
-            assertEquals(1, result.size());
-            AssetItem retItem = (AssetItem) result.get( 0 );
-            assertEquals("testAddTag", retItem.getName());
+        //now test retrieve by tags
+        List result = getRepo().findAssetsByCategory("testAddTagTestTag", 0, -1).assets;
+        assertEquals(1, result.size());
+        AssetItem retItem = (AssetItem) result.get( 0 );
+        assertEquals("testAddTag", retItem.getName());
 
-            ruleItem1.updateContent( "foo" );
-            ruleItem1.checkin( "latest" );
+        ruleItem1.updateContent( "foo" );
+        ruleItem1.checkin( "latest" );
 
-            result = getRepo().findAssetsByCategory( "testAddTagTestTag" );
+        result = getRepo().findAssetsByCategory( "testAddTagTestTag",0, -1 ).assets;
 
-            assertEquals(1, result.size());
+        assertEquals(1, result.size());
 
-            ruleItem1 = (AssetItem) result.get( 0 );
-            assertEquals(2, ruleItem1.getCategories().size());
+        ruleItem1 = (AssetItem) result.get( 0 );
+        assertEquals(2, ruleItem1.getCategories().size());
 
-            assertEquals("foo", ruleItem1.getContent());
-            AssetItem prev = (AssetItem) ruleItem1.getPrecedingVersion();
-            assertNotNull(prev);
+        assertEquals("foo", ruleItem1.getContent());
+        AssetItem prev = (AssetItem) ruleItem1.getPrecedingVersion();
+        assertNotNull(prev);
 
 
 
     }
 
+
     public void testUpdateCategories() {
         getRepo().loadCategory( "/" ).addCategory( "testUpdateCategoriesOnAsset", "la" );
         getRepo().loadCategory( "/" ).addCategory( "testUpdateCategoriesOnAsset2", "la" );
@@ -197,7 +256,7 @@
 
         assertEquals("drl", as1.getFormat());
 
-        List rules = getRepo().findAssetsByCategory( "testFindRulesByCat" );
+        List rules = getRepo().findAssetsByCategory( "testFindRulesByCat", 0, -1 ).assets;
         assertEquals(2, rules.size());
 
         for ( Iterator iter = rules.iterator(); iter.hasNext(); ) {
@@ -293,6 +352,8 @@
             StateItem stateItem1 = ruleItem1.getState();
             assertEquals(StateItem.DRAFT_STATE_NAME, stateItem1.getName());
 
+
+
             ruleItem1.updateState("TestState1");
             assertNotNull(ruleItem1.getState());
             assertEquals("TestState1", ruleItem1.getState().getName());

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RulesRepositoryTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -75,16 +75,31 @@
 
     }
 
-    public void testFindRulesByName() throws Exception {
+    public void testFindByState() throws Exception {
         RulesRepository repo = RepositorySessionUtil.getRepository();
+        PackageItem pkg = repo.createPackage("testFindByStatePackage", "heheheh");
+        AssetItem asset1 = pkg.addAsset("asset1", "");
+        AssetItem asset2 = pkg.addAsset("asset2", "");
+        repo.createState("testFindByState");
+        repo.save();
+        asset1.updateState("testFindByState");
+        asset2.updateState("testFindByState");
+        asset1.checkin("");
+        asset2.checkin("");
 
+        AssetPageList list = repo.findAssetsByState("testFindByState", true, 0, -1);
+        assertEquals(2, list.assets.size());
 
 
+    }
+
+    public void testFindRulesByName() throws Exception {
+        RulesRepository repo = RepositorySessionUtil.getRepository();
+
         repo.loadDefaultPackage().addAsset( "findRulesByNamex1", "X" );
         repo.loadDefaultPackage().addAsset( "findRulesByNamex2", "X" );
         repo.save();
 
-
         List list = iteratorToList(repo.findAssetsByName( "findRulesByNamex1" ));
 	    assertEquals(1, list.size());
 
@@ -95,7 +110,6 @@
         list = iteratorToList( repo.findAssetsByName( "findRulesByNamex%") );
         assertEquals(2, list.size());
 
-
         repo.createPackageSnapshot( RulesRepository.DEFAULT_PACKAGE, "testFindRulesByName" );
         repo.save();
 
@@ -105,7 +119,6 @@
         assertEquals("X", item.getDescription());
         assertEquals(1, list.size());
 
-
         list = iteratorToList( repo.findAssetsByName( "findRulesByNamex%" ) );
         assertEquals(2, list.size());
 
@@ -273,11 +286,11 @@
         pkg.addAsset( "testCat2", "x", "/testCategoriesAndSnapshots", "drl");
         repo.save();
 
-        List items = repo.findAssetsByCategory( "/testCategoriesAndSnapshots" );
+        List items = repo.findAssetsByCategory( "/testCategoriesAndSnapshots", 0, -1 ).assets;
         assertEquals(2, items.size());
 
         repo.createPackageSnapshot( "testCategoriesAndSnapshots", "SNAP 1" );
-        items = repo.findAssetsByCategory( "testCategoriesAndSnapshots" );
+        items = repo.findAssetsByCategory( "testCategoriesAndSnapshots", 0, -1  ).assets;
         assertEquals(2, items.size());
 
 

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java	2008-01-31 07:57:21 UTC (rev 18215)
@@ -20,8 +20,8 @@
 import junit.framework.TestCase;
 
 
-/** 
- * This is a bit of a hacked scalability test. 
+/**
+ * This is a bit of a hacked scalability test.
  * It will add 5000 odd rule nodes, and then do some basic operations.
  * It will take a LONG time to add these nodes, and does it in batches.
  *
@@ -30,41 +30,41 @@
 
     private static final int NUM = 5000;
     private RulesRepository repo;
-    
+
     public void testDummy() {
-        
+
     }
-    
+
     public void xxtestRun() throws Exception {
         JCRRepositoryConfigurator config = new JackrabbitRepositoryConfigurator();
-        
+
         Session session = config.getJCRRepository("./scalabilityTestRepo").login(
                                            new SimpleCredentials("alan_parsons", "password".toCharArray()));
 
-        
-        repo = new RulesRepository(session);   
-        
+
+        repo = new RulesRepository(session);
+
         long start = System.currentTimeMillis();
         //setupData( repo );
         System.out.println("time to add, version and tag 5000: " + (System.currentTimeMillis() - start));
         List list = listACat(repo);
         System.out.println("list size is: " + list.size());
-        
+
         start = System.currentTimeMillis();
         AssetItem item = (AssetItem) list.get( 0 );
         item.updateContent( "this is a description" );
         item.checkin( "newer" );
         System.out.println("time to update and version: " + (System.currentTimeMillis() - start));
-        
+
         start = System.currentTimeMillis();
         item = (AssetItem) list.get( 42 );
         item.updateContent( "this is a description" );
         item.updateContent( "wooooooooooooooooooooooooooooooooooot" );
         item.checkin( "latest" );
-        System.out.println("time to update and version: " + (System.currentTimeMillis() - start));        
-        
+        System.out.println("time to update and version: " + (System.currentTimeMillis() - start));
+
     }
-    
+
 //    /** This tests it "bare" just setting properties on node types directly. */
 //    public void xxxtestBare() throws Exception {
 //        hackit();
@@ -72,115 +72,115 @@
 
     private List listACat(RulesRepository repo) {
         long start = System.currentTimeMillis();
-        List results = repo.findAssetsByCategory( "HR/CAT_1" );
+        List results = repo.findAssetsByCategory( "HR/CAT_1", 0, -1  ).assets;
         System.out.println("Time for listing a cat: " + (System.currentTimeMillis() - start));
-        
+
         start = System.currentTimeMillis();
-        List results2 = repo.findAssetsByCategory( "HR/CAT_1" );
+        List results2 = repo.findAssetsByCategory( "HR/CAT_1", 0, -1  ).assets;
         System.out.println("Time for listing a cat: " + (System.currentTimeMillis() - start));
 
 
         start = System.currentTimeMillis();
-        results2 = repo.findAssetsByCategory( "HR/CAT_100" );
+        results2 = repo.findAssetsByCategory( "HR/CAT_100", 0, -1  ).assets;
         System.out.println("Time for listing a cat: " + (System.currentTimeMillis() - start));
 
         start = System.currentTimeMillis();
-        results2 = repo.findAssetsByCategory( "HR/CAT_100" );
+        results2 = repo.findAssetsByCategory( "HR/CAT_100", 0, -1  ).assets;
         System.out.println("Time for listing a cat: " + (System.currentTimeMillis() - start));
 
-        
+
         return results;
     }
 
     /** To run this, need to hack the addRule method to not save a session */
     private void setupData(RulesRepository repo) throws Exception {
-        
 
+
         int count = 1;
-        
+
         List list = new ArrayList();
-        
+
         String prefix = "HR/";
         String cat = prefix + "CAT_1";
         for (int i=1; i <= NUM; i++ ) {
-            
+
             if (i % 500 == 0) {
                 repo.getSession().save();
                 for ( Iterator iter = list.iterator(); iter.hasNext(); ) {
-                    AssetItem element = (AssetItem) iter.next();                    
-                    element.getNode().checkin();                    
+                    AssetItem element = (AssetItem) iter.next();
+                    element.getNode().checkin();
                 }
                 list.clear();
             }
-            
-            
+
+
             if (i > 2500) {
                 prefix = "FINANCE/";
             }
-            
+
             if (count == 100) {
                 count = 1;
                 cat = prefix + "CAT_" + i;
                 System.err.println("changing CAT");
                 System.gc();
-                
+
             } else {
                 count++;
-            }            
-            
+            }
+
             String ruleName = "rule_" + i + "_" + System.currentTimeMillis();
             System.out.println("ADDING rule: " + ruleName);
-                        
-            
-            AssetItem item = repo.loadDefaultPackage().addAsset( ruleName, "Foo(bar == " + i + ")panic(" + i + ");" );            
+
+
+            AssetItem item = repo.loadDefaultPackage().addAsset( ruleName, "Foo(bar == " + i + ")panic(" + i + ");" );
             item.addCategory( cat );
             list.add( item );
-            
+
         }
-        
-        
-        
 
+
+
+
     }
-    
 
+
 //    private void hackit() throws Exception {
-//        
-//        
+//
+//
 //        RulesRepository repo = new RulesRepository(true);
 //        Session session = repo.getSession();
-//        
-//        
+//
+//
 //        Node folderNode = session.getRootNode().getNode("drools:repository/drools:rule_area");
-//        
+//
 //        for (int i=1 ; i <= 50; i++) {
-//            
+//
 //            System.out.println("doing: Rule " + i);
-//            
+//
 //            //create the node - see section 6.7.22.6 of the spec
 //            Node ruleNode = folderNode.addNode("Rule_" + i, RuleItem.RULE_NODE_TYPE_NAME );
-//                        
+//
 //            ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, "Rule_" + i);
-//            
+//
 //            //TODO: set this property correctly once we've figured out logging in / JAAS
 //            ruleNode.setProperty(RuleItem.CONTRIBUTOR_PROPERTY_NAME, "not yet implemented");
-//                        
+//
 //            ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
 //            ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
 //            ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, "LHS_" + i);
-//            ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, "RHS_" + i);                        
+//            ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, "RHS_" + i);
 //            ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT, "Initial" );
-//            
-//            
+//
+//
 //            Calendar lastModified = Calendar.getInstance();
 //            ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
 //            if (i % 500 == 0) {
 //                System.out.println("saving......");
 //                session.save();
-//                System.out.println("finished.");                
+//                System.out.println("finished.");
 //            }
 //        }
-//        
+//
 //    }
-    
+
 }

Added: labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.pom
===================================================================
--- labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.pom	                        (rev 0)
+++ labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.pom	2008-01-31 07:57:21 UTC (rev 18215)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>com.gwtext</groupId>
+
+  <artifactId>gwtext</artifactId>
+
+  <name>gwtext</name>
+
+  <version>0.9.3</version>
+
+  <description></description>
+
+  <build>
+    <sourceDirectory></sourceDirectory>
+    <testSourceDirectory></testSourceDirectory>
+  </build>
+</project>
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/m2_repo/com/gwtext/gwtext/0.9.3/gwtext-0.9.3.pom
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2008-01-31 06:25:20 UTC (rev 18214)
+++ labs/jbossrules/trunk/pom.xml	2008-01-31 07:57:21 UTC (rev 18215)
@@ -914,6 +914,11 @@
         <artifactId>commons-fileupload</artifactId>
         <version>1.1.1</version>
       </dependency>
+      <dependency>
+	<groupId>com.gwtext</groupId>
+	<artifactId>gwtext</artifactId>
+	<version>0.9.3</version>
+      </dependency>
 
       <!-- drools-examples -->
       <dependency>




More information about the jboss-svn-commits mailing list