You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by re...@apache.org on 2013/02/13 18:04:02 UTC

svn commit: r1445739 - in /stanbol/trunk: commons/ commons/freemarker/ commons/freemarker/src/ commons/freemarker/src/license/ commons/freemarker/src/main/ commons/freemarker/src/main/java/ commons/freemarker/src/main/java/org/ commons/freemarker/src/m...

Author: reto
Date: Wed Feb 13 17:04:02 2013
New Revision: 1445739

URL: http://svn.apache.org/r1445739
Log:
STANBOL-930: Moved BundleTemplateLoader to freemarker bundle

Added:
    stanbol/trunk/commons/freemarker/   (with props)
    stanbol/trunk/commons/freemarker/src/
    stanbol/trunk/commons/freemarker/src/license/
    stanbol/trunk/commons/freemarker/src/license/THIRD-PARTY.properties
    stanbol/trunk/commons/freemarker/src/main/
    stanbol/trunk/commons/freemarker/src/main/java/
    stanbol/trunk/commons/freemarker/src/main/java/org/
    stanbol/trunk/commons/freemarker/src/main/java/org/apache/
    stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/
    stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/
    stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/
    stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/impl/
    stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/impl/BundleTemplateLoader.java
Removed:
    stanbol/trunk/commons/web/viewable/src/main/java/org/apache/stanbol/commons/web/viewable/impl/BundleTemplateLoader.java
Modified:
    stanbol/trunk/commons/pom.xml
    stanbol/trunk/launchers/bundlelists/stanbolcommons/src/main/bundles/list.xml

Propchange: stanbol/trunk/commons/freemarker/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Feb 13 17:04:02 2013
@@ -0,0 +1 @@
+target

Added: stanbol/trunk/commons/freemarker/src/license/THIRD-PARTY.properties
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/freemarker/src/license/THIRD-PARTY.properties?rev=1445739&view=auto
==============================================================================
--- stanbol/trunk/commons/freemarker/src/license/THIRD-PARTY.properties (added)
+++ stanbol/trunk/commons/freemarker/src/license/THIRD-PARTY.properties Wed Feb 13 17:04:02 2013
@@ -0,0 +1,25 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
+# - ICU License
+# - MIT License
+# - New BSD License
+# - Public Domain License
+# - Similar to Apache License but with the acknowledgment clause removed
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Thu Dec 13 13:41:29 CET 2012
+org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
+org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0

Added: stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/impl/BundleTemplateLoader.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/impl/BundleTemplateLoader.java?rev=1445739&view=auto
==============================================================================
--- stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/impl/BundleTemplateLoader.java (added)
+++ stanbol/trunk/commons/freemarker/src/main/java/org/apache/stanbol/commons/freemarker/impl/BundleTemplateLoader.java Wed Feb 13 17:04:02 2013
@@ -0,0 +1,120 @@
+/*
+* 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.stanbol.commons.freemarker.impl;
+
+import freemarker.cache.TemplateLoader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashSet;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This Service provides an {@link TemplateLoader} that provides templates
+ * relative to the {@link #TEMPLATES_PATH_IN_BUNDLES}.
+ */
+@Component
+@Service(TemplateLoader.class)
+public class BundleTemplateLoader implements TemplateLoader{
+	
+	private static final String TEMPLATES_PATH_IN_BUNDLES = "templates/";
+
+	private static final Logger log = LoggerFactory.getLogger(BundleTemplateLoader.class);
+	
+	private final Collection<Bundle> bundles = new HashSet<Bundle>();
+	
+	private BundleListener bundleListener = new BundleListener() {
+		
+		@Override
+		public void bundleChanged(BundleEvent event) {
+			if ((event.getType() == BundleEvent.STARTED) && containsTemplates(event.getBundle())) {
+				bundles.add(event.getBundle());
+			} else {
+				bundles.remove(event.getBundle());
+			}
+		}
+	};
+	
+		
+	@Override
+	public Reader getReader(Object templateSource, String encoding)
+			throws IOException {
+		URL templateUrl = (URL) templateSource;
+		return new InputStreamReader(templateUrl.openStream(), encoding);
+	}
+	
+	@Override
+	public long getLastModified(Object templateSource) {
+		// not known
+		return -1;
+	}
+	
+	@Override
+	public Object findTemplateSource(String name) throws IOException {
+		if (!name.endsWith(".ftl")) {
+			name = name +".ftl";
+		}
+		final String path = TEMPLATES_PATH_IN_BUNDLES+name;
+		for (Bundle bundle : bundles) {
+			URL res = bundle.getResource(path);
+			if (res != null) {
+				return res;
+			}
+		}
+		log.warn("Template "+name+" not known");
+		return null;
+	}
+	
+	@Override
+	public void closeTemplateSource(Object templateSource) throws IOException {
+
+		
+	}
+	
+	@Activate
+	protected void activate(final ComponentContext context) {
+		final Bundle[] registeredBundles = context.getBundleContext().getBundles();
+		for (int i = 0; i < registeredBundles.length; i++) {
+			if ((registeredBundles[i].getState() == Bundle.ACTIVE) 
+					&& containsTemplates(registeredBundles[i])) {
+				bundles.add(registeredBundles[i]);
+			}
+		}	
+		context.getBundleContext().addBundleListener(bundleListener);
+	}
+
+	@Deactivate
+	protected void deactivate(final ComponentContext context) {
+		context.getBundleContext().removeBundleListener(bundleListener);
+	}
+	
+	private boolean containsTemplates(Bundle bundle) {
+		return bundle.getResource(TEMPLATES_PATH_IN_BUNDLES) != null;
+	}
+	
+}

Modified: stanbol/trunk/commons/pom.xml
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/pom.xml?rev=1445739&r1=1445738&r2=1445739&view=diff
==============================================================================
--- stanbol/trunk/commons/pom.xml (original)
+++ stanbol/trunk/commons/pom.xml Wed Feb 13 17:04:02 2013
@@ -67,6 +67,7 @@
     <module>web/viewable-ldpath</module>
     <module>web/resources</module>
     <module>web/sparql</module>
+    <module>freemarker</module>
     <module>ldpathtemplate</module>
     <module>httpqueryheaders</module> <!-- allows CORS with MS Internet Explorer -->
 	

Modified: stanbol/trunk/launchers/bundlelists/stanbolcommons/src/main/bundles/list.xml
URL: http://svn.apache.org/viewvc/stanbol/trunk/launchers/bundlelists/stanbolcommons/src/main/bundles/list.xml?rev=1445739&r1=1445738&r2=1445739&view=diff
==============================================================================
--- stanbol/trunk/launchers/bundlelists/stanbolcommons/src/main/bundles/list.xml (original)
+++ stanbol/trunk/launchers/bundlelists/stanbolcommons/src/main/bundles/list.xml Wed Feb 13 17:04:02 2013
@@ -499,6 +499,11 @@
       <version>0.12.0-SNAPSHOT</version>
     </bundle>
     <bundle>
+       <groupId>org.apache.stanbol</groupId>
+       <artifactId>org.apache.stanbol.commons.freemarker</artifactId>
+       <version>0.12.0-SNAPSHOT</version>
+    </bundle>
+    <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.commons.web.viewable</artifactId>
       <version>0.12.0-SNAPSHOT</version>