You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2017/06/07 09:34:00 UTC

svn commit: r1797902 - in /sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl: RepositoryInitializer.java RepositoryInitializerFactory.java

Author: cziegeler
Date: Wed Jun  7 09:34:00 2017
New Revision: 1797902

URL: http://svn.apache.org/viewvc?rev=1797902&view=rev
Log:
SLING-6941 : RepositoryInitializer should be configurable through multiple configurations

Modified:
    sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializer.java
    sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializerFactory.java

Modified: sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializer.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializer.java?rev=1797902&r1=1797901&r2=1797902&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializer.java (original)
+++ sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializer.java Wed Jun  7 09:34:00 2017
@@ -62,6 +62,7 @@ public class RepositoryInitializer imple
                 + " format is either model@repoinit:<provisioning model URL> or raw:<raw URL>")
         String[] references() default {};
     }
+
     private final Logger log = LoggerFactory.getLogger(getClass());
 
 

Modified: sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializerFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializerFactory.java?rev=1797902&r1=1797901&r2=1797902&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializerFactory.java (original)
+++ sling/trunk/bundles/jcr/repoinit/src/main/java/org/apache/sling/jcr/repoinit/impl/RepositoryInitializerFactory.java Wed Jun  7 09:34:00 2017
@@ -32,7 +32,9 @@ import org.osgi.service.component.annota
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ConfigurationPolicy;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,7 +42,7 @@ import org.slf4j.LoggerFactory;
  * SlingRepositoryInitializer Factory that executes repoinit statements read
  * from a configurable URL.
  */
-@Designate(ocd = RepositoryInitializer.Config.class, factory=true)
+@Designate(ocd = RepositoryInitializerFactory.Config.class, factory=true)
 @Component(service = SlingRepositoryInitializer.class,
     configurationPolicy=ConfigurationPolicy.REQUIRE,
     configurationPid = "org.apache.sling.jcr.repoinit.RepositoryInitializer",
@@ -52,6 +54,22 @@ import org.slf4j.LoggerFactory;
     })
 public class RepositoryInitializerFactory implements SlingRepositoryInitializer {
 
+    @ObjectClassDefinition(name = "Apache Sling Repository Initializer Factory",
+            description="Initializes the JCR content repository using repoinit statements.")
+        public @interface Config {
+
+            @AttributeDefinition(name="References",
+                description=
+                     "References to the source text that provides repoinit statements."
+                    + " format is a raw URL.")
+            String[] references() default {};
+
+            @AttributeDefinition(name="Scripts",
+                    description=
+                         "Contents of a repo init script.")
+            String[] scripts() default {};
+    }
+
     private final Logger log = LoggerFactory.getLogger(getClass());
 
 
@@ -61,32 +79,46 @@ public class RepositoryInitializerFactor
     @Reference
     private JcrRepoInitOpsProcessor processor;
 
-    private RepositoryInitializer.Config config;
+    private RepositoryInitializerFactory.Config config;
 
     @Activate
-    public void activate(final RepositoryInitializer.Config config) {
+    public void activate(final RepositoryInitializerFactory.Config config) {
         this.config = config;
         log.debug("Activated: {}", this.toString());
     }
 
     @Override
     public String toString() {
-        return getClass().getSimpleName() + ", references=" + Arrays.toString(config.references());
+        return getClass().getSimpleName()
+                + ", references=" + Arrays.toString(config.references())
+                + ", scripts=" + (config.scripts() != null ? config.scripts().length : 0);
     }
 
     @Override
-    public void processRepository(SlingRepository repo) throws Exception {
-        if ( config.references() != null && config.references().length > 0 ) {
+    public void processRepository(final SlingRepository repo) throws Exception {
+        if ( (config.references() != null && config.references().length > 0)
+           || (config.scripts() != null && config.scripts().length > 0 )) {
+
             // loginAdministrative is ok here, definitely an admin operation
             final Session s = repo.loginAdministrative(null);
             try {
-                final RepoinitTextProvider p = new RepoinitTextProvider();
-                for(String reference : config.references()) {
-                    final String repoinitText = p.getRepoinitText(reference);
-                    final List<Operation> ops = parser.parse(new StringReader(repoinitText));
-                    log.info("Executing {} repoinit operations", ops.size());
-                    processor.apply(s, ops);
-                    s.save();
+                if ( config.references() != null ) {
+                    final RepoinitTextProvider p = new RepoinitTextProvider();
+                    for(final String reference : config.references()) {
+                        final String repoinitText = p.getRepoinitText("raw:" + reference);
+                        final List<Operation> ops = parser.parse(new StringReader(repoinitText));
+                        log.info("Executing {} repoinit operations", ops.size());
+                        processor.apply(s, ops);
+                        s.save();
+                    }
+                }
+                if ( config.scripts() != null ) {
+                    for(final String script : config.scripts()) {
+                        final List<Operation> ops = parser.parse(new StringReader(script));
+                        log.info("Executing {} repoinit operations", ops.size());
+                        processor.apply(s, ops);
+                        s.save();
+                    }
                 }
             } finally {
                 s.logout();