[jboss-svn-commits] JBL Code SVN: r32803 - in labs/jbossrules/branches/drools_repo_services_diega_baunax: drools-repository-model/src/main/java and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 10 17:39:00 EDT 2010


Author: diegoll
Date: 2010-05-10 17:38:57 -0400 (Mon, 10 May 2010)
New Revision: 32803

Added:
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFactUsage.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFieldUsage.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReport.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReportLine.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResult.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResultLine.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/Cause.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/ElementContainerTransferNode.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactMetaModel.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactModels.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FieldMetaModel.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/HumanTaskTransferNode.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/MetaData.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertiesHolder.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertyHolder.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleAsset.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleContentText.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleFlowContentModel.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConnectionRef.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConstraint.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitTransferNode.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferConnection.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferNode.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkItemTransferNode.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkingSetConfigData.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/exceptions/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/exceptions/SerializableException.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/ContentManager.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/RepositoryService.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/RepositoryServicesImpl.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/BRMSPackageBuilder.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentAssemblyError.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentPackageAssembler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowContentModelBuilder.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowProcessBuilder.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPELHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPMN2ProcessHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BRLContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BaseXStreamContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DRLFileContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLDefinitionContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLRuleContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DecisionTableXLSHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DefaultContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/EnumerationContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FactModelContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FunctionContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/GuidedDTContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICanHasAttachment.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICompilable.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IRuleAsset.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IValidating.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ModelContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PlainTextContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PropertiesHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/RuleFlowHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ScenarioContentHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/TemplateModelHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/WorkingSetHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/XmlFileHandler.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/Allow.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/AssetSelector.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/BuiltInSelector.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/RuleBasedSelector.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/SelectorManager.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTPersistence.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTXMLPersistence.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/MetaDataMapper.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/PropertiesPersistence.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/ServiceImplementation.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/resources/contenthandler.properties
Modified:
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/pom.xml
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/pom.xml
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/AssetsService.java
   labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/AssetsServiceImpl.java
Log:
first service migrated

Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/pom.xml
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/pom.xml	2010-05-10 19:57:52 UTC (rev 32802)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/pom.xml	2010-05-10 21:38:57 UTC (rev 32803)
@@ -12,6 +12,14 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-ide-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-factconstraint</artifactId>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.7</version>

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFactUsage.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFactUsage.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFactUsage.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,10 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+
+public class AnalysisFactUsage implements Serializable {
+
+	public String name;
+	public AnalysisFieldUsage[] fields;
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFieldUsage.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFieldUsage.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisFieldUsage.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,10 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+
+public class AnalysisFieldUsage implements Serializable {
+
+	public String name;
+	public String[] rules;
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReport.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReport.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReport.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,10 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+
+public class AnalysisReport implements Serializable {
+	public AnalysisReportLine[] errors;
+	public AnalysisReportLine[] warnings;
+	public AnalysisReportLine[] notes;
+	public AnalysisFactUsage[] factUsages;
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReportLine.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReportLine.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/AnalysisReportLine.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,30 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * This is a single line of an analysis report.
+ */
+public class AnalysisReportLine
+    implements
+    Serializable {
+
+    public String              description;
+    public String              reason;
+    public Integer                patternOrderNumber;
+    public Cause[]             causes;
+    public Map<String, String> impactedRules;
+
+    public AnalysisReportLine() {
+    }
+
+    public AnalysisReportLine(String description,
+                              String reason,
+                              Cause[] causes) {
+        this.description = description;
+        this.reason = reason;
+        this.causes = causes;
+    }
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResult.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResult.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResult.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,32 @@
+package org.drools.repository.model.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 java.io.Serializable;
+
+/**
+ * Returned by the builder.
+ * 
+ * @author Michael Neale
+ */
+public class BuilderResult implements Serializable {
+
+	public BuilderResultLine[] lines = new BuilderResultLine[0];
+
+	public AnalysisReport verifierReport;
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResultLine.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResultLine.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/BuilderResultLine.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,39 @@
+package org.drools.repository.model.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 java.io.Serializable;
+
+/**
+ * Returned by the builder.
+ * 
+ * @author Michael Neale
+ */
+public class BuilderResultLine implements Serializable {
+
+	public String assetFormat;
+	public String assetName;
+	public String uuid;
+	public String message;
+
+	public String toString() {
+		return "Asset: " + assetName + "." + assetFormat + "\n" + // NON-NLS
+		        "Message: " + message + "\n" + // NON-NLS
+		        "UUID: " + uuid; // NON-NLS
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/Cause.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/Cause.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/Cause.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,44 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * @author trikkola
+ *
+ */
+public class Cause
+    implements
+    Serializable {
+
+    private String  cause;
+    private Cause[] causes;
+
+    public Cause() {
+        this.cause = "";
+        this.causes = new Cause[0];
+    }
+
+    public Cause(String cause,
+                 Cause[] causes) {
+        this.cause = cause;
+        this.causes = causes;
+    }
+
+    public void setCause(String cause) {
+        this.cause = cause;
+    }
+
+    public String getCause() {
+        return cause;
+    }
+
+    public void setCauses(Cause[] causes) {
+        this.causes = causes;
+    }
+
+    public Cause[] getCauses() {
+        return causes;
+    }
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/ElementContainerTransferNode.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/ElementContainerTransferNode.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/ElementContainerTransferNode.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,36 @@
+package org.drools.repository.model.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.
+ */
+
+public class ElementContainerTransferNode extends TransferNode {
+
+	private RuleFlowContentModel contentModel;
+
+	public ElementContainerTransferNode() {
+		this.width = 200;
+		this.height = 150;
+	}
+
+	public void setContentModel(RuleFlowContentModel contentModel) {
+		this.contentModel = contentModel;
+	}
+
+	public RuleFlowContentModel getContentModel() {
+		return contentModel;
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactMetaModel.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactMetaModel.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactMetaModel.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,28 @@
+package org.drools.repository.model.client;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+/**
+ * Represents the GUI data for a fact model definition.
+ *
+ * @author Michael Neale
+ */
+public class FactMetaModel implements PortableObject {
+
+	public String name;
+
+	public List<FieldMetaModel> fields = new ArrayList<FieldMetaModel>();
+
+	public FactMetaModel() {}
+	public FactMetaModel(String name, List fields) {
+		this.name = name;
+		this.fields = fields;
+	}
+
+
+
+}
+

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactModels.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactModels.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FactModels.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,14 @@
+package org.drools.repository.model.client;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.io.Serializable;
+
+public class FactModels implements PortableObject {
+
+	public List<FactMetaModel> models = new ArrayList<FactMetaModel>();
+
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FieldMetaModel.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FieldMetaModel.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/FieldMetaModel.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,16 @@
+package org.drools.repository.model.client;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+public class FieldMetaModel implements PortableObject {
+
+	public String name;
+	public String type;
+
+	public FieldMetaModel() {}
+	public FieldMetaModel(String name, String type) {
+		this.name = name;
+		this.type = type;
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/HumanTaskTransferNode.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/HumanTaskTransferNode.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/HumanTaskTransferNode.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,34 @@
+package org.drools.repository.model.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 java.util.HashMap;
+import java.util.Map;
+
+public class HumanTaskTransferNode extends TransferNode {
+
+    public Map<String, String> parameters = new HashMap<String, String>();
+
+    public void setParameters(Map<String, String> parameters) {
+        this.parameters = parameters;
+    }
+
+    public Map<String, String> getParameters() {
+        return parameters;
+    }
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/MetaData.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/MetaData.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/MetaData.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,96 @@
+package org.drools.repository.model.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 java.io.Serializable;
+import java.util.Date;
+
+/**
+ * This is the DTO for a versionable asset's meta data.
+ * ie basically everything except the payload.
+ */
+public class MetaData implements Serializable {
+
+    public String   name             = "";
+    public String   description      = "";
+
+    public String   title            = "";
+    public String   status           = "";
+
+    public Date     lastModifiedDate;
+    public String   lastContributor  = "";
+    public long     versionNumber;
+
+    public Date     createdDate;
+
+    public String   packageName      = "";
+    public String   packageUUID      = "";
+    public String[] categories       = new String[0];
+
+    public String   format           = "";
+    public String   type             = "";
+    public String   creator          = "";
+    public String   externalSource   = "";
+    public String   subject          = "";
+    public String   externalRelation = "";
+    public String   rights           = "";
+    public String   coverage         = "";
+    public String   publisher        = "";
+    public String   checkinComment   = "";
+
+    public boolean  disabled         = false;
+
+    public Date     dateEffective;
+    public Date     dateExpired;
+
+    /**
+     * Remove a category.
+     * @param idx The index of the cat to remove.
+     */
+    public void removeCategory(int idx) {
+        String[] newList = new String[categories.length - 1];
+        int newIdx = 0;
+        for ( int i = 0; i < categories.length; i++ ) {
+
+            if ( i != idx ) {
+                newList[newIdx] = categories[i];
+                newIdx++;
+            }
+
+        }
+        this.categories = newList;
+    }
+
+    /**
+     * Add the given cat to the end of the cat list.
+     */
+    public void addCategory(String cat) {
+        for ( int i = 0; i < this.categories.length; i++ ) {
+            if ( categories[i].equals( cat ) ) return;
+        }
+        String[] list = this.categories;
+        String[] newList = new String[list.length + 1];
+
+        for ( int i = 0; i < list.length; i++ ) {
+            newList[i] = list[i];
+        }
+        newList[list.length] = cat;
+
+        this.categories = newList;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertiesHolder.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertiesHolder.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertiesHolder.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,33 @@
+package org.drools.repository.model.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 java.util.ArrayList;
+import java.util.List;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+
+/**
+ * Properties representation used for RPC data exchange
+ *
+ *  @author Anton Arhipov
+ */
+public class PropertiesHolder implements PortableObject {
+
+    public List<PropertyHolder> list = new ArrayList<PropertyHolder>();
+
+}
+

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertyHolder.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertyHolder.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/PropertyHolder.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,40 @@
+package org.drools.repository.model.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.ide.common.client.modeldriven.brl.PortableObject;
+
+/**
+ * key/value pair to be used as an exchange object for properties rule asset
+ *
+ * @author Anton Arhipov
+ */
+public class PropertyHolder implements PortableObject {
+    public String name;
+    public String value;
+
+    public PropertyHolder() {
+    }
+
+    public PropertyHolder(String name, String value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String toString() {
+        return "{" + name + "," + value + "}";
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleAsset.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleAsset.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleAsset.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,40 @@
+package org.drools.repository.model.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 java.io.Serializable;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+/**
+ * This is the "payload" of a rule asset.
+ * Includes the meta data.
+ */
+public class RuleAsset implements Serializable {
+
+    public MetaData       metaData;
+    public PortableObject content;
+
+    public String         uuid;
+    public boolean        isreadonly = false;
+
+    public long getVersionNumber() {
+        return metaData.versionNumber;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleContentText.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleContentText.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleContentText.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,31 @@
+package org.drools.repository.model.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.ide.common.client.modeldriven.brl.PortableObject;
+
+/**
+ * This is the guts of a plain text (advanced) rule.
+ * @author Michael Neale
+ */
+public class RuleContentText
+    implements
+        PortableObject {
+    
+    public String content;
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleFlowContentModel.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleFlowContentModel.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/RuleFlowContentModel.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,55 @@
+package org.drools.repository.model.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 java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+public class RuleFlowContentModel implements PortableObject {
+
+	private List<TransferNode> nodes = new ArrayList<TransferNode>();
+	private Collection<TransferConnection> connections = new ArrayList<TransferConnection>();
+	private String xml;
+
+	public void setNodes(List<TransferNode> nodes) {
+		this.nodes = nodes;
+	}
+
+	public Collection<TransferNode> getNodes() {
+		return nodes;
+	}
+
+	public void setConnections(Collection<TransferConnection> connections) {
+		this.connections = connections;
+	}
+
+	public Collection<TransferConnection> getConnections() {
+		return connections;
+	}
+
+	public void setXml(String xml) {
+		this.xml = xml;
+	}
+
+	public String getXml() {
+		return xml;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConnectionRef.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConnectionRef.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConnectionRef.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,38 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+
+public class SplitConnectionRef implements Serializable {
+
+	private String toType;
+	private long nodeId;
+
+	public void setToType(String toType) {
+		this.toType = toType;
+	}
+
+	public void setNodeId(long nodeId) {
+		this.nodeId = nodeId;
+	}
+
+	public String getToType() {
+		return toType;
+	}
+
+	public long getNodeId() {
+		return nodeId;
+	}
+
+	public boolean equals(Object o) {
+		if (o instanceof SplitConnectionRef) {
+			SplitConnectionRef c = (SplitConnectionRef) o;
+			return toType.equals(c.toType) && nodeId == c.nodeId;
+		}
+		return false;
+	}
+
+	public int hashCode() {
+		return 7 * toType.hashCode() + (int) nodeId;
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConstraint.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConstraint.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitConstraint.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,56 @@
+/**
+ * 
+ */
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+
+public class SplitConstraint implements Serializable {
+
+	private String constraint;
+	private String dialect;
+	private int priority;
+	private String name;
+	private String type;
+
+	public String getConstraint() {
+		return this.constraint;
+	}
+
+	public String getDialect() {
+		return this.dialect;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public int getPriority() {
+		return this.priority;
+	}
+
+	public String getType() {
+		return this.type;
+	}
+
+	public void setConstraint(String constraint) {
+		this.constraint = constraint;
+	}
+
+	public void setDialect(String dialect) {
+		this.dialect = dialect;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setPriority(int priority) {
+		this.priority = priority;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitTransferNode.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitTransferNode.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/SplitTransferNode.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,70 @@
+package org.drools.repository.model.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 java.util.HashMap;
+import java.util.Map;
+
+public class SplitTransferNode extends TransferNode {
+
+	private Map<SplitConnectionRef, SplitConstraint> constraints = new HashMap<SplitConnectionRef, SplitConstraint>();
+	private Type splitType;
+
+	public enum Type {
+		UNDEFINED(0), AND(1), XOR(2), OR(3);
+
+		private final int value;
+
+		Type(int i) {
+			value = i;
+		}
+
+		int getValue() {
+			return value;
+		}
+
+		public static Type getType(int i) {
+			switch (i) {
+			case 0:
+				return Type.UNDEFINED;
+			case 1:
+				return Type.AND;
+			case 2:
+				return Type.XOR;
+			case 3:
+			default:
+				return Type.OR;
+			}
+		}
+	}
+
+	public void setConstraints(Map<SplitConnectionRef, SplitConstraint> constraints) {
+		this.constraints = constraints;
+	}
+
+	public Map<SplitConnectionRef, SplitConstraint> getConstraints() {
+		return constraints;
+	}
+
+	public void setSplitType(Type splitType) {
+		this.splitType = splitType;
+	}
+
+	public Type getSplitType() {
+		return splitType;
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferConnection.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferConnection.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferConnection.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,42 @@
+package org.drools.repository.model.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 java.io.Serializable;
+
+public class TransferConnection implements Serializable {
+
+	private long fromId;
+	private long toId;
+
+	public void setFromId(long fromId) {
+		this.fromId = fromId;
+	}
+
+	public long getFromId() {
+		return fromId;
+	}
+
+	public void setToId(long toId) {
+		this.toId = toId;
+	}
+
+	public long getToId() {
+		return toId;
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferNode.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferNode.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/TransferNode.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,97 @@
+package org.drools.repository.model.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 java.io.Serializable;
+
+public class TransferNode implements Serializable {
+
+	public static enum Type {
+		START, HUMANTASK, JOIN, SUB_PROCESS, MILESTONE, TIMER, ACTION_NODE, RULESET, SPLIT, END, FOR_EACH, COMPOSITE, EVENT, WORK_ITEM, FAULT
+	}
+
+	private String name;
+
+	private Type type;
+
+	private long id;
+
+	private int x;
+
+	private int y;
+
+	protected int width = 80;
+
+	protected int height = 40;
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public void setX(int x) {
+		this.x = x;
+	}
+
+	public int getX() {
+		return x;
+	}
+
+	public void setY(int y) {
+		this.y = y;
+	}
+
+	public int getY() {
+		return y;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkItemTransferNode.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkItemTransferNode.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkItemTransferNode.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,42 @@
+package org.drools.repository.model.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 java.util.HashMap;
+import java.util.Map;
+
+public class WorkItemTransferNode extends TransferNode {
+
+    public Map<String, String> parameters = new HashMap<String, String>();
+    public String              workName;
+
+    public void setParameters(Map<String, String> parameters) {
+        this.parameters = parameters;
+    }
+
+    public Map<String, String> getParameters() {
+        return parameters;
+    }
+
+    public void setWorkName(String workName) {
+        this.workName = workName;
+    }
+
+    public String getWorkName() {
+        return workName;
+    }
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkingSetConfigData.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkingSetConfigData.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/WorkingSetConfigData.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,22 @@
+package org.drools.repository.model.client;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.drools.factconstraints.client.ConstraintConfiguration;
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+
+/**
+ * 
+ * @author bauna
+ */
+public class WorkingSetConfigData implements PortableObject, Serializable {
+	private static final long serialVersionUID = 501L;
+
+	public String name;
+	public String description;
+	public List<ConstraintConfiguration> constraints;
+	
+	public String[] validFacts;
+	public WorkingSetConfigData[] workingSets;	
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/exceptions/SerializableException.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/exceptions/SerializableException.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-model/src/main/java/org/drools/repository/model/client/exceptions/SerializableException.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,20 @@
+package org.drools.repository.model.client.exceptions;
+
+public class SerializableException extends Exception {
+
+	public SerializableException() {
+		super();
+	}
+
+	public SerializableException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public SerializableException(String message) {
+		super(message);
+	}
+
+	public SerializableException(Throwable cause) {
+		super(cause);
+	}
+}


Property changes on: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services
___________________________________________________________________
Name: svn:ignore
   - .*
target

   + .*
target
repository*


Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/pom.xml
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/pom.xml	2010-05-10 19:57:52 UTC (rev 32802)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/pom.xml	2010-05-10 21:38:57 UTC (rev 32803)
@@ -20,6 +20,19 @@
       <artifactId>drools-repository</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-bpmn2</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-decisiontables</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-repository-model</artifactId>
+    </dependency>
+    <dependency>
       <groupId>javax.enterprise</groupId>
       <artifactId>cdi-api</artifactId>
       <version>1.0</version>

Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/AssetsService.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/AssetsService.java	2010-05-10 19:57:52 UTC (rev 32802)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/AssetsService.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -1,9 +1,10 @@
 package org.drools.repository.services;
 
-import org.drools.repository.AssetItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
 
 public interface AssetsService {
 
-	public AssetItem loadAsset(String uuid);
+	public RuleAsset loadAsset(String uuid) throws SerializableException;
 
 }

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/ContentManager.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/ContentManager.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/ContentManager.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,112 @@
+package org.drools.repository.services;
+
+/*
+ * Copyright 2005 Barry Knapp
+ *
+ * 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.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.repository.services.internal.contenthandlers.ContentHandler;
+import org.drools.repository.services.internal.contenthandlers.DefaultContentHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This configures the content handlers based on a props file.
+ * 
+ * @author Barry Knapp
+ */
+public class ContentManager {
+
+	private static final Logger log = LoggerFactory.getLogger(ContentManager.class);
+	public static String CONTENT_CONFIG_PROPERTIES = "/contenthandler.properties";
+	private static ContentManager INSTANCE;
+
+	/**
+	 * This is a map of the contentHandlers to use.
+	 */
+	private final Map<String, ContentHandler> contentHandlers = new HashMap<String, ContentHandler>();
+
+	ContentManager(String configPath) {
+		log.debug("Loading content properties");
+		Properties props = new Properties();
+		try {
+			props.load(this.getClass().getResourceAsStream(configPath));
+			for (Iterator iter = props.keySet().iterator(); iter.hasNext();) {
+				String contentHandler = (String) iter.next();
+				String val = props.getProperty(contentHandler);
+
+				contentHandlers.put(contentHandler, loadContentHandlerImplementation(val));
+
+			}
+		} catch (IOException e) {
+			log.error("UNABLE to load content handlers. Ahem, nothing will actually work. Ignore subsequent errors until this is resolved.", e);
+		}
+	}
+
+	/**
+	 * Return the content handlers.
+	 */
+	public Map<String, ContentHandler> getContentHandlers() {
+
+		return contentHandlers;
+	}
+
+	
+	private ContentHandler loadContentHandlerImplementation(String val) throws IOException {
+
+		try {
+			return (ContentHandler) Thread.currentThread().getContextClassLoader().loadClass(val).newInstance();
+
+		} catch (InstantiationException e) {
+			log.error(e.getMessage(), e);
+			return null;
+		} catch (IllegalAccessException e) {
+			log.error(e.getMessage(), e);
+			return null;
+		} catch (ClassNotFoundException e) {
+			log.error(e.getMessage(), e);
+			return null;
+		}
+
+	}
+
+	public static ContentManager getInstance() {
+		if (INSTANCE == null) {
+			// have to do this annoying thing, as in some cases, letting the
+			// classloader
+			// load it up means that it will fail as the classes aren't yet
+			// available.
+			// so have to use this nasty anti-pattern here. Sorry.
+			synchronized (ContentManager.class) {
+				ContentManager.INSTANCE = new ContentManager(CONTENT_CONFIG_PROPERTIES);
+			}
+		}
+		return INSTANCE;
+	}
+
+	public static ContentHandler getHandler(String format) {
+		ContentHandler h = ContentManager.getInstance().getContentHandlers().get(format);
+		if (h == null)
+			h = new DefaultContentHandler();// throw new
+											// IllegalArgumentException("Unable to handle the content type: "
+											// + format);
+		return h;
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/RepositoryService.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/RepositoryService.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/RepositoryService.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,5 @@
+package org.drools.repository.services;
+
+public interface RepositoryService {
+
+}

Modified: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/AssetsServiceImpl.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/AssetsServiceImpl.java	2010-05-10 19:57:52 UTC (rev 32802)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/AssetsServiceImpl.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -1,16 +1,84 @@
 package org.drools.repository.services.internal;
 
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
 import org.drools.repository.AssetItem;
+import org.drools.repository.CategoryItem;
+import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
+import org.drools.repository.VersionableItem;
+import org.drools.repository.model.client.MetaData;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
 import org.drools.repository.services.AssetsService;
+import org.drools.repository.services.ContentManager;
+import org.drools.repository.services.internal.contenthandlers.ContentHandler;
+import org.drools.repository.services.internal.util.MetaDataMapper;
 
 public class AssetsServiceImpl implements AssetsService {
 
 	private RulesRepository ruleRepository;
+	private MetaDataMapper metaDataMapper = new MetaDataMapper();
 
-	public AssetItem loadAsset(String uuid) {
-		// TODO Auto-generated method stub
-		return null;
+	public RuleAsset loadAsset(String uuid) throws SerializableException {
+		RuleAsset asset = new RuleAsset();
+		AssetItem item = loadAssetItem(uuid);
+
+		asset.uuid = uuid;
+		asset.metaData = populateMetaData(item);
+
+		PackageItem pkgItem = item.getPackage();
+		ContentHandler handler = ContentManager.getHandler(asset.metaData.format);
+		handler.retrieveAssetContent(asset, pkgItem, item);
+
+		return asset;
 	}
 
+	private AssetItem loadAssetItem(String uuid) {
+		return ruleRepository.loadAssetByUUID(uuid);
+	}
+
+	private MetaData populateMetaData(AssetItem item) {
+		MetaData meta = populateMetaData((VersionableItem) item);
+
+		meta.packageName = item.getPackageName();
+		meta.packageUUID = item.getPackage().getUUID();
+
+		List<String> categoryNames = new ArrayList<String>();
+		for (CategoryItem cat : item.getCategories()) {
+			categoryNames.add(cat.getFullPath());
+		}
+		meta.categories = categoryNames.toArray(new String[categoryNames.size()]);
+
+		meta.dateEffective = calendarToDate(item.getDateEffective());
+		meta.dateExpired = calendarToDate(item.getDateExpired());
+		return meta;
+
+	}
+
+	private Date calendarToDate(Calendar createdDate) {
+		if (createdDate == null)
+			return null;
+		return createdDate.getTime();
+	}
+
+	/**
+	 * read in the meta data, populating all dublin core and versioning stuff.
+	 */
+	private MetaData populateMetaData(VersionableItem item) {
+		MetaData meta = new MetaData();
+
+		meta.status = (item.getState() != null) ? item.getState().getName() : "";
+
+		metaDataMapper.copyToMetaData(meta, item);
+
+		meta.createdDate = calendarToDate(item.getCreatedDate());
+		meta.lastModifiedDate = calendarToDate(item.getLastModified());
+
+		return meta;
+	}
+
 }

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/RepositoryServicesImpl.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/RepositoryServicesImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/RepositoryServicesImpl.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,7 @@
+package org.drools.repository.services.internal;
+
+import org.drools.repository.services.RepositoryService;
+
+public class RepositoryServicesImpl implements RepositoryService {
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/BRMSPackageBuilder.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/BRMSPackageBuilder.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/BRMSPackageBuilder.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,244 @@
+package org.drools.repository.services.internal.builder;
+/*
+ * 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.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
+import org.drools.bpmn2.xml.BPMNSemanticModule;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.dsl.DSLMappingFile;
+import org.drools.lang.dsl.DSLMappingParseException;
+import org.drools.lang.dsl.DSLTokenizedMappingFile;
+import org.drools.lang.dsl.DefaultExpander;
+import org.drools.repository.AssetItem;
+import org.drools.repository.AssetItemIterator;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepositoryException;
+import org.drools.repository.services.assets.AssetFormats;
+import org.drools.rule.MapBackedClassLoader;
+import org.drools.util.ChainedProperties;
+
+/**
+ * This decorates the drools-compiler PackageBuilder
+ * with some functionality needed for the BRMS.
+ * This can use the BRMS repo as a classpath.
+ *
+ * @author Michael Neale
+ */
+public class BRMSPackageBuilder extends PackageBuilder {
+
+    private List<DSLTokenizedMappingFile> dslFiles;
+    private DefaultExpander expander;
+    
+    /**
+     * This will give you a fresh new PackageBuilder
+     * using the given classpath.
+     * @param classpath The classpath from the package
+     * @param buildProps Properties to pass into the package builder configuration.
+     */
+    public static BRMSPackageBuilder getInstance(List<JarInputStream> classpath, Properties buildProps) {
+        MapBackedClassLoader loader = createClassLoader(classpath);
+
+
+        // See if we can find a packagebuilder.conf
+        // We do this manually here, as we cannot rely on PackageBuilder doing this correctly
+        // note this chainedProperties already checks System properties too
+        ChainedProperties chainedProperties = new ChainedProperties( "packagebuilder.conf",
+        		BRMSPackageBuilder.class.getClassLoader(), // pass this as it searches currentThread anyway
+        		false ); // false means it ignores any default values
+
+        // the default compiler. This is nominally JANINO but can be overridden by setting drools.dialect.java.compiler to ECLIPSE
+        Properties properties = new Properties();
+        properties.setProperty( "drools.dialect.java.compiler",
+                                chainedProperties.getProperty( "drools.dialect.java.compiler", "ECLIPSE" ) );
+        properties.putAll(buildProps);
+        PackageBuilderConfiguration pkgConf = new PackageBuilderConfiguration( properties );
+        
+        pkgConf.setAllowMultipleNamespaces(false);
+        pkgConf.setClassLoader( loader );
+        pkgConf.addSemanticModule(new BPMNSemanticModule());
+
+        return new BRMSPackageBuilder( pkgConf );
+
+    }
+
+    /**
+     * For a given list of Jars, create a class loader.
+     */
+	public static MapBackedClassLoader createClassLoader(
+			List<JarInputStream> classpath) {
+		ClassLoader parentClassLoader = Thread.currentThread().getContextClassLoader();
+        if ( parentClassLoader == null ) {
+            parentClassLoader = BRMSPackageBuilder.class.getClassLoader();
+        }
+
+
+
+        final ClassLoader p = parentClassLoader;
+
+        MapBackedClassLoader loader = AccessController.doPrivileged( new PrivilegedAction<MapBackedClassLoader>() {
+            public MapBackedClassLoader run() {
+                return new MapBackedClassLoader( p );
+            }
+        });
+
+
+        try {
+            for ( JarInputStream jis : classpath ) {
+                JarEntry entry = null;
+                byte[] buf = new byte[1024];
+                int len = 0;
+                while ( (entry = jis.getNextJarEntry()) != null ) {
+                    if ( !entry.isDirectory() && !entry.getName().endsWith( ".java" ) ) {
+                        ByteArrayOutputStream out = new ByteArrayOutputStream();
+                        while ( (len = jis.read( buf )) >= 0 ) {
+                            out.write( buf, 0, len );
+                        }
+
+                        loader.addResource( entry.getName() , out.toByteArray() );
+                    }
+                }
+
+            }
+        } catch ( IOException e ) {
+            throw new RulesRepositoryException( e );
+        }
+		return loader;
+	}
+
+
+    /**
+     * In the BRMS you should not need to use this, use the getInstance factory method instead.
+     * @param config
+     */
+    private BRMSPackageBuilder(
+                              PackageBuilderConfiguration config) {
+        super( config );
+    }
+
+    public BRMSPackageBuilder() {
+        super(new PackageBuilderConfiguration());
+    }
+
+    /**
+     * This will reset the errors.
+     */
+    public void clearErrors() {
+        super.resetErrors();
+    }
+
+    public void setDSLFiles(List<DSLTokenizedMappingFile> files) {
+        this.dslFiles = files;
+    }
+
+    public List<DSLTokenizedMappingFile> getDSLMappingFiles() {
+        return Collections.unmodifiableList( this.dslFiles );
+    }
+
+    /**
+     * Load up all the DSL mappping files for the given package.
+     */
+    public static List<DSLTokenizedMappingFile> getDSLMappingFiles(PackageItem pkg, DSLErrorEvent err) {
+        List<DSLTokenizedMappingFile> result = new ArrayList<DSLTokenizedMappingFile>();
+        AssetItemIterator it = pkg.listAssetsByFormat( new String[]{AssetFormats.DSL} );
+        while ( it.hasNext() ) {
+            AssetItem item = it.next();
+            if (!item.getDisabled()) {
+                String dslData = item.getContent();
+                DSLTokenizedMappingFile file = new DSLTokenizedMappingFile();
+                try {
+                    if ( file.parseAndLoad( new StringReader( dslData ) ) ) {
+                        result.add( file );
+                    } else {
+                        List errs = file.getErrors();
+                        for ( Iterator iter = errs.iterator(); iter.hasNext(); ) {
+                            DSLMappingParseException e = (DSLMappingParseException) iter.next();
+                            err.recordError( item, "Line " + e.getLine() + " : " + e.getMessage() );
+                        }
+                    }
+
+                } catch ( IOException e ) {
+                    throw new RulesRepositoryException(e);
+                }
+            }
+
+        }
+
+        return result;
+    }
+
+    /**
+     * Load up all the Jars for the given package.
+     */
+    public static List<JarInputStream> getJars(PackageItem pkg) {
+        List<JarInputStream> result = new ArrayList<JarInputStream>();
+        AssetItemIterator ait = pkg.listAssetsByFormat( new String[]{AssetFormats.MODEL} );
+        while ( ait.hasNext() ) {
+            AssetItem item = (AssetItem) ait.next();
+            if ( item.getBinaryContentAttachment() != null ) {
+                try {
+                    result.add( new JarInputStream( item.getBinaryContentAttachment(),
+                                                    false ) );
+                } catch ( IOException e ) {
+                    throw new RulesRepositoryException(e);
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * This is used when loading Jars, DSLs etc to report errors.
+     */
+    public static interface DSLErrorEvent {
+        public void recordError(AssetItem asset, String message);
+    }
+
+    /**
+     * Returns true if this package uses a DSL.
+     */
+    public boolean hasDSL() {
+        return this.dslFiles != null && this.dslFiles.size() > 0;
+    }
+
+    /**
+     * Returns an expander for DSLs (only if there is a DSL configured for this package).
+     */
+    public DefaultExpander getDSLExpander() {
+        if (this.expander == null) {
+            expander = new DefaultExpander();
+            for ( DSLMappingFile file : this.dslFiles ) {
+                expander.addDSLMapping( file.getMapping() );
+            }
+        }
+        return expander;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentAssemblyError.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentAssemblyError.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentAssemblyError.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,44 @@
+package org.drools.repository.services.internal.builder;
+/*
+ * 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.repository.VersionableItem;
+
+/**
+ * This class is used to accumulate error reports for asset.
+ * This can then be used to feed back to the user where the problems are.
+ * 
+ * @author Michael Neale
+ */
+public class ContentAssemblyError {
+
+    public ContentAssemblyError(VersionableItem it, String message) {
+        this.itemInError = it;
+        this.errorReport = message;
+    }
+    /**
+     * This may be null, if its not associated to any particular asset.
+     */
+    public VersionableItem itemInError;
+    public String errorReport;
+    
+    public String toString() {
+        return this.errorReport;
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentPackageAssembler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentPackageAssembler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/ContentPackageAssembler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,447 @@
+package org.drools.repository.services.internal.builder;
+
+/*
+ * 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.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import org.drools.builder.conf.DefaultPackageNameOption;
+import org.drools.compiler.DroolsError;
+import org.drools.compiler.DroolsParserException;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.repository.AssetItem;
+import org.drools.repository.AssetItemIterator;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepositoryException;
+import org.drools.repository.VersionableItem;
+import org.drools.repository.services.ContentManager;
+import org.drools.repository.services.assets.AssetFormats;
+import org.drools.repository.services.internal.contenthandlers.ContentHandler;
+import org.drools.repository.services.internal.contenthandlers.ICompilable;
+import org.drools.repository.services.internal.contenthandlers.IRuleAsset;
+import org.drools.repository.services.internal.selectors.AssetSelector;
+import org.drools.repository.services.internal.selectors.BuiltInSelector;
+import org.drools.repository.services.internal.selectors.SelectorManager;
+import org.drools.repository.services.internal.util.ServiceImplementation;
+import org.drools.rule.Package;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This assembles packages in the BRMS into binary package objects, and deals
+ * with errors etc. Each content type is responsible for contributing to the
+ * package.
+ * 
+ * @author Michael Neale
+ */
+public class ContentPackageAssembler {
+	private static final Logger log  = LoggerFactory.getLogger( ContentPackageAssembler.class );
+
+	private PackageItem pkg;
+
+	/**
+	 * We accumulate errors here. If they come from the builder, then we reset
+	 * the builders errors so as to not double report. It also means we can
+	 * track errors to the exact asset that caused it.
+	 */
+	private List<ContentAssemblyError> errors = new ArrayList<ContentAssemblyError>();
+
+	BRMSPackageBuilder builder;
+
+	private String customSelectorName;
+	private String buildMode;
+	private String statusOperator;
+	private String statusDescriptionValue;
+	private boolean enableStatusSelector;
+	private String categoryOperator;
+	private String categoryValue;
+	private boolean enableCategorySelector;	
+
+	/**
+	 * Use this if you want to build the whole package.
+	 * 
+	 * @param pkg
+	 *            The package.
+	 */
+	public ContentPackageAssembler(PackageItem pkg) {
+		this(pkg, true);
+	}
+
+	/**
+	 * @param pkg
+	 *            The package.
+	 * @param compile
+	 *            true if we want to build it. False and its just for looking at
+	 *            source.
+	 */
+	public ContentPackageAssembler(PackageItem pkg, boolean compile) {
+		this(pkg, compile, null, null, null, false, null, null, false, null);
+	}
+
+	/**
+	 * @param assetPackage
+	 *            The package.
+	 * @param compile
+	 *            true if we want to build it. False and its just for looking at
+	 *            source.
+	 * @param selectorConfigName
+	 */
+	public ContentPackageAssembler(PackageItem assetPackage, boolean compile, String buildMode,
+			String statusOperator, String statusDescriptionValue, boolean enableStatusSelector,
+			String categoryOperator, String categoryValue, boolean enableCategorySelector,
+			String selectorConfigName) {
+
+		this.pkg = assetPackage;
+		this.customSelectorName = selectorConfigName;
+		this.buildMode = buildMode;
+		this.statusOperator = statusOperator;
+		this.statusDescriptionValue = statusDescriptionValue;
+		this.enableStatusSelector = enableStatusSelector;
+		this.categoryOperator = categoryOperator;
+		this.categoryValue = categoryValue;
+		this.enableCategorySelector = enableCategorySelector;
+		
+		createBuilder();
+
+		if (compile && preparePackage()) {
+			buildPackage();
+		}
+	}
+
+	/**
+	 * Use this if you want to build and compile just the one asset.
+	 */
+	public ContentPackageAssembler(AssetItem assetToBuild) {
+		this.pkg = assetToBuild.getPackage();
+		createBuilder();
+
+		if (preparePackage()) {
+			buildAsset(assetToBuild);
+		}
+	}
+
+	public void createBuilder() {
+        try {
+            Properties ps = loadConfProperties(pkg);
+            ps.setProperty( DefaultPackageNameOption.PROPERTY_NAME, this.pkg.getName() );
+            builder = BRMSPackageBuilder.getInstance(BRMSPackageBuilder.getJars(pkg), ps);
+        } catch (IOException e) {
+            throw new RulesRepositoryException("Unable to load configuration properties for package.", e);            
+        }
+	}
+
+
+    /**
+     * Load all the .properties and .conf files into one big happy Properties instance.
+     */
+    Properties loadConfProperties(PackageItem pkg) throws IOException {
+        Properties ps = new Properties();
+        AssetItemIterator iter = pkg.listAssetsByFormat(new String[] {"properties", "conf"});
+        while(iter.hasNext()) {
+            AssetItem conf = iter.next();
+            conf.getContent();
+            Properties p = new Properties();
+            p.load(conf.getBinaryContentAttachment());
+            ps.putAll(p);
+        }
+        return ps;
+    }
+
+    /**
+	 * This will build the package - preparePackage would have been called first.
+     * This will always prioritize DRL before other assets.
+	 */
+	private void buildPackage() {
+		AssetSelector selector = null;
+		if("customSelector".equals(buildMode)) {
+			selector = SelectorManager.getInstance().getSelector(customSelectorName);			
+		} else if ("builtInSelector".equals(buildMode)) {
+			selector = (BuiltInSelector)SelectorManager.getInstance().getSelector(
+			"BuiltInSelector");
+	        ((BuiltInSelector)selector).setStatusOperator(statusOperator);
+	        ((BuiltInSelector)selector).setStatus(statusDescriptionValue);	
+	        ((BuiltInSelector)selector).setEnableStatusSelector(enableStatusSelector);
+	        ((BuiltInSelector)selector).setCategory(categoryValue);
+	        ((BuiltInSelector)selector).setCategoryOperator(categoryOperator);
+	        ((BuiltInSelector)selector).setEnableCategorySelector(enableCategorySelector);
+		} else {
+			//return the NilSelector, i.e., allows everything
+			selector = SelectorManager.getInstance().getSelector(null);				
+		}
+		
+		if (selector == null) {
+			this.errors.add(new ContentAssemblyError(this.pkg,
+					"The selector named " + customSelectorName
+							+ " is not available."));
+			return;
+		}
+        
+		StringBuffer includedAssets = new StringBuffer("Following assets have been included in package build: ");
+        Iterator<AssetItem> drls = pkg.listAssetsByFormat(new String[]{AssetFormats.DRL});
+        while (drls.hasNext()) {
+            AssetItem asset = (AssetItem) drls.next();
+            if (!asset.isArchived() && (selector.isAssetAllowed(asset))) {
+                buildAsset(asset);
+                includedAssets.append(asset.getName() + ", ");
+            }
+        }
+		Iterator<AssetItem> it = pkg.getAssets();
+		while (it.hasNext()) {
+			AssetItem asset = (AssetItem) it.next();
+			if (!asset.getFormat().equals(AssetFormats.DRL) && !asset.isArchived() && (selector.isAssetAllowed(asset))) {
+				buildAsset(asset);
+	            includedAssets.append(asset.getName() + ", ");
+			}
+		}
+		log.info(includedAssets.toString());
+	}
+
+	/**
+	 * Builds assets that are "rule" assets (ie things that are not functions
+	 * etc).
+	 */
+	private void buildAsset(AssetItem asset) {
+		ContentHandler h = ContentManager.getHandler(asset.getFormat());
+		if (h instanceof ICompilable && !asset.getDisabled()) {
+			try {
+				((ICompilable) h).compile(builder, asset, new ErrorLogger());
+				if (builder.hasErrors()) {
+					this.recordBuilderErrors(asset);
+					// clear the errors, so we don't double report.
+					builder.clearErrors();
+				}
+			} catch (DroolsParserException e) {
+				throw new RulesRepositoryException(e);
+			} catch (IOException e) {
+				throw new RulesRepositoryException(e);
+			}
+		}
+	}
+
+	/**
+	 * This prepares the package builder, loads the jars/classpath.
+	 * 
+	 * @return true if everything is good to go, false if its all gone horribly
+	 *         wrong, and we can't even get the package header up.
+	 */
+	private boolean preparePackage() {
+
+		// firstly we loadup the classpath
+		builder.addPackage(new PackageDescr(pkg.getName()));
+
+		loadDeclaredTypes();
+		// now we deal with the header (imports, templates, globals).
+		addDrl(ServiceImplementation.getDroolsHeader(pkg));
+		if (builder.hasErrors()) {
+			recordBuilderErrors(pkg);
+			// if we have any failures, lets drop out now, no point in going
+			// any further
+			return false;
+		}
+
+		loadDSLFiles();
+
+		// finally, any functions we will load at this point.
+		AssetItemIterator it = this.pkg
+				.listAssetsByFormat(new String[] { AssetFormats.FUNCTION });
+		
+        // Adds the function DRLs as one string because they might be calling each others.
+        StringBuilder stringBuilder = new StringBuilder();
+        while ( it.hasNext() ) {
+            AssetItem func = it.next();
+            if ( !func.getDisabled() ) {
+                stringBuilder.append( func.getContent() );
+            }
+        }
+        addDrl( stringBuilder.toString() );
+        // If the function part had errors we need to add them one by one to find out which one is bad.
+        if ( builder.hasErrors() ) {
+            builder.clearErrors();
+            it = this.pkg.listAssetsByFormat( new String[]{AssetFormats.FUNCTION} );
+            while ( it.hasNext() ) {
+                AssetItem func = it.next();
+                if ( !func.getDisabled() ) {
+                    addDrl( func.getContent() );
+                    if ( builder.hasErrors() ) {
+                        recordBuilderErrors( func );
+                        builder.clearErrors();
+                    }
+                }
+            }
+        }
+
+        return errors.size() == 0;
+	}
+
+	private void loadDeclaredTypes() {
+		AssetItemIterator it = this.pkg
+				.listAssetsByFormat(new String[] { AssetFormats.DRL_MODEL });
+		while (it.hasNext()) {
+			AssetItem as = it.next();
+            if (!as.getDisabled()) {
+                try {
+                    String content = as.getContent();
+                    if (nonEmpty(content)) {
+                        builder.addPackageFromDrl(new StringReader(as.getContent()));
+                    }
+                } catch (DroolsParserException e) {
+                    this.errors.add(new ContentAssemblyError(as,
+                            "Parser exception: " + e.getMessage()));
+                } catch (IOException e) {
+                    this.errors.add(new ContentAssemblyError(as, "IOException: "
+                            + e.getMessage()));
+                }
+            }
+		}
+
+	}
+
+    private boolean nonEmpty(String content) {
+        return content != null && content.trim().length() > 0;
+    }
+
+    private void loadDSLFiles() {
+		// now we load up the DSL files
+		builder.setDSLFiles(BRMSPackageBuilder.getDSLMappingFiles(pkg,
+				new BRMSPackageBuilder.DSLErrorEvent() {
+					public void recordError(AssetItem asset, String message) {
+						errors.add(new ContentAssemblyError(asset, message));
+					}
+				}));
+	}
+
+	/**
+	 * This will return true if there is an error in the package configuration
+	 * or functions.
+	 * 
+	 * @return
+	 */
+	public boolean isPackageConfigurationInError() {
+		if (this.errors.size() > 0) {
+			return this.errors.get(0).itemInError instanceof PackageItem;
+		} else {
+			return false;
+		}
+	}
+
+	private void addDrl(String drl) {
+		if ( "".equals( drl.trim() ) ) {
+			return;
+		}
+		try {
+			builder.addPackageFromDrl(new StringReader(drl));
+		} catch (DroolsParserException e) {
+			throw new RulesRepositoryException(
+					"Unexpected error when parsing package.", e);
+		} catch (IOException e) {
+			throw new RulesRepositoryException(
+					"IO Exception occurred when parsing package.", e);
+		}
+	}
+
+	/**
+	 * This will accumulate the errors.
+	 */
+	private void recordBuilderErrors(VersionableItem asset) {
+		DroolsError[] errs = builder.getErrors().getErrors();
+		for (int i = 0; i < errs.length; i++) {
+			this.errors.add(new ContentAssemblyError(asset, errs[i]
+					.getMessage()));
+		}
+
+	}
+
+	/**
+	 * I've got a package people !
+	 */
+	public Package getBinaryPackage() {
+		if (this.hasErrors()) {
+			throw new IllegalStateException(
+					"There is no package available, as there were errors.");
+		}
+		return builder.getPackage();
+	}
+
+	public boolean hasErrors() {
+		return errors.size() > 0;
+	}
+
+	public List<ContentAssemblyError> getErrors() {
+		return this.errors;
+	}
+
+	public BRMSPackageBuilder getBuilder() {
+		return builder;
+	}
+
+	/**
+	 * This is passed in to the compilers so extra errors can be added.
+	 * 
+	 * @author Michael Neale
+	 */
+	public class ErrorLogger {
+		public void logError(ContentAssemblyError err) {
+			errors.add(err);
+		}
+	}
+
+	public String getDRL() {
+		StringBuffer src = new StringBuffer();
+		src.append("package " + this.pkg.getName() + "\n");
+		src.append(ServiceImplementation.getDroolsHeader(this.pkg) + "\n\n");
+
+		// now we load up the DSL files
+		builder.setDSLFiles(BRMSPackageBuilder.getDSLMappingFiles(pkg,
+				new BRMSPackageBuilder.DSLErrorEvent() {
+					public void recordError(AssetItem asset, String message) {
+						errors.add(new ContentAssemblyError(asset, message));
+					}
+				}));
+
+		// do the functions and declared types.
+		AssetItemIterator it = this.pkg.listAssetsByFormat(new String[] {
+				AssetFormats.FUNCTION, AssetFormats.DRL_MODEL });
+		while (it.hasNext()) {
+			AssetItem func = it.next();
+			if (!func.isArchived() && !func.getDisabled()) {
+                src.append(func.getContent()).append("\n\n");
+			}
+		}
+
+		// now the rules
+		Iterator<AssetItem> iter = pkg.getAssets();
+		while (iter.hasNext()) {
+			AssetItem asset = (AssetItem) iter.next();
+			if (!asset.isArchived() && !asset.getDisabled()) {
+
+				ContentHandler handler = ContentManager.getHandler(asset.getFormat());
+				if (handler.isRuleAsset()) {
+					IRuleAsset ruleAsset = (IRuleAsset) handler;
+					ruleAsset.assembleDRL(builder, asset, src);
+				}
+				src.append("\n\n");
+			}
+		}
+
+		return src.toString();
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowContentModelBuilder.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowContentModelBuilder.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowContentModelBuilder.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,311 @@
+package org.drools.repository.services.internal.builder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
+import org.drools.process.core.Work;
+import org.drools.repository.model.client.ElementContainerTransferNode;
+import org.drools.repository.model.client.HumanTaskTransferNode;
+import org.drools.repository.model.client.RuleFlowContentModel;
+import org.drools.repository.model.client.SplitConnectionRef;
+import org.drools.repository.model.client.SplitConstraint;
+import org.drools.repository.model.client.SplitTransferNode;
+import org.drools.repository.model.client.TransferConnection;
+import org.drools.repository.model.client.TransferNode;
+import org.drools.repository.model.client.WorkItemTransferNode;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.FaultNode;
+import org.drools.workflow.core.node.ForEachNode;
+import org.drools.workflow.core.node.HumanTaskNode;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.MilestoneNode;
+import org.drools.workflow.core.node.RuleSetNode;
+import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.SubProcessNode;
+import org.drools.workflow.core.node.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
+
+public class RuleFlowContentModelBuilder {
+
+	public static RuleFlowContentModel createModel(RuleFlowProcess process) {
+
+		RuleFlowContentModel model = new RuleFlowContentModel();
+
+		Collection<TransferNode> transferNodes = createNodesAndConnections(process.getNodes(), model);
+
+		model.getNodes().addAll(transferNodes);
+
+		return model;
+	}
+
+	/**
+	 * Creates transfer nodes from RuleFlowProcess nodes.
+	 * 
+	 * @param nodes
+	 *            from the rule flow XML.
+	 * @param model
+	 *            RuleFlowContentModel that contains the transfer nodes for
+	 *            client side.
+	 */
+	private static List<TransferNode> createNodesAndConnections(Node[] nodes, RuleFlowContentModel model) {
+
+		List<TransferNode> transferNodes = new ArrayList<TransferNode>();
+
+		for (int i = 0; i < nodes.length; i++) {
+			Node node = nodes[i];
+			TransferNode.Type type = getType(node);
+			TransferNode tn = null;
+
+			if (type == TransferNode.Type.WORK_ITEM) {
+
+				tn = createWorkItemTransfernode((WorkItemNode) node);
+
+			} else if (type == TransferNode.Type.HUMANTASK) {
+
+				tn = createHumanTaskTransferNode((HumanTaskNode) node);
+
+			} else if (type == TransferNode.Type.SPLIT) {
+
+				tn = createSplitNode((Split) node);
+
+			} else if (type == TransferNode.Type.FOR_EACH) {
+
+				tn = createRuleFlowContentModelTransferNode(((ForEachNode) node).getNodes());
+
+			} else if (type == TransferNode.Type.COMPOSITE) {
+
+				tn = createRuleFlowContentModelTransferNode(((CompositeNode) node).getNodes());
+
+			} else {
+
+				tn = new TransferNode();
+
+			}
+
+			/*
+			 * Creates connections for from and to this node.
+			 */
+			createConnections(model, node);
+
+			tn.setId(node.getId());
+
+			// Guard needed to Migrate v4 ruleflows to v5
+			Integer x = (Integer) node.getMetaData("x");
+			if (x != null) {
+				tn.setX(x);
+			}
+
+			// Guard needed to Migrate v4 ruleflows to v5
+			Integer y = (Integer) node.getMetaData("y");
+			if (y != null) {
+				tn.setY(y);
+			}
+
+			Integer height = (Integer) node.getMetaData("height");
+			if (height != null) {
+				tn.setHeight(height);
+			}
+
+			Integer width = (Integer) node.getMetaData("width");
+			if (width != null) {
+				tn.setWidth(width);
+			}
+
+			tn.setName(node.getName());
+			tn.setType(type);
+
+			transferNodes.add(tn);
+		}
+
+		return transferNodes;
+	}
+
+	private static ElementContainerTransferNode createRuleFlowContentModelTransferNode(Node[] nodes) {
+
+		ElementContainerTransferNode fetn = new ElementContainerTransferNode();
+		RuleFlowContentModel model = new RuleFlowContentModel();
+
+		List<TransferNode> transferNodes = createNodesAndConnections(nodes, model);
+
+		model.setNodes(transferNodes);
+		fetn.setContentModel(model);
+
+		return fetn;
+	}
+
+	/**
+	 * Checks this node for out and in going connections and creates a transfer
+	 * object from them.
+	 * 
+	 * @param model
+	 * @param node
+	 */
+	private static void createConnections(RuleFlowContentModel model, Node node) {
+
+		for (List<Connection> inConnections : node.getIncomingConnections().values()) {
+			for (Connection connection : inConnections) {
+				// if ( !"DROOLS_DEFAULT".equals( connection.getFromType() ) &&
+				// !"DROOLS_DEFAULT".equals( connection.getToType() ) ) {
+				createConnection(model, connection);
+				// }
+			}
+		}
+
+		for (List<Connection> outConnections : node.getOutgoingConnections().values()) {
+			for (Connection connection : outConnections) {
+				// if ( !"DROOLS_DEFAULT".equals( connection.getFromType() ) &&
+				// !"DROOLS_DEFAULT".equals( connection.getToType() ) ) {
+				createConnection(model, connection);
+				// }
+			}
+		}
+	}
+
+	/**
+	 * Creates a single connection to be transferred.
+	 * 
+	 * @param model
+	 * @param connection
+	 */
+	private static void createConnection(RuleFlowContentModel model, Connection connection) {
+		TransferConnection tc = new TransferConnection();
+
+		tc.setFromId(connection.getFrom().getId());
+		tc.setToId(connection.getTo().getId());
+
+		model.getConnections().add(tc);
+	}
+
+	private static TransferNode createHumanTaskTransferNode(HumanTaskNode node) {
+		HumanTaskTransferNode httn = new HumanTaskTransferNode();
+
+		Work work = node.getWork();
+
+		if (work != null) {
+			for (String key : work.getParameters().keySet()) {
+
+				Object o = work.getParameters().get(key);
+				String value;
+
+				if (o == null) {
+					value = "";
+				} else {
+					value = o.toString();
+				}
+
+				httn.getParameters().put(key, value);
+			}
+		}
+
+		return httn;
+	}
+
+	private static SplitTransferNode createSplitNode(Split s) {
+		SplitTransferNode sn = new SplitTransferNode();
+
+		sn.setSplitType(SplitTransferNode.Type.getType(s.getType()));
+
+		for (ConnectionRef connection : s.getConstraints().keySet()) {
+
+			SplitConnectionRef ref = new SplitConnectionRef();
+			ref.setNodeId(connection.getNodeId());
+			ref.setToType(connection.getToType());
+
+			SplitConstraint constraint = getConstraint(s.getConstraints().get(connection));
+
+			sn.getConstraints().put(ref, constraint);
+		}
+
+		return sn;
+	}
+
+	private static WorkItemTransferNode createWorkItemTransfernode(WorkItemNode node) {
+		WorkItemTransferNode tn = new WorkItemTransferNode();
+
+		Work work = node.getWork();
+
+		if (work != null) {
+			tn.setWorkName(work.getName());
+
+			for (String key : work.getParameters().keySet()) {
+
+				Object o = work.getParameters().get(key);
+				String value;
+
+				if (o == null) {
+					value = "";
+				} else {
+					value = o.toString();
+				}
+
+				tn.getParameters().put(key, value);
+			}
+		}
+
+		return tn;
+	}
+
+	private static SplitConstraint getConstraint(Constraint constraint) {
+
+		SplitConstraint c = new org.drools.repository.model.client.SplitConstraint();
+
+		c.setConstraint(constraint.getConstraint());
+
+		c.setDialect(constraint.getDialect());
+
+		c.setName(constraint.getName());
+
+		c.setPriority(constraint.getPriority());
+
+		c.setType(constraint.getType());
+
+		return c;
+	}
+
+	private static TransferNode.Type getType(Node node) {
+		if (node instanceof StartNode) {
+			return TransferNode.Type.START;
+		} else if (node instanceof EndNode) {
+			return TransferNode.Type.END;
+		} else if (node instanceof ActionNode) {
+			return TransferNode.Type.ACTION_NODE;
+		} else if (node instanceof RuleSetNode) {
+			return TransferNode.Type.RULESET;
+		} else if (node instanceof SubProcessNode) {
+			return TransferNode.Type.SUB_PROCESS;
+		} else if (node instanceof ForEachNode) {
+			return TransferNode.Type.FOR_EACH;
+		} else if (node instanceof CompositeNode) {
+			return TransferNode.Type.COMPOSITE;
+		} else if (node instanceof Join) {
+			return TransferNode.Type.JOIN;
+		} else if (node instanceof Split) {
+			return TransferNode.Type.SPLIT;
+		} else if (node instanceof MilestoneNode) {
+			return TransferNode.Type.MILESTONE;
+		} else if (node instanceof TimerNode) {
+			return TransferNode.Type.TIMER;
+		} else if (node instanceof HumanTaskNode) {
+			return TransferNode.Type.HUMANTASK;
+		} else if (node instanceof WorkItemNode) {
+			return TransferNode.Type.WORK_ITEM;
+		} else if (node instanceof FaultNode) {
+			return TransferNode.Type.FAULT;
+		} else if (node instanceof EventNode) {
+			return TransferNode.Type.EVENT;
+		}
+
+		throw new IllegalArgumentException("Unkown node type " + node);
+
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowProcessBuilder.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowProcessBuilder.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/builder/RuleFlowProcessBuilder.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,184 @@
+/*
+ * 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.repository.services.internal.builder;
+
+import java.util.Collection;
+
+import org.drools.definition.process.Node;
+import org.drools.process.core.Work;
+import org.drools.repository.model.client.ElementContainerTransferNode;
+import org.drools.repository.model.client.HumanTaskTransferNode;
+import org.drools.repository.model.client.SplitConnectionRef;
+import org.drools.repository.model.client.SplitConstraint;
+import org.drools.repository.model.client.SplitTransferNode;
+import org.drools.repository.model.client.TransferNode;
+import org.drools.repository.model.client.WorkItemTransferNode;
+import org.drools.repository.model.client.TransferNode.Type;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.ForEachNode;
+import org.drools.workflow.core.node.HumanTaskNode;
+import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.WorkItemNode;
+
+public class RuleFlowProcessBuilder {
+
+    public static void updateProcess(RuleFlowProcess process,
+                                     Collection<TransferNode> contentNodes) {
+
+        for ( TransferNode tn : contentNodes ) {
+
+            Node node = process.getNode( tn.getId() );
+
+            updateNode( tn,
+                        node );
+        }
+    }
+
+    //    public static void updateContainer(NodeContainer nodeContainer,
+    //                                       Collection<TransferNode> contentNodes) {
+    //
+    //        for ( TransferNode tn : contentNodes ) {
+    //
+    //            Node node = nodeContainer.getNode( tn.getId() );
+    //
+    //            updateNode( tn,
+    //                        node );
+    //        }
+    //    }
+
+    private static void updateNode(TransferNode tn,
+                                   Node node) {
+        /*
+         * At this point only the parameters are editable
+         */
+        if ( tn instanceof HumanTaskTransferNode ) {
+
+            updateHumanTask( (HumanTaskTransferNode) tn,
+                             (HumanTaskNode) node );
+
+        } else if ( tn instanceof WorkItemTransferNode ) {
+
+            updateWorkItem( (WorkItemTransferNode) tn,
+                            (WorkItemNode) node );
+
+        } else if ( tn instanceof SplitTransferNode ) {
+
+            updateSplitNode( (SplitTransferNode) tn,
+                             (Split) node );
+
+        } else if ( tn instanceof ElementContainerTransferNode ) {
+
+            if ( tn.getType() == Type.FOR_EACH ) {
+
+                updateForEach( (ElementContainerTransferNode) tn,
+                               (ForEachNode) node );
+
+            } else if ( tn.getType() == Type.COMPOSITE ) {
+
+                updateComposite( (ElementContainerTransferNode) tn,
+                                 (CompositeNode) node );
+
+            }
+        }
+    }
+
+    private static void updateHumanTask(HumanTaskTransferNode httn,
+                                        HumanTaskNode humanTaskNode) {
+        Work work = humanTaskNode.getWork();
+
+        if ( work != null ) {
+            for ( String key : work.getParameters().keySet() ) {
+
+                work.setParameter( key,
+                                   httn.getParameters().get( key ) );
+            }
+        }
+    }
+
+    private static void updateWorkItem(WorkItemTransferNode witn,
+                                       WorkItemNode workItemNode) {
+        Work work = workItemNode.getWork();
+
+        if ( work != null ) {
+
+            for ( String key : work.getParameters().keySet() ) {
+
+                work.setParameter( key,
+                                   witn.getParameters().get( key ) );
+            }
+        }
+    }
+
+    private static void updateSplitNode(SplitTransferNode stn,
+                                        Split splitNode) {
+        for ( ConnectionRef connection : splitNode.getConstraints().keySet() ) {
+
+            final ConnectionRef ref1 = new ConnectionRef( connection.getNodeId(),
+                                                          connection.getToType() );
+
+            SplitConnectionRef ref2 = new SplitConnectionRef();
+            ref2.setNodeId( connection.getNodeId() );
+            ref2.setToType( connection.getToType() );
+
+            Constraint c1 = splitNode.internalGetConstraint( ref1 );
+            SplitConstraint c2 = stn.getConstraints().get( ref2 );
+
+            updateConstraint( c1,
+                              c2 );
+        }
+    }
+
+    private static void updateForEach(ElementContainerTransferNode tn,
+                                      ForEachNode foreachNode) {
+
+        for ( TransferNode subTn : tn.getContentModel().getNodes() ) {
+
+            Node subNode = foreachNode.getNode( subTn.getId() );
+
+            updateNode( subTn,
+                        subNode );
+        }
+    }
+
+    private static void updateComposite(ElementContainerTransferNode tn,
+                                        CompositeNode compositeNode) {
+
+        for ( TransferNode subTn : tn.getContentModel().getNodes() ) {
+
+            Node subNode = compositeNode.getNode( subTn.getId() );
+
+            updateNode( subTn,
+                        subNode );
+        }
+    }
+
+    private static void updateConstraint(Constraint to, SplitConstraint from) {
+
+        to.setConstraint( from.getConstraint() );
+
+        to.setDialect( from.getDialect() );
+
+        to.setName( from.getName() );
+
+        to.setPriority( from.getPriority() );
+
+        to.setType( from.getType() );
+    }
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPELHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPELHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPELHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,46 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.InputStream;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleContentText;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+public class BPELHandler extends ContentHandler {
+
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item) throws SerializableException {
+
+		// Get the name
+
+		InputStream in = item.getBinaryContentAttachment();
+
+		if (in != null) {
+			RuleContentText text = new RuleContentText();
+			text.content = asset.metaData.name;
+			asset.content = text;
+		}
+
+	}
+
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPMN2ProcessHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPMN2ProcessHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BPMN2ProcessHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,106 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.drools.bpmn2.xml.BPMN2SemanticModule;
+import org.drools.bpmn2.xml.XmlBPMNProcessDumper;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.xml.XmlProcessReader;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleFlowContentModel;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.RuleFlowContentModelBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler.ErrorLogger;
+import org.drools.ruleflow.core.RuleFlowProcess;
+
+public class BPMN2ProcessHandler extends ContentHandler implements ICompilable {
+
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item) throws SerializableException {
+		RuleFlowProcess process = readProcess(new ByteArrayInputStream(item.getContent().getBytes()));
+		if (process != null) {
+			RuleFlowContentModel content = RuleFlowContentModelBuilder.createModel(process);
+			content.setXml(item.getContent());
+			asset.content = content;
+		}
+	}
+
+	protected RuleFlowProcess readProcess(InputStream is) {
+		RuleFlowProcess process = null;
+		try {
+			InputStreamReader reader = new InputStreamReader(is);
+			PackageBuilderConfiguration configuration = new PackageBuilderConfiguration();
+			configuration.initSemanticModules();
+			configuration.addSemanticModule(new BPMN2SemanticModule());
+			XmlProcessReader xmlReader = new XmlProcessReader(configuration.getSemanticModules());
+			try {
+				process = (RuleFlowProcess) xmlReader.read(reader);
+			} catch (Exception e) {
+				reader.close();
+				throw new Exception("Unable to read BPMN2 XML.", e);
+			}
+			reader.close();
+		} catch (Exception e) {
+			return null;
+		}
+
+		return process;
+	}
+
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
+	}
+
+	/**
+	 * The rule flow can not be built if the package name is not the same as the
+	 * package that it exists in. This changes the package name.
+	 * 
+	 * @param item
+	 */
+	public void ruleFlowAttached(AssetItem item) {
+		String content = item.getContent();
+
+		if (content != null && !content.equals("")) {
+			RuleFlowProcess process = readProcess(new ByteArrayInputStream(content.getBytes()));
+			if (process != null) {
+				String packageName = item.getPackageName();
+				String originalPackageName = process.getPackageName();
+				if (!packageName.equals(originalPackageName)) {
+					process.setPackageName(packageName);
+					XmlBPMNProcessDumper dumper = XmlBPMNProcessDumper.INSTANCE;
+					String out = dumper.dump(process);
+					item.updateContent(out);
+					item.checkin("Changed BPMN2 process package from " + originalPackageName + " to " + packageName);
+				}
+			}
+		}
+	}
+
+	public void compile(BRMSPackageBuilder builder, AssetItem asset, ErrorLogger logger) throws DroolsParserException, IOException {
+		InputStream ins = asset.getBinaryContentAttachment();
+		if (ins != null) {
+			builder.addProcessFromXml(new InputStreamReader(asset.getBinaryContentAttachment()));
+		}
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BRLContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BRLContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BRLContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,100 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+import java.io.StringReader;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.ide.common.client.modeldriven.brl.RuleModel;
+import org.drools.ide.common.server.util.BRDRLPersistence;
+import org.drools.ide.common.server.util.BRLPersistence;
+import org.drools.ide.common.server.util.BRXMLPersistence;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler;
+
+public class BRLContentHandler extends ContentHandler
+		implements IRuleAsset {
+
+
+	public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+        asset.content = getBrlXmlPersistence().unmarshal( item.getContent() );
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+        RuleModel data = (RuleModel) asset.content;
+        if ( data.name == null ) {
+            data.name = repoAsset.getName();
+        }
+        repoAsset.updateContent( getBrlXmlPersistence().marshal( data ) );
+    }
+
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
+                                                                   IOException {
+        builder.addPackageFromDrl( new StringReader( getSourceDRL( asset,
+                                                                   builder ) ) );
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder,
+                            AssetItem asset,
+                            StringBuffer buf) {
+        String drl = getSourceDRL( asset,
+                                   builder );
+        buf.append( drl );
+    }
+
+    private String getSourceDRL(AssetItem asset,
+                                BRMSPackageBuilder builder) {
+        RuleModel model = buildModelFromAsset(asset);
+
+        String drl = getBrlDrlPersistence().marshal( model );
+        if ( builder.hasDSL() && model.hasDSLSentences() ) {
+            drl = builder.getDSLExpander().expand( drl );
+        }
+        return drl;
+    }
+
+	protected RuleModel buildModelFromAsset(AssetItem asset) {
+		RuleModel model = getBrlXmlPersistence().unmarshal(asset.getContent());
+		model.name = asset.getName();
+		model.parentName = this.parentNameFromCategory(asset, model.parentName);
+		return model;
+	}
+
+    public String getRawDRL(AssetItem asset) {
+        RuleModel model = getBrlXmlPersistence().unmarshal( asset.getContent() );
+
+        return getBrlDrlPersistence().marshal( model );
+    }
+    
+    protected BRLPersistence getBrlDrlPersistence() {
+		return BRDRLPersistence.getInstance();
+	}
+
+    protected BRLPersistence getBrlXmlPersistence() {
+		return BRXMLPersistence.getInstance();
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BaseXStreamContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BaseXStreamContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/BaseXStreamContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,47 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.ide.common.client.modeldriven.brl.PortableObject;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepositoryException;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.WorkingSetConfigData;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+public abstract class BaseXStreamContentHandler<T extends PortableObject> extends ContentHandler {
+	protected final Logger log = org.slf4j.LoggerFactory.getLogger(getClass());
+	
+	//TODO {diega bauna} create a CDI producer 
+	private static final XStream xt = new XStream(new DomDriver());
+
+	protected XStream getXStream() {
+		return xt;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item) throws SerializableException {
+		if (item.getContent() != null && item.getContent().length() > 0) {
+			try {
+				asset.content = (T) getXStream().fromXML(item.getContent());
+			} catch (RulesRepositoryException e) {
+				log.error("error marshalling asset content: " + asset.metaData.name, e);
+				throw new SerializableException(e.getMessage());
+			}
+		} else {
+			asset.content = new WorkingSetConfigData();
+		}
+	}
+
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
+		try {
+			repoAsset.updateContent(getXStream().toXML(asset.content));
+		} catch (Exception e) {
+			log.error("error marshalling asset content: " + asset.metaData.name, e);
+			throw new SerializableException(e.getMessage());
+		}
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,167 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.List;
+import java.util.Map;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.CategoryItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+/**
+ * All content handlers must implement this, and be registered in
+ * content_types.properties
+ * 
+ * @author Michael Neale
+ * 
+ */
+public abstract class ContentHandler {
+
+	/**
+	 * When loading asset content.
+	 * 
+	 * @param asset
+	 *            The target.
+	 * @param item
+	 *            The source.
+	 * @throws SerializableException
+	 */
+	public abstract void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item) throws SerializableException;
+
+	/**
+	 * For storing the asset content back into the repo node (any changes).
+	 * 
+	 * @param asset
+	 * @param repoAsset
+	 * @throws SerializableException
+	 */
+	public abstract void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException;
+
+	/**
+	 * @return true if the current content type is for a rule asset. If it is a
+	 *         rule asset, then it can be assembled into a package. If its not,
+	 *         then it is there, nominally to support compiling or
+	 *         validation/testing of the package (eg a model, or a dsl file).
+	 */
+	public boolean isRuleAsset() {
+		return this instanceof IRuleAsset;
+	}
+
+	private String findParentCategory(AssetItem asset, String currentCat) {
+		// Start your search at the top
+		CategoryItem item = asset.getRulesRepository().loadCategory("/");
+		return findCategoryInChild(item, currentCat);
+	}
+
+	private String findCategoryInChild(CategoryItem item, String currentCat) {
+		List<CategoryItem> children = item.getChildTags();
+		for (int i = 0; i < children.size(); i++) {
+			if (((CategoryItem) children.get(i)).getName().equals(currentCat)) {
+				return item.getName();
+			} else {
+				String check = findCategoryInChild((CategoryItem) children.get(i), currentCat);
+				if (check != null && check.length() > 0) {
+					return check;
+				}
+			}
+
+		}
+		return "";
+	}
+
+	private String findKeyforValue(HashMap<String, String> catRules, String catToFind) {
+		for (Map.Entry<String, String> entry : catRules.entrySet()) {
+			// Found rule name that should be used to extend current rule as
+			// defined in the Category Rule
+			if (entry.getValue().equals(catToFind)) {
+				return entry.getKey();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * Search Categories in a package against the current rule to see if the
+	 * current rule should be extended, via another rule. IE rule rule1 extends
+	 * rule2 This is an implementation of that DRL feature, via Category to Rule
+	 * mappings in Guvnor
+	 * 
+	 * @param asset
+	 * @return rule that should be extended, based on categories
+	 */
+	protected String parentNameFromCategory(AssetItem asset, String currentParent) {
+
+		List<CategoryItem> cats = asset.getCategories();
+		String catName = null;
+		String parentCat = null;
+		if (cats.size() > 0) {
+			// for(int i=0;i< cats.size(); i++){
+			// System.out.println(i+" Cat: "+((CategoryItem)(cats.get(i))).getName());
+			// System.out.println(i+" Path: "+((CategoryItem)(cats.get(i))).getFullPath());
+			//        		
+			// }
+			catName = cats.get(0).getName();
+		}
+		// get all Category Rules for Package
+		HashMap<String, String> catRules = asset.getPackage().getCategoryRules();
+
+		String newParent = currentParent;
+		if (null != catRules && null != catName) {
+			// Asset or Rule is actually used in the Category Rule, so ignore
+			// the category of the normal rule
+			// Either extend from the parent category rule or none at all
+			String ruleName = asset.getName();
+			if (catRules.containsKey(ruleName)) {
+				// find Cat for your rule
+				parentCat = findParentCategory(asset, catRules.get(ruleName));
+				// System.out.println("Found rule: " + ruleName +
+				// " in categoryRuleHash, Parent Cat: " + parentCat);
+				// This rule name is in our Category Rules
+				// See if there is a Parent and it has a rule defined, if so
+				// extend that rule, to create a chain
+				if (parentCat != null && parentCat.length() > 0 && catRules.containsValue(parentCat)) {
+					// System.out.println("Should have rule in Category to use for my Parent");
+					newParent = findKeyforValue(catRules, parentCat);
+
+				} else {
+					// Must be blank to avoid circular reference
+					newParent = "";
+				}
+				// else make sure parent is ALWAYS blank, to avoid circle
+				// references
+
+				// If the rule is not defined in the Category Rule, check to
+				// make sure currentParent isnt already set
+				// If you wanted to override the Category Rule, with a extends
+				// on the rule manually, honor it
+			} else if (currentParent != null && currentParent.length() > 0) {
+				newParent = currentParent;
+				// Normal use case
+				// Category of the current asset has been defined in Category
+				// Rules for the current package
+			} else if (catRules.containsValue(catName)) {
+				newParent = findKeyforValue(catRules, catName);
+			}
+		}
+		return newParent;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DRLFileContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DRLFileContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DRLFileContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,119 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+import java.io.StringReader;
+import java.util.StringTokenizer;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.repository.AssetItem;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler;
+
+public class DRLFileContentHandler extends PlainTextContentHandler
+    implements
+    IRuleAsset {
+
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
+                                                                   IOException {
+        String content = getRawDRL( asset );
+        if ( content != null && !content.trim().equals( "" ) ) {
+            builder.addPackageFromDrl( new StringReader( content ) );
+        }
+    }
+
+    String wrapRuleDeclaration(String name,
+                               String parentName,
+                               String content) {
+        if ( parentName == null || "".equals( parentName ) ) {
+            return "rule '" + name + "'\n" + getContent( content ) + "\nend";
+        } else {
+            return "rule '" + name + "' extends " + parentName + "\n" + getContent( content ) + "\nend";
+        }
+    }
+
+    String getContent(String content) {
+        if ( content != null && content.indexOf( "dialect" ) == -1 ) {
+            return "dialect 'mvel'\n" + content;
+        }
+        return content;
+    }
+
+    /**
+     * This will try and sniff ouf if its a stand alone rule which
+     * will use the asset name as the rule name, or if it should be treated as a package
+     * (in the latter case, the content is passed as it to the compiler).
+     */
+    public static boolean isStandAloneRule(String content) {
+        if ( content == null || "".equals( content.trim() ) ) {
+            return false;
+        }
+        StringTokenizer st = new StringTokenizer( content,
+                                                  "\n\r" );
+        while ( st.hasMoreTokens() ) {
+            String tok = st.nextToken().trim();
+            if ( tok.startsWith( "when" ) ) {
+                //well obviously it is stand alone...
+                return true;
+            }
+            //otherwise sniff for a suitable keyword at the start of a line
+            if ( startsWithWord( "package",
+                                 tok ) || startsWithWord( "rule",
+                                                          tok ) || startsWithWord( "end",
+                                                                                   tok ) || startsWithWord( "function",
+                                                                                                            tok ) || startsWithWord( "query",
+                                                                                                                                     tok ) ) {
+                return false;
+            }
+        }
+        return true;
+
+    }
+
+    static boolean startsWithWord(String word,
+                                  String sentence) {
+        String[] words = sentence.trim().split( "\\s" );
+        if ( words.length > 0 ) {
+            return words[0].equals( word );
+        } else {
+            return false;
+        }
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder,
+                            AssetItem asset,
+                            StringBuffer buf) {
+        String content = getRawDRL( asset );
+        buf.append( content );
+    }
+
+    public String getRawDRL(AssetItem asset) {
+        String content = asset.getContent();
+        if ( isStandAloneRule( content ) ) {
+
+            String parentName = this.parentNameFromCategory( asset,
+                                                             "" );
+            content = wrapRuleDeclaration( asset.getName(),
+                                           parentName,
+                                           content );
+        }
+        return content;
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLDefinitionContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLDefinitionContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLDefinitionContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,22 @@
+package org.drools.repository.services.internal.contenthandlers;
+/*
+ * 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.
+ */
+
+
+
+public class DSLDefinitionContentHandler extends PlainTextContentHandler {
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLRuleContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLRuleContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DSLRuleContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,138 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+import java.io.StringReader;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.lang.ExpanderException;
+import org.drools.lang.dsl.DefaultExpander;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleContentText;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.ContentAssemblyError;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler;
+
+public class DSLRuleContentHandler extends ContentHandler
+    implements
+    IRuleAsset {
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+        RuleContentText text = new RuleContentText();
+        text.content = item.getContent();
+
+        asset.content = text;
+
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+
+        RuleContentText text = (RuleContentText) asset.content;
+        repoAsset.updateContent( text.content );
+
+    }
+
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
+                                                                   IOException {
+        DefaultExpander expander = getExpander( builder,
+                                                asset,
+                                                logger );
+
+        //add the rule keyword if its 'stand alone'
+        String source = asset.getContent();
+        if ( DRLFileContentHandler.isStandAloneRule( source ) ) {
+            String parentName = this.parentNameFromCategory( asset,
+                                                             "" );
+            source = wrapRule( asset,
+                               parentName,
+                               source );
+        }
+
+        //expand and check for errors
+        String drl = expander.expand( source );
+        if ( expander.hasErrors() ) {
+            List exErrs = expander.getErrors();
+            for ( Iterator iter = exErrs.iterator(); iter.hasNext(); ) {
+                ExpanderException ex = (ExpanderException) iter.next();
+                logger.logError( new ContentAssemblyError( asset,
+                                                           ex.getMessage() ) );
+            }
+            return;
+        }
+
+        builder.addPackageFromDrl( new StringReader( drl ) );
+    }
+
+    private DefaultExpander getExpander(BRMSPackageBuilder builder,
+                                        AssetItem asset,
+                                        ContentPackageAssembler.ErrorLogger logger) {
+
+        if ( !builder.hasDSL() ) {
+            logger.logError( new ContentAssemblyError( asset,
+                                                       "This rule asset requires a DSL, yet none were configured in the package." ) );
+        }
+
+        return builder.getDSLExpander();
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder,
+                            AssetItem asset,
+                            StringBuffer buf) {
+        //add the rule keyword if its 'stand alone'
+        String source = getRawDRL( asset );
+
+        DefaultExpander expander = builder.getDSLExpander();
+        buf.append( expander.expand( source ) );
+
+    }
+
+    private String wrapRule(AssetItem asset,
+                            String parentName,
+                            String source) {
+        if ( parentName == null || "".equals( parentName ) ) {
+            return "rule '" + asset.getName() + "' \n" + source + "\nend";
+        } else {
+            return "rule '" + asset.getName() + "' extends " + parentName + " \n" + source + "\nend";
+
+        }
+    }
+
+    public String getRawDRL(AssetItem asset) {
+        String source = asset.getContent();
+        if ( DRLFileContentHandler.isStandAloneRule( source ) ) {
+            String parentName = this.parentNameFromCategory( asset,
+                                                             "" );
+            source = wrapRule( asset,
+                               parentName,
+                               source );
+        }
+
+        return source;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DecisionTableXLSHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DecisionTableXLSHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DecisionTableXLSHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,79 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+import java.io.StringReader;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.decisiontable.InputType;
+import org.drools.decisiontable.SpreadsheetCompiler;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler.ErrorLogger;
+
+/**
+ * This is for handling XLS content (classic decision tables).
+ *
+ * @author Michael Neale
+ */
+public class DecisionTableXLSHandler extends ContentHandler
+    implements
+    IRuleAsset {
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+        //do nothing, as we have an attachment
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+        //do nothing, as we have an attachment
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder,
+                            AssetItem asset,
+                            StringBuffer buf) {
+        buf.append( getRawDRL( asset ) );
+    }
+
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ErrorLogger logger) throws DroolsParserException,
+                                           IOException {
+        StringBuffer buf = new StringBuffer();
+
+        assembleDRL( builder,
+                     asset,
+                     buf );
+        builder.addPackageFromDrl( new StringReader( buf.toString() ) );
+
+    }
+
+    public String getRawDRL(AssetItem asset) {
+        SpreadsheetCompiler comp = new SpreadsheetCompiler();
+        String drl = comp.compile( false,
+                                   asset.getBinaryContentAttachment(),
+                                   InputType.XLS );
+        return drl;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DefaultContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DefaultContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/DefaultContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,23 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+/**
+ * Default ones will store things as an attachment.
+ */
+public class DefaultContentHandler extends ContentHandler {
+
+	@Override
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg,
+			AssetItem item) throws SerializableException {
+	}
+
+	@Override
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset)
+			throws SerializableException {
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/EnumerationContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/EnumerationContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/EnumerationContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,61 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * Copyright 2007 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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.ide.common.server.util.DataEnumLoader;
+import org.drools.repository.AssetItem;
+import org.drools.repository.model.client.BuilderResult;
+import org.drools.repository.model.client.BuilderResultLine;
+
+
+
+public class EnumerationContentHandler extends PlainTextContentHandler implements IValidating {
+
+    public BuilderResult validateAsset(AssetItem asset) {
+
+        String content = asset.getContent();
+        DataEnumLoader loader = new DataEnumLoader(content);
+        if (!loader.hasErrors()) {
+            return new BuilderResult();
+        } else {
+            List<BuilderResultLine> errors = new ArrayList<BuilderResultLine>();
+            List errs = loader.getErrors();
+
+
+            for ( Iterator iter = errs.iterator(); iter.hasNext(); ) {
+
+                BuilderResultLine result = new BuilderResultLine();
+                result.assetName = asset.getName();
+                result.assetFormat = asset.getFormat();
+                result.uuid = asset.getUUID();
+                result.message = (String) iter.next();
+                errors.add( result );
+            }
+
+
+            BuilderResult result = new BuilderResult();
+            result.lines = errors.toArray( new BuilderResultLine[errors.size()] );
+            
+            return result;
+        }
+    }
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FactModelContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FactModelContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FactModelContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,117 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.TypeDeclarationDescr;
+import org.drools.lang.descr.TypeFieldDescr;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.FactMetaModel;
+import org.drools.repository.model.client.FactModels;
+import org.drools.repository.model.client.FieldMetaModel;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleContentText;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+public class FactModelContentHandler extends ContentHandler {
+
+	@Override
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg,
+			AssetItem item) throws SerializableException {
+		try {
+			List<FactMetaModel> models = toModel(item.getContent());
+			FactModels ms = new FactModels();
+			ms.models = models;
+			asset.content = ms;
+		} catch (DroolsParserException e) {
+			System.err.println("Unable to parse the DRL for the model - falling back to text (" + e.getMessage() + ")");
+			RuleContentText text = new RuleContentText();
+			text.content = item.getContent();
+			asset.content = text;
+		}
+
+	}
+
+	@Override
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset)
+			throws SerializableException {
+		if (asset.content instanceof FactModels) {
+			FactModels fm = (FactModels) asset.content;
+			repoAsset.updateContent(toDRL(fm.models));
+		} else {
+			RuleContentText text = (RuleContentText) asset.content;
+			repoAsset.updateContent(text.content);
+		}
+
+	}
+
+
+	String toDRL(FactMetaModel mm) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("declare " + mm.name);
+		for (int i = 0; i < mm.fields.size(); i++) {
+			FieldMetaModel f = (FieldMetaModel) mm.fields.get(i);
+			sb.append("\n\t");
+			sb.append(f.name + ": " + f.type);
+		}
+		sb.append("\nend");
+		return sb.toString();
+	}
+
+	List<FactMetaModel> toModel(String drl) throws DroolsParserException {
+        if (drl != null && drl.startsWith("#advanced")) {
+            throw new DroolsParserException("Using advanced editor");
+        }
+    	DrlParser parser = new DrlParser();
+    	PackageDescr pkg = parser.parse(drl);
+    	if (parser.hasErrors()) {
+    		throw new DroolsParserException("The model drl " + drl + " is not valid");
+    	}
+
+    	if (pkg == null) return new ArrayList<FactMetaModel>();
+    	List<TypeDeclarationDescr> types = pkg.getTypeDeclarations();
+    	List<FactMetaModel> list = new ArrayList<FactMetaModel>(types.size());
+    	for (TypeDeclarationDescr td : types) {
+    		FactMetaModel mm = new FactMetaModel();
+			mm.name = td.getTypeName();
+			if (td.getMetaAttributes().size() > 0) {
+				//can't do this yet
+				throw new DroolsParserException("will have to use text for this");
+			}
+
+
+			Map<String, TypeFieldDescr> fields = td.getFields();
+			for (Iterator<Map.Entry<String, TypeFieldDescr>> iterator = fields.entrySet().iterator(); iterator.hasNext();) {
+				Map.Entry<String, TypeFieldDescr> en = iterator.next();
+				String fieldName = en.getKey();
+				TypeFieldDescr descr = en.getValue();
+				if (descr.getMetaAttributes().size() > 0) {
+					//can't do this yet
+					throw new DroolsParserException("using text");
+				}
+				FieldMetaModel fm = new FieldMetaModel(fieldName, descr.getPattern().getObjectType());
+
+				mm.fields.add(fm);
+			}
+			list.add(mm);
+		}
+    	return list;
+	}
+
+	String toDRL(List<FactMetaModel> models) {
+		StringBuilder sb = new StringBuilder();
+		for (FactMetaModel factMetaModel : models) {
+			String drl = toDRL(factMetaModel);
+			sb.append(drl + "\n\n");
+		}
+		return sb.toString().trim();
+	}
+
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FunctionContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FunctionContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/FunctionContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,22 @@
+package org.drools.repository.services.internal.contenthandlers;
+/*
+ * 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.
+ */
+
+
+
+public class FunctionContentHandler extends PlainTextContentHandler {
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/GuidedDTContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/GuidedDTContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/GuidedDTContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,90 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+import java.io.StringReader;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.ide.common.client.modeldriven.dt.GuidedDecisionTable;
+import org.drools.ide.common.server.util.GuidedDTDRLPersistence;
+import org.drools.ide.common.server.util.GuidedDTXMLPersistence;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler;
+
+/**
+ * For guided decision tables.
+ *
+ * @author Michael Neale
+ */
+public class GuidedDTContentHandler extends ContentHandler
+    implements
+    IRuleAsset {
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+        GuidedDecisionTable model = GuidedDTXMLPersistence.getInstance().unmarshal( item.getContent() );
+
+        asset.content = model;
+
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+        GuidedDecisionTable data = (GuidedDecisionTable) asset.content;
+        if ( data.tableName == null ) {
+            data.tableName = repoAsset.getName();
+        }
+
+        // Change the row numbers so they are in the same order as the rows.
+        for ( int i = 0; i < data.data.length; i++ ) {
+            data.data[i][0] = String.valueOf( i + 1 );
+        }
+
+        repoAsset.updateContent( GuidedDTXMLPersistence.getInstance().marshal( data ) );
+    }
+
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
+                                                                   IOException {
+        String drl = getRawDRL( asset );
+        if ( drl.equals( "" ) ) return;
+        builder.addPackageFromDrl( new StringReader( drl ) );
+    }
+
+    public void assembleDRL(BRMSPackageBuilder builder,
+                            AssetItem asset,
+                            StringBuffer buf) {
+        String drl = getRawDRL( asset );
+        buf.append( drl );
+    }
+
+    public String getRawDRL(AssetItem asset) {
+        GuidedDecisionTable model = GuidedDTXMLPersistence.getInstance().unmarshal( asset.getContent() );
+        model.tableName = asset.getName();
+        model.parentName = this.parentNameFromCategory( asset,
+                                                        model.parentName );
+
+        return GuidedDTDRLPersistence.getInstance().marshal( model );
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICanHasAttachment.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICanHasAttachment.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICanHasAttachment.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,19 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import java.io.IOException;
+
+import org.drools.repository.AssetItem;
+
+/**
+ * =(^.^)=
+ * 
+ * @author Toni Rikkola
+ *
+ */
+public interface ICanHasAttachment {
+
+    public void onAttachmentAdded(AssetItem item) throws IOException;
+
+    public void onAttachmentRemoved(AssetItem item) throws IOException;
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICompilable.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICompilable.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ICompilable.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,43 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.repository.AssetItem;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler;
+
+/**
+ * This inferface indicates that an asset is a rule asset content type, 
+ * ie not a model, dsl etc that supports package compilation.
+ * 
+ * @author Michael Neale
+ */
+public interface ICompilable {
+
+    /**
+     * This will be called when the asset is required to compile itself, 
+     * in the context of the given builder.
+     */
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ContentPackageAssembler.ErrorLogger logger) throws DroolsParserException,
+                                                                   IOException;
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IRuleAsset.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IRuleAsset.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IRuleAsset.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,25 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public interface IRuleAsset
+    extends
+    ICompilable {
+
+    /**
+     * This will be called when a rule asset is to render itself to DRL source.
+     */
+    public void assembleDRL(BRMSPackageBuilder builder,
+                            AssetItem asset,
+                            StringBuffer buf);
+
+    /**
+     * If the rule has DSL in it, it is presented unexpanded.
+     */
+    public String getRawDRL(AssetItem asset);
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IValidating.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IValidating.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/IValidating.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,16 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.model.client.BuilderResult;
+
+/**
+ * This interface indicates that an asset can validate itself, and present errors if requested.
+ * Each IRuleAsset can already do this, so its not really required for them. Only other non-rule type assets.
+ * (eg supporting). The idea is that feedback can be provided where the user is entering stuff.
+ */
+public interface IValidating {
+
+    BuilderResult validateAsset(AssetItem asset);
+
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ModelContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ModelContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ModelContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,141 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.IOException;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+import java.util.regex.Pattern;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.util.ServiceImplementation;
+
+/**
+ * This is used for handling jar models for the rules.
+ * @author Michael Neale
+ */
+public class ModelContentHandler extends ContentHandler
+    implements
+    ICanHasAttachment {
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+        // do nothing, as we have an attachment
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+        // do nothing, as we have an attachment
+    }
+
+    /**
+     * This is called when a model jar is attached, it will peer into it, and then automatically add imports
+     * if there aren't any already in the package header configuration.
+     */
+    public void onAttachmentAdded(AssetItem asset) throws IOException {
+
+        PackageItem pkg = asset.getPackage();
+        StringBuilder header = createNewHeader( ServiceImplementation.getDroolsHeader( pkg ) );
+
+        Set<String> imports = getImportsFromJar( asset.getBinaryContentAttachment() );
+
+        for ( String importLine : imports ) {
+        	Pattern pattern = Pattern.compile("\\b" + importLine.replace(".", "\\.") + "\\b");
+        	if (!pattern.matcher(header).find()) {
+        		header.append( importLine ).append( "\n" );
+        	}
+        }
+
+		ServiceImplementation.updateDroolsHeader(header.toString(), pkg);
+		pkg.checkin("Imports setup automatically on model import.");
+
+    }
+
+    public void onAttachmentRemoved(AssetItem item) throws IOException {
+
+        PackageItem pkg = item.getPackage();
+        StringBuilder header = createNewHeader( ServiceImplementation.getDroolsHeader( pkg ) );
+
+        Set<String> imports = getImportsFromJar( item.getBinaryContentAttachment() );
+
+        for ( String importLine : imports ) {
+            String importLineWithLineEnd = importLine + "\n";
+
+            header = removeImportIfItExists( header,
+                                             importLineWithLineEnd );
+        }
+
+        ServiceImplementation.updateDroolsHeader( header.toString(),
+                                                  pkg );
+
+        pkg.checkin( "Imports removed automatically on model archiving." );
+
+    }
+
+    private StringBuilder removeImportIfItExists(StringBuilder header,
+                                                 String importLine) {
+        if ( header.indexOf( importLine ) >= 0 ) {
+            int indexOfImportLine = header.indexOf( importLine );
+            header = header.replace( indexOfImportLine,
+                                     indexOfImportLine + importLine.length(),
+                                     "" );
+        }
+        return header;
+    }
+
+    private StringBuilder createNewHeader(String header) {
+        StringBuilder buf = new StringBuilder();
+
+        if ( header != null ) {
+            buf.append( header );
+            buf.append( '\n' );
+        }
+        return buf;
+    }
+
+    private Set<String> getImportsFromJar(InputStream in) throws IOException {
+        Set<String> imports = new HashSet<String>();
+
+        JarInputStream jis = new JarInputStream( in );
+        JarEntry entry = null;
+        while ( (entry = jis.getNextJarEntry()) != null ) {
+            if ( !entry.isDirectory() ) {
+                if ( entry.getName().endsWith( ".class" ) && entry.getName().indexOf( '$' ) == -1 && !entry.getName().endsWith( "package-info.class" ) ) {
+
+                    String line = "import " + convertPathToName( entry.getName() );
+                    imports.add( line );
+                }
+            }
+        }
+
+        return imports;
+    }
+
+    public static String convertPathToName(String name) {
+        return name.replace( ".class",
+                             "" ).replace( "/",
+                                           "." );
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PlainTextContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PlainTextContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PlainTextContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,45 @@
+package org.drools.repository.services.internal.contenthandlers;
+/*
+ * 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.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleContentText;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+public abstract class PlainTextContentHandler extends ContentHandler {
+
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg, 
+                                     AssetItem item) throws SerializableException {
+        //default to text, goode olde texte, just like mum used to make.
+        RuleContentText text = new RuleContentText();
+        text.content = item.getContent();
+        asset.content = text;
+
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+        repoAsset.updateContent( ((RuleContentText)asset.content).content ); 
+
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PropertiesHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PropertiesHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/PropertiesHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,69 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.PropertiesHolder;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.util.PropertiesPersistence;
+
+/**
+ * Handle *.properties file as a content for rule asset instead of a binary
+ * attachment
+ * 
+ * @author Anton Arhipov
+ */
+public class PropertiesHandler extends ContentHandler {
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg,
+			AssetItem item) throws SerializableException {
+		if (item.getContent() != null) {
+			asset.content = PropertiesPersistence.getInstance().unmarshal(
+					item.getContent());
+		}
+	}
+
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset)
+			throws SerializableException {
+		PropertiesHolder holder = (PropertiesHolder) asset.content;
+		String toSave = PropertiesPersistence.getInstance().marshal(holder);
+
+		InputStream input = null;
+		try {
+			try {
+				input = new ByteArrayInputStream(toSave.getBytes("UTF-8"));
+				repoAsset.updateBinaryContentAttachment(input);
+			} finally {
+				if (input != null) {
+					input.close();
+				}
+			}
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+			throw new RuntimeException(e); // TODO: ?
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/RuleFlowHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/RuleFlowHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/RuleFlowHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,169 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+/*
+ * 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.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.xml.XmlProcessReader;
+import org.drools.compiler.xml.XmlRuleFlowProcessDumper;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleFlowContentModel;
+import org.drools.repository.model.client.exceptions.SerializableException;
+import org.drools.repository.services.internal.builder.BRMSPackageBuilder;
+import org.drools.repository.services.internal.builder.RuleFlowContentModelBuilder;
+import org.drools.repository.services.internal.builder.RuleFlowProcessBuilder;
+import org.drools.repository.services.internal.builder.ContentPackageAssembler.ErrorLogger;
+import org.drools.ruleflow.core.RuleFlowProcess;
+
+public class RuleFlowHandler extends ContentHandler
+    implements
+    ICompilable,
+    ICanHasAttachment {
+
+    public void retrieveAssetContent(RuleAsset asset,
+                                     PackageItem pkg,
+                                     AssetItem item) throws SerializableException {
+
+        RuleFlowProcess process = readProcess( new ByteArrayInputStream( item.getContent().getBytes() ) );
+
+        if ( process != null ) {
+            RuleFlowContentModel content = RuleFlowContentModelBuilder.createModel( process );
+            content.setXml( item.getContent() );
+            asset.content = content;
+        } else if ( process == null && !"".equals( item.getContent() ) ) {
+            asset.content = new RuleFlowContentModel();
+            //
+            // 
+            // Migrate v4 ruleflows to v5
+            // All we can do is put the old drools 4 rfm back as the xml so 
+            // that we can at least rebuild the package with it if the
+            // migrate ruleflow system property is set true.
+            //
+            ((RuleFlowContentModel) asset.content).setXml( item.getContent() );
+        }
+
+    }
+
+    protected RuleFlowProcess readProcess(InputStream is) {
+
+        RuleFlowProcess process = null;
+
+        try {
+            InputStreamReader reader = new InputStreamReader( is );
+            PackageBuilderConfiguration configuration = new PackageBuilderConfiguration();
+            XmlProcessReader xmlReader = new XmlProcessReader( configuration.getSemanticModules() );
+
+            try {
+                process = (RuleFlowProcess) xmlReader.read( reader );
+
+            } catch ( Exception e ) {
+                reader.close();
+                throw new Exception( "Unable to read rule flow XML." );
+            }
+            reader.close();
+        } catch ( Exception e ) {
+            return null;
+        }
+
+        return process;
+    }
+
+    public void storeAssetContent(RuleAsset asset,
+                                  AssetItem repoAsset) throws SerializableException {
+
+        RuleFlowContentModel content = (RuleFlowContentModel) asset.content;
+
+        // 
+        // Migrate v4 ruleflows to v5
+        // Added guards to check for nulls in the case where the ruleflows
+        // have not been migrated from drools 4 to 5.
+        //
+        if ( content != null ) {
+            if ( content.getXml() != null ) {
+                RuleFlowProcess process = readProcess( new ByteArrayInputStream( content.getXml().getBytes() ) );
+
+                if ( process != null ) {
+                    RuleFlowProcessBuilder.updateProcess( process,
+                                                          content.getNodes() );
+
+                    XmlRuleFlowProcessDumper dumper = XmlRuleFlowProcessDumper.INSTANCE;
+                    String out = dumper.dump( process );
+
+                    repoAsset.updateContent( out );
+                } else {
+                    //
+                    // Migrate v4 ruleflows to v5
+                    // Put the old contents back as there is no updating possible
+                    //
+                    repoAsset.updateContent( content.getXml() );
+                }
+            }
+        }
+    }
+
+    /**
+     * The rule flow can not be built if the package name is not the same as the package that it exists in.
+     * This changes the package name.
+     * 
+     * @param item
+     */
+    public void onAttachmentAdded(AssetItem item) {
+        String content = item.getContent();
+
+        if ( content != null && !content.equals( "" ) ) {
+            RuleFlowProcess process = readProcess( new ByteArrayInputStream( content.getBytes() ) );
+
+            if ( process != null ) {
+                String packageName = item.getPackageName();
+                String originalPackageName = process.getPackageName();
+
+                if ( !packageName.equals( originalPackageName ) ) {
+                    process.setPackageName( packageName );
+
+                    XmlRuleFlowProcessDumper dumper = XmlRuleFlowProcessDumper.INSTANCE;
+                    String out = dumper.dump( process );
+
+                    item.updateContent( out );
+
+                    item.checkin( "Changed rule flow package from " + originalPackageName + " to " + packageName );
+                }
+            }
+        }
+    }
+
+    public void onAttachmentRemoved(AssetItem item) throws IOException {
+        // Nothing to do when this asset type is removed.
+    }
+
+    public void compile(BRMSPackageBuilder builder,
+                        AssetItem asset,
+                        ErrorLogger logger) throws DroolsParserException,
+                                           IOException {
+        InputStream ins = asset.getBinaryContentAttachment();
+        if ( ins != null ) {
+            builder.addRuleFlow( new InputStreamReader( asset.getBinaryContentAttachment() ) );
+        }
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ScenarioContentHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ScenarioContentHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/ScenarioContentHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,27 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.ide.common.client.modeldriven.testing.Scenario;
+import org.drools.ide.common.server.util.ScenarioXMLPersistence;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+public class ScenarioContentHandler extends PlainTextContentHandler {
+
+	@Override
+	public void retrieveAssetContent(RuleAsset asset, PackageItem pkg,
+			AssetItem item) throws SerializableException {
+		Scenario sc = ScenarioXMLPersistence.getInstance().unmarshal(item.getContent());
+		asset.content = sc;
+
+	}
+
+	@Override
+	public void storeAssetContent(RuleAsset asset, AssetItem repoAsset)
+			throws SerializableException {
+		Scenario sc = (Scenario) asset.content;
+		repoAsset.updateContent(ScenarioXMLPersistence.getInstance().marshal(sc));
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/TemplateModelHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/TemplateModelHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/TemplateModelHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,19 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.ide.common.server.util.BRLPersistence;
+import org.drools.repository.services.internal.util.BRDRTPersistence;
+import org.drools.repository.services.internal.util.BRDRTXMLPersistence;
+
+public class TemplateModelHandler extends BRLContentHandler {
+
+	@Override
+	protected BRLPersistence getBrlDrlPersistence() {
+		return BRDRTPersistence.getInstance();
+	}
+	
+	@Override
+	protected BRLPersistence getBrlXmlPersistence() {
+		return BRDRTXMLPersistence.getInstance();
+	}
+	
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/WorkingSetHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/WorkingSetHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/WorkingSetHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,9 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import org.drools.repository.model.client.WorkingSetConfigData;
+
+/**
+ *
+ */
+public class WorkingSetHandler extends BaseXStreamContentHandler<WorkingSetConfigData> {
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/XmlFileHandler.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/XmlFileHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/contenthandlers/XmlFileHandler.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,38 @@
+package org.drools.repository.services.internal.contenthandlers;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.model.client.RuleAsset;
+import org.drools.repository.model.client.RuleContentText;
+import org.drools.repository.model.client.exceptions.SerializableException;
+
+/**
+ *
+ */
+public class XmlFileHandler extends PlainTextContentHandler {
+    public void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item)
+            throws SerializableException {
+        if (item.getContent() != null) {
+            RuleContentText text = new RuleContentText();
+            text.content = item.getContent();
+            asset.content = text;
+        }
+    }
+
+    public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
+
+        RuleContentText text = (RuleContentText) asset.content;
+
+        try {
+            InputStream input = new ByteArrayInputStream(text.content.getBytes("UTF-8"));
+            repoAsset.updateBinaryContentAttachment(input);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);     
+        }
+    }
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/Allow.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/Allow.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/Allow.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,12 @@
+package org.drools.repository.services.internal.selectors;
+
+/**
+ * This is a simple named fact for the selectors.
+ * @author michaelneale
+ *
+ */
+public class Allow {
+
+    public Allow() {}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/AssetSelector.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/AssetSelector.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/AssetSelector.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,25 @@
+package org.drools.repository.services.internal.selectors;
+
+import org.drools.repository.AssetItem;
+
+
+/**
+ *
+ * Asset selectors can be used to choose if an asset is part of a build.
+ *
+ * Asset selectors should be stateless, they will be called multiple times.
+ *
+ * @author Michael Neale
+ *
+ */
+public interface AssetSelector {
+
+
+	/**
+	 *
+	 * @param asset The asset to be tested.
+	 * @return true if asset it allowed.
+	 */
+	boolean isAssetAllowed(AssetItem asset);
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/BuiltInSelector.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/BuiltInSelector.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/BuiltInSelector.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,113 @@
+package org.drools.repository.services.internal.selectors;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.CategoryItem;
+
+public class BuiltInSelector implements AssetSelector {
+	private String status;
+	private String statusOperator;
+	private String category;
+	private String categoryOperator;
+	private boolean enableStatusSelector;
+	private boolean enableCategorySelector;	
+
+    public BuiltInSelector() {
+	}	
+    
+ 	public boolean isEnableStatusSelector() {
+		return enableStatusSelector;
+	}
+
+	public void setEnableStatusSelector(boolean enableStatusSelector) {
+		this.enableStatusSelector = enableStatusSelector;
+	}
+
+	public boolean isEnableCategorySelector() {
+		return enableCategorySelector;
+	}
+
+	public void setEnableCategorySelector(boolean enableCategorySelector) {
+		this.enableCategorySelector = enableCategorySelector;
+	}
+	
+    public String getCategory() {
+		return category;
+	}
+
+	public void setCategory(String category) {
+		this.category = category;
+	}
+
+	public String getCategoryOperator() {
+		return categoryOperator;
+	}
+
+	public void setCategoryOperator(String categoryOperator) {
+		this.categoryOperator = categoryOperator;
+	}
+		
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getStatusOperator() {
+		return statusOperator;
+	}
+
+	public void setStatusOperator(String statusOperator) {
+		this.statusOperator = statusOperator;
+	}
+    
+	public boolean isAssetAllowed(AssetItem item) {
+		if(enableStatusSelector && enableCategorySelector) {
+			return (isStatusAllowed(item) && isCategoryAllowed(item));
+		} else if (enableStatusSelector) {
+			return isStatusAllowed(item);
+		} else if (enableCategorySelector) {
+			return isCategoryAllowed(item);
+		}
+		
+		//allow everything if none enabled.
+		return true;
+	}
+	
+	private boolean isStatusAllowed(AssetItem item) {
+		if("=".equals(statusOperator)) {
+		    if (item.getStateDescription().equals(status))
+			    return true;
+		    else
+			    return false;
+		} else if ("!=".equals(statusOperator)) {
+			if (!item.getStateDescription().equals(status))
+			    return true;
+		    else
+			    return false;
+		}
+	
+		return false;		
+	}
+	
+	private boolean isCategoryAllowed(AssetItem item) {
+		if("=".equals(categoryOperator)) {			
+            for ( CategoryItem cat : item.getCategories() ) {
+            	if (cat.getName().equals(category)) {
+            		return true;
+            	}
+            }
+            return false;
+		} else if ("!=".equals(categoryOperator)) {
+            for ( CategoryItem cat : item.getCategories() ) {
+            	if (!cat.getName().equals(category)) {
+            		return true;
+            	}
+            }
+            return false;
+		}
+	
+		return false;		
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/RuleBasedSelector.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/RuleBasedSelector.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/RuleBasedSelector.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,67 @@
+package org.drools.repository.services.internal.selectors;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.drools.CheckedDroolsException;
+import org.drools.RuleBase;
+import org.drools.RuntimeDroolsException;
+import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
+import org.drools.compiler.RuleBaseLoader;
+import org.drools.repository.AssetItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This uses rules to decide if an asset is to be included in a build.
+ *
+ * @author Michael Neale
+ *
+ */
+public class RuleBasedSelector implements AssetSelector {
+
+    private static final Logger log = LoggerFactory.getLogger( RuleBasedSelector.class );
+
+
+	String ruleFile;
+    private RuleBase ruleBase;
+
+    public RuleBasedSelector(String val) {
+        this.ruleFile = val;
+
+        InputStream ins = this.getClass().getResourceAsStream( ruleFile );
+        InputStreamReader reader = new InputStreamReader(ins);
+
+
+        try {
+            this.ruleBase = RuleBaseLoader.getInstance().loadFromReader( reader );
+        } catch ( CheckedDroolsException e ) {
+            log.error( e.getMessage(), e );
+            throw new RuntimeDroolsException(e);
+        } catch ( IOException e ) {
+            log.error( e.getMessage(), e );
+            throw new RuntimeDroolsException(e);
+        }
+
+    }
+
+    public boolean isAssetAllowed(AssetItem asset) {
+        return evalRules( asset );
+	}
+
+    boolean evalRules(Object asset) {
+        StatelessSession session = ruleBase.newStatelessSession();
+        StatelessSessionResult result = session.executeWithResults( asset );
+
+        java.util.Iterator objects = result.iterateObjects();
+		while(objects.hasNext()) {
+		    if (objects.next() instanceof Allow) {
+		        return true;
+            }
+        }
+		return false;
+    }
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/SelectorManager.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/SelectorManager.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/selectors/SelectorManager.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,98 @@
+package org.drools.repository.services.internal.selectors;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.drools.repository.AssetItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class SelectorManager {
+
+	private static final Logger log = LoggerFactory.getLogger( SelectorManager.class );
+	public static String SELECTOR_CONFIG_PROPERTIES = "/selectors.properties";
+	private static final SelectorManager INSTANCE = new SelectorManager(SELECTOR_CONFIG_PROPERTIES);
+
+    /**
+     * This is a map of the selectors to use.
+     */
+	public final Map<String, AssetSelector> selectors = new HashMap<String, AssetSelector>();
+
+	SelectorManager(String configPath) {
+		log.debug("Loading selectors");
+		Properties props = new Properties();
+		try {
+			props.load(this.getClass().getResourceAsStream(configPath));
+		    props.put("BuiltInSelector", "org.drools.guvnor.server.selector.BuiltInSelector");
+			for (Iterator iter = props.keySet().iterator(); iter.hasNext();) {
+				String selectorName = (String) iter.next();
+				String val = props.getProperty(selectorName);
+                try {
+                    if (val.endsWith("drl")) {
+                        selectors.put(selectorName ,loadRuleSelector( val) );
+                    } else {
+                        selectors.put(selectorName, loadSelectorImplementation( val ));
+                    }
+                } catch (Exception e) {
+                    log.error("Unable to load a selector [" + val + "]", e);
+                }
+			}
+		} catch (IOException e) {
+			log.error("Unable to load selectors.", e);
+		}
+	}
+
+    /**
+     * Return a selector. If the name is null or empty it will return a nil/default selector
+     * (one that lets everything through). If the selector is not found, it will return null;
+     */
+    public AssetSelector getSelector(String name) {
+        if (name == null || "".equals(name.trim())) {
+            return nilSelector();
+        } else {
+            if (this.selectors.containsKey( name )) {
+                return this.selectors.get( name );
+            } else {
+                log.debug( "No selector found by the name of " + name );
+                return null;
+            }
+        }
+    }
+    
+    public String[] getCustomSelectors() {
+    	 Set<String> s = selectors.keySet();    	 
+    	 List<String> selectorList = new ArrayList<String>();
+    	 selectorList.addAll(s);    	 
+    	 selectorList.remove("BuiltInSelector");
+    	 String[] result = new String[selectorList.size()];
+    	 return selectorList.toArray(result);
+    }
+
+	private AssetSelector nilSelector() {
+        return new AssetSelector() {
+            public boolean isAssetAllowed(AssetItem asset) {
+                return true;
+            }
+        };
+    }
+
+    private AssetSelector loadSelectorImplementation(String val) throws Exception {
+        return (AssetSelector) Thread.currentThread().getContextClassLoader().loadClass( val ).newInstance();
+ 	}
+
+	private AssetSelector loadRuleSelector(String val) {
+
+		return new RuleBasedSelector(val);
+	}
+
+	public static SelectorManager getInstance() {
+		return INSTANCE;
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTPersistence.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTPersistence.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTPersistence.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,97 @@
+package org.drools.repository.services.internal.util;
+
+import java.io.ByteArrayInputStream;
+
+import org.drools.ide.common.client.modeldriven.brl.RuleModel;
+import org.drools.ide.common.client.modeldriven.dt.TemplateModel;
+import org.drools.ide.common.server.util.BRDRLPersistence;
+import org.drools.ide.common.server.util.BRLPersistence;
+import org.drools.template.DataProvider;
+import org.drools.template.DataProviderCompiler;
+import org.drools.template.objects.ArrayDataProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class persists a {@link TemplateModel} to DRL template 
+ * 
+ * @author baunax
+ */
+public class BRDRTPersistence extends BRDRLPersistence {
+	private static final Logger log = LoggerFactory.getLogger(BRDRTPersistence.class);
+    private static final BRLPersistence INSTANCE = new BRDRTPersistence();
+    private static final String PACKAGE_DECLARATION = "\npackage __template_dummy_package__\n";
+
+    private BRDRTPersistence() {
+    	super();
+    }
+
+    public static BRLPersistence getInstance() {
+        return INSTANCE;
+    }
+    
+    @Override
+    public String marshal(RuleModel model) {
+    	TemplateModel tplModel = (TemplateModel) model;
+    	String ruleTemplate = super.marshalRule(model);
+    	log.debug("ruleTemplate:\n{}", ruleTemplate);
+    	DataProviderCompiler tplCompiler = new DataProviderCompiler();
+    	DataProvider dataProvider; 
+    	if (tplModel.getRowsCount() > 0) {
+    		dataProvider = new ArrayDataProvider(tplModel.getTableAsArray());
+    	} else {
+    		dataProvider = new ArrayDataProvider(generateEmptyIterator(tplModel));
+    	}
+    	
+    	String generatedDRl = tplCompiler.compile(dataProvider, new ByteArrayInputStream(ruleTemplate.getBytes()))
+    		.substring(PACKAGE_DECLARATION.length()).trim();
+    	
+    	log.debug("generated drl:\n{}", generatedDRl);
+		return generatedDRl;
+    }
+    
+	private String[][] generateEmptyIterator(TemplateModel tplModel) {
+		String[][] rows = new String[1][];
+
+		String[] interpolationVariables = tplModel.getInterpolationVariablesList();
+		if (interpolationVariables == null || interpolationVariables.length == 0) {
+			rows[0] = new String[] { "" };
+		} else {
+			for (int i = 0; i < interpolationVariables.length; i++) {
+				interpolationVariables[i] += "_na";
+			}
+			rows[0] = interpolationVariables;
+		}
+		return rows;
+	}
+
+	@Override
+    protected void marshalHeader(RuleModel model, StringBuilder buf) {
+    	TemplateModel tplModel = (TemplateModel) model;
+    	buf.append("template header\n");
+    	
+    	String[] interpolationVariables = tplModel.getInterpolationVariablesList();
+		if (interpolationVariables.length == 0) {
+			buf.append("test_var").append('\n');
+		} else {
+			for (String var : interpolationVariables) {
+				buf.append(var).append('\n');
+			}
+		}
+		buf.append(PACKAGE_DECLARATION)
+    		.append("\ntemplate \"" + super.marshalRuleName(tplModel) + "\"\n\n");
+    	super.marshalHeader(model, buf);
+    }
+    
+    @Override
+    protected String marshalRuleName(RuleModel model) {
+    	return super.marshalRuleName(model) + "_@{row.rowNumber}";
+    }
+    
+    @Override
+    protected void marshalFooter(StringBuilder buf) {
+    	super.marshalFooter(buf);
+    	buf.append("\nend template");
+    }
+    
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTXMLPersistence.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTXMLPersistence.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/BRDRTXMLPersistence.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,45 @@
+package org.drools.repository.services.internal.util;
+
+import org.drools.ide.common.client.modeldriven.brl.RuleModel;
+import org.drools.ide.common.client.modeldriven.dt.TemplateModel;
+import org.drools.ide.common.server.util.BRLPersistence;
+import org.drools.ide.common.server.util.BRXMLPersistence;
+
+/**
+ * This class persists the template rule model to XML and back.
+ *
+ * This is the 'brl' xml format (Business Rule Language).
+ *
+ * @author baunax at gmail.com
+ * @author dieguitoll at gmail.com
+ */
+public class BRDRTXMLPersistence extends BRXMLPersistence {
+	
+	private static final BRLPersistence INSTANCE = new BRDRTXMLPersistence();
+	
+	private BRDRTXMLPersistence() {
+		super();
+	}
+	
+	public static BRLPersistence getInstance() {
+		return INSTANCE;
+	}
+	
+	@Override
+	public String marshal(RuleModel model) {
+		((TemplateModel) model).putInSync();
+		return super.marshal(model);
+	}
+	
+	@Override
+	public TemplateModel unmarshal(String xml) {
+		TemplateModel model = (TemplateModel) super.unmarshal(xml);
+		model.putInSync();
+		return model;
+	}
+	
+	@Override
+	protected RuleModel createEmptyModel() {
+		return new TemplateModel();
+	}
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/MetaDataMapper.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/MetaDataMapper.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/MetaDataMapper.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,151 @@
+package org.drools.repository.services.internal.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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.repository.RulesRepositoryException;
+import org.drools.repository.model.client.MetaData;
+
+/**
+ * This utility uses reflection to map from the MetaData DTO to 
+ * the AssetItem back end class, to adhere to the DRY principle.
+ * 
+ * AssetItem is not a remotable instance, but MetaData is.
+ * 
+ * @author Michael Neale
+ */
+public class MetaDataMapper {
+
+    
+    private Map<Class<?>, Map<Field, Method>> writeMappingsForClass = new HashMap<Class<?>, Map<Field, Method>>();
+
+    private Map<Class<?>, Map<Field, Method>> readMappipngsForClass = new HashMap<Class<?>, Map<Field, Method>>();
+    
+    public void copyFromMetaData(MetaData data, Object target) {
+    	
+        for(Map.Entry<Field, Method> entry : getWriteMappings( data,target ).entrySet()){
+        	try {
+                entry.getValue().invoke( target, new Object[] {entry.getKey().get( data )} ) ;
+            } catch ( IllegalArgumentException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( IllegalAccessException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( InvocationTargetException e1 ) {
+                throw new RulesRepositoryException(e1);
+            }
+        }
+    }
+
+    private Map<Field, Method> getWriteMappings(MetaData data, Object target) {
+        if (!this.writeMappingsForClass.containsKey( target.getClass() )) {
+            Map<Field, Method> writeMappings = loadWriteMappings( data,
+                                                    target.getClass() );
+            writeMappingsForClass.put( target.getClass(), writeMappings );
+        }
+        return writeMappingsForClass.get( target.getClass() );
+    }
+    
+    private Map<Field, Method> loadWriteMappings(MetaData data, Class<?> bean) {
+        Map<Field, Method> mappings = new HashMap<Field, Method>();
+        Field fields[] = data.getClass().getFields();
+        for ( int i = 0; i < fields.length; i++ ) {
+            Field f = fields[i];
+            String old = f.getName();
+            String name = Character.toUpperCase( old.charAt( 0 ) ) + old.substring( 1 );
+
+            name = "update" + name;
+            Method m;
+            try {
+                m = bean.getMethod( name, new Class[] {f.getType()} );
+                mappings.put( f,
+                                  m );
+            } catch ( SecurityException e ) {
+                throw new RulesRepositoryException( "Unable to map meta data",
+                                                    e );
+            } catch ( NoSuchMethodException e ) {
+                //ignore
+            }
+        }
+        return mappings;
+    }
+
+    public void copyToMetaData(MetaData data,
+                               Object source) {
+        for(Map.Entry<Field, Method> entry : getReadMappings( data, source ).entrySet()){
+            try {
+                entry.getKey().set( data, entry.getValue().invoke( source, (Object[])null ) );
+            } catch ( IllegalArgumentException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( IllegalAccessException e1 ) {
+                throw new RulesRepositoryException(e1);
+            } catch ( InvocationTargetException e1 ) {
+                throw new RulesRepositoryException(e1);
+            }
+        	
+        }
+    }
+
+    private Map<Field, Method> getReadMappings(MetaData data, Object source) {
+        if (!this.readMappipngsForClass.containsKey( source.getClass() )) {
+            this.readMappipngsForClass.put( source.getClass(), loadReadMappings( data,
+                                                                                 source.getClass() ) );
+        }
+        return this.readMappipngsForClass.get( source.getClass() );
+    }
+
+    private Map<Field, Method> loadReadMappings(MetaData data, Class<?> bean) {
+
+        Map<Field, Method> mappings = new HashMap<Field, Method>();
+        Field fields[] = data.getClass().getFields();
+        for ( int i = 0; i < fields.length; i++ ) {
+            Field f = fields[i];
+            String old = f.getName();
+            String name = Character.toUpperCase( old.charAt( 0 ) ) + old.substring( 1 );
+
+            if ( f.getType() == Boolean.class ) {
+                name = "is" + name;
+            } else {
+                name = "get" + name;
+            }
+
+            Method m;
+            try {
+                m = bean.getMethod( name, (Class<?>[])null );
+                if (f.getType() == m.getReturnType())
+                {
+                    mappings.put( f,
+                                  m );
+                }
+            } catch ( SecurityException e ) {
+                throw new RulesRepositoryException( "Unable to map meta data",
+                                                    e );
+            } catch ( NoSuchMethodException e ) {
+                //ignore
+            }
+
+        }
+        return mappings;
+
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/PropertiesPersistence.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/PropertiesPersistence.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/PropertiesPersistence.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,65 @@
+package org.drools.repository.services.internal.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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.repository.model.client.PropertiesHolder;
+import org.drools.repository.model.client.PropertyHolder;
+
+/**
+ * used to convert PropertiesHolder to text and back
+ * 
+ * @author Anton Arhipov
+ */
+public class PropertiesPersistence {
+
+	private static PropertiesPersistence INSTANCE = new PropertiesPersistence();
+
+	private PropertiesPersistence() {
+	}
+
+	public static PropertiesPersistence getInstance() {
+		return INSTANCE;
+	}
+
+	public String marshal(PropertiesHolder holder) {
+		StringBuilder sb = new StringBuilder();
+		for (PropertyHolder propertyHolder : holder.list) {
+			sb.append(propertyHolder.name).append("=").append(
+					propertyHolder.value).append("\n");
+		}
+		return sb.toString();
+	}
+
+	public PropertiesHolder unmarshal(String properties) {
+		List<PropertyHolder> list = new ArrayList<PropertyHolder>();
+		String[] props = properties.split("\n");
+		if (props != null) {
+			for (String s : props) {
+				String[] pair = s.split("=");
+				if (pair.length == 2) {
+					list.add(new PropertyHolder(pair[0], pair[1]));
+				}
+			}
+		}
+		PropertiesHolder result = new PropertiesHolder();
+		result.list = list;
+		return result;
+	}
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/ServiceImplementation.java
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/ServiceImplementation.java	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/java/org/drools/repository/services/internal/util/ServiceImplementation.java	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,38 @@
+package org.drools.repository.services.internal.util;
+
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+
+public class ServiceImplementation {
+	
+	@Deprecated
+    public static String getDroolsHeader(PackageItem pkg) {
+        if ( pkg.containsAsset( "drools" ) ) {
+            return pkg.loadAsset( "drools" ).getContent();
+        } else {
+            return "";
+        }
+    }
+
+	@Deprecated
+    public static void updateDroolsHeader(String string,
+                                          PackageItem pkg) {
+        pkg.checkout();
+        AssetItem conf;
+        if ( pkg.containsAsset( "drools" ) ) {
+            conf = pkg.loadAsset( "drools" );
+            conf.updateContent( string );
+
+            conf.checkin( "" );
+        } else {
+            conf = pkg.addAsset( "drools",
+                                 "" );
+            conf.updateFormat( "package" );
+            conf.updateContent( string );
+
+            conf.checkin( "" );
+        }
+
+    }
+
+}

Added: labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/resources/contenthandler.properties
===================================================================
--- labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/resources/contenthandler.properties	                        (rev 0)
+++ labs/jbossrules/branches/drools_repo_services_diega_baunax/drools-repository-services/src/main/resources/contenthandler.properties	2010-05-10 21:38:57 UTC (rev 32803)
@@ -0,0 +1,40 @@
+#  Content handlers deal with the different asset types in the repositories.
+#  you should not need to alter this, in general.
+
+
+# Content Handler for Business Rule
+brl=org.drools.guvnor.server.contenthandler.BRLContentHandler
+# Content Handler for DSL Rule
+dslr=org.drools.guvnor.server.contenthandler.DSLRuleContentHandler
+# Content Handler for DRL Rule
+drl=org.drools.guvnor.server.contenthandler.DRLFileContentHandler
+# Content Handler for DSL Definition
+dsl=org.drools.guvnor.server.contenthandler.DSLDefinitionContentHandler
+# Content Handler for Function
+function=org.drools.guvnor.server.contenthandler.FunctionContentHandler
+# Content Handler for Model
+jar=org.drools.guvnor.server.contenthandler.ModelContentHandler
+# Content Handler for Decision Table
+xls=org.drools.guvnor.server.contenthandler.DecisionTableXLSHandler
+# Content BPEL
+bpel.jar=org.drools.guvnor.server.contenthandler.BPELHandler
+# Content Handler for Rule Flow
+rf=org.drools.guvnor.server.contenthandler.RuleFlowHandler
+# Content Handler for BPMN2
+bpmn=org.drools.guvnor.server.contenthandler.BPMN2ProcessHandler
+# Content Handler for Enumeration
+enumeration=org.drools.guvnor.server.contenthandler.EnumerationContentHandler
+# Content handler for scenario (its just text, not part of build)
+scenario=org.drools.guvnor.server.contenthandler.ScenarioContentHandler
+# for guided decision tables
+gdst=org.drools.guvnor.server.contenthandler.GuidedDTContentHandler
+# for models
+model.drl=org.drools.guvnor.server.contenthandler.FactModelContentHandler
+#properties attachment
+properties=org.drools.guvnor.server.contenthandler.PropertiesHandler
+#xml attachment
+xml=org.drools.guvnor.server.contenthandler.XmlFileHandler
+#Working_Set
+workingset=org.drools.guvnor.server.contenthandler.WorkingSetHandler
+#Rule Template
+template=org.drools.guvnor.server.contenthandler.TemplateModelHandler



More information about the jboss-svn-commits mailing list