You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2010/10/13 21:52:38 UTC

svn commit: r1022267 - in /sling/trunk: launchpad/testing/ launchpad/testing/src/test/rules/ maven/maven-launchpad-plugin/ maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/ maven/maven-launchpad-plugin/src/main/resources...

Author: justin
Date: Wed Oct 13 19:52:37 2010
New Revision: 1022267

URL: http://svn.apache.org/viewvc?rev=1022267&view=rev
Log:
SLING-1795 - adding Drools-based rules for rewriting bundle list. Includes sample rule which can be activated by running "mvn -P test-reactor-sling-bundles clean install" from the root project.

Added:
    sling/trunk/launchpad/testing/src/test/rules/
    sling/trunk/launchpad/testing/src/test/rules/reactor.drl
    sling/trunk/maven/maven-launchpad-plugin/src/main/resources/org/apache/sling/maven/projectsupport/drools-globals.drl
Modified:
    sling/trunk/launchpad/testing/pom.xml
    sling/trunk/maven/maven-launchpad-plugin/pom.xml
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java

Modified: sling/trunk/launchpad/testing/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/pom.xml?rev=1022267&r1=1022266&r2=1022267&view=diff
==============================================================================
--- sling/trunk/launchpad/testing/pom.xml (original)
+++ sling/trunk/launchpad/testing/pom.xml Wed Oct 13 19:52:37 2010
@@ -331,6 +331,24 @@
                 </plugins>
             </build>
         </profile>
+        <profile>
+            <id>test-reactor-sling-bundles</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.sling</groupId>
+                        <artifactId>maven-launchpad-plugin</artifactId>
+                        <configuration>
+                            <rewriteRuleFiles>
+                                <rewriteRuleFile>
+                                    ${basedir}/src/test/rules/reactor.drl
+                                </rewriteRuleFile>
+                            </rewriteRuleFiles>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
     </profiles>
 
     <dependencies>

Added: sling/trunk/launchpad/testing/src/test/rules/reactor.drl
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/src/test/rules/reactor.drl?rev=1022267&view=auto
==============================================================================
--- sling/trunk/launchpad/testing/src/test/rules/reactor.drl (added)
+++ sling/trunk/launchpad/testing/src/test/rules/reactor.drl Wed Oct 13 19:52:37 2010
@@ -0,0 +1,57 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.apache.sling.launchpad.testing
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.*;
+
+global MavenSession mavenSession
+
+function boolean inCurrentBuild(MavenSession session, String artifactId) {
+    for (MavenProject project : session.getSortedProjects()) {
+        if (project.getArtifactId().equals(artifactId)) {
+            return true;
+        }
+    }
+    return false;
+#    return session.getExecutionProperties().containsKey("sling.bundle.version."+artifactId);
+}
+
+function String getBuildVersion(MavenSession session, String artifactId) {
+    for (MavenProject project : session.getSortedProjects()) {
+        if (project.getArtifactId().equals(artifactId)) {
+            return project.getVersion();
+        }
+    }
+    return null;
+}
+
+rule "use LATEST for all Sling bundles"
+
+    when
+        $bundleList : BundleList()
+        $startLevel : StartLevel() from $bundleList.startLevels
+        $bundle : Bundle(groupId == "org.apache.sling")
+            from $startLevel.bundles
+        eval(inCurrentBuild(mavenSession, $bundle.getArtifactId()))
+    then
+        System.out.println("Using reactor version for " + $bundle.getArtifactId());
+        $bundle.setVersion(getBuildVersion(mavenSession, $bundle.getArtifactId()));
+
+end
+

Modified: sling/trunk/maven/maven-launchpad-plugin/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/pom.xml?rev=1022267&r1=1022266&r2=1022267&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/pom.xml (original)
+++ sling/trunk/maven/maven-launchpad-plugin/pom.xml Wed Oct 13 19:52:37 2010
@@ -147,5 +147,10 @@
             <artifactId>maven-filtering</artifactId>
             <version>1.0-beta-4</version>
         </dependency>
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+            <version>5.1.1</version>
+        </dependency>
     </dependencies>
 </project>

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java?rev=1022267&r1=1022266&r2=1022267&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java Wed Oct 13 19:52:37 2010
@@ -30,6 +30,7 @@ import org.apache.maven.artifact.resolve
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -39,6 +40,14 @@ import org.apache.sling.maven.projectsup
 import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.io.xpp3.BundleListXpp3Reader;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
 
 public abstract class AbstractBundleListMojo extends AbstractMojo {
 
@@ -141,6 +150,18 @@ public abstract class AbstractBundleList
      */
     private ArtifactResolver resolver;
 
+    /**
+     * @parameter
+     */
+    private File[] rewriteRuleFiles;
+
+    /**
+     * @parameter expression="${session}
+     * @required
+     * @readonly
+     */
+    protected MavenSession mavenSession;
+
     public final void execute() throws MojoFailureException, MojoExecutionException {
         try {
             initBundleList();
@@ -252,8 +273,9 @@ public abstract class AbstractBundleList
         } else {
             bundleList = new BundleList();
             if (includeDefaultBundles) {
-                Artifact defBndListArtifact = getArtifact(defaultBundleList.getGroupId(), defaultBundleList.getArtifactId(),
-                        defaultBundleList.getVersion(), defaultBundleList.getType(), defaultBundleList.getClassifier());
+                Artifact defBndListArtifact = getArtifact(defaultBundleList.getGroupId(),
+                        defaultBundleList.getArtifactId(), defaultBundleList.getVersion(), defaultBundleList.getType(),
+                        defaultBundleList.getClassifier());
                 getLog().info("Using bundle list file from " + defBndListArtifact.getFile().getAbsolutePath());
                 bundleList = readBundleList(defBndListArtifact.getFile());
             }
@@ -273,6 +295,43 @@ public abstract class AbstractBundleList
             }
         }
         initBundleList(bundleList);
+
+        rewriteBundleList(bundleList);
+    }
+
+    private void rewriteBundleList(BundleList bundleList) throws MojoExecutionException {
+        if (rewriteRuleFiles != null) {
+            KnowledgeBase knowledgeBase = createKnowledgeBase(rewriteRuleFiles);
+            StatefulKnowledgeSession session = knowledgeBase.newStatefulKnowledgeSession();
+            try {
+                session.setGlobal("mavenSession", mavenSession);
+                session.setGlobal("mavenProject", project);
+                session.insert(bundleList);
+                session.fireAllRules();
+            } finally {
+                session.dispose();
+            }
+        }
+    }
+
+    private KnowledgeBase createKnowledgeBase(File[] files) throws MojoExecutionException {
+        KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        builder.add(ResourceFactory.newClassPathResource("drools-globals.drl", getClass()), ResourceType.DRL);
+        for (File file : files) {
+            getLog().info("Parsing rule file " + file.getAbsolutePath());
+            builder.add(ResourceFactory.newFileResource(file), ResourceType.DRL);
+        }
+        if (builder.hasErrors()) {
+            getLog().error("Rule errors:");
+            for (KnowledgeBuilderError error : builder.getErrors()) {
+                getLog().error(error.toString());
+            }
+            throw new MojoExecutionException("Unable to create rules. See log for details.");
+        }
+
+        KnowledgeBase base = KnowledgeBaseFactory.newKnowledgeBase();
+        base.addKnowledgePackages(builder.getKnowledgePackages());
+        return base;
     }
 
     private BundleList readBundleList(File file) throws IOException, XmlPullParserException {

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java?rev=1022267&r1=1022266&r2=1022267&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java Wed Oct 13 19:52:37 2010
@@ -110,13 +110,6 @@ public abstract class AbstractLaunchpadS
      */
     private MavenFileFilter mavenFileFilter;
 
-    /**
-     * @parameter expression="${session}"
-     * @required
-     * @readonly
-     */
-    private MavenSession mavenSession;
-
     private ResourceProvider resourceProvider = new ResourceProvider() {
 
         @Override

Added: sling/trunk/maven/maven-launchpad-plugin/src/main/resources/org/apache/sling/maven/projectsupport/drools-globals.drl
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/resources/org/apache/sling/maven/projectsupport/drools-globals.drl?rev=1022267&view=auto
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/resources/org/apache/sling/maven/projectsupport/drools-globals.drl (added)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/resources/org/apache/sling/maven/projectsupport/drools-globals.drl Wed Oct 13 19:52:37 2010
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# this file ensures that the globals are always defined, even if they're not needed
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.project.MavenProject;
+
+global MavenSession mavenSession
+global MavenProject mavenProject
\ No newline at end of file