[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