You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2011/05/11 18:15:45 UTC
svn commit: r1101947 - in /incubator/wookie/trunk: etc/ddl-schema/ features/
src-tests/org/apache/wookie/tests/ src-tests/org/apache/wookie/tests/beans/
src/ src/META-INF/ src/org/apache/wookie/ src/org/apache/wookie/beans/
src/org/apache/wookie/beans/...
Author: scottbw
Date: Wed May 11 16:15:44 2011
New Revision: 1101947
URL: http://svn.apache.org/viewvc?rev=1101947&view=rev
Log:
Implemented XML-based feature loading as described in WOOKIE-210
Added:
incubator/wookie/trunk/src/org/apache/wookie/feature/Feature.java
incubator/wookie/trunk/src/org/apache/wookie/feature/Features.java
Removed:
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/FeatureLoaderTest.java
incubator/wookie/trunk/src/features.properties
incubator/wookie/trunk/src/org/apache/wookie/beans/IServerFeature.java
incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/impl/ServerFeatureImpl.java
incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/ServerFeatureImpl.java
incubator/wookie/trunk/src/org/apache/wookie/feature/FeatureLoader.java
Modified:
incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml
incubator/wookie/trunk/features/build.xml
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java
incubator/wookie/trunk/src/META-INF/persistence.xml
incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java
incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/JCRPersistenceManager.java
incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd
incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java
incubator/wookie/trunk/src/org/apache/wookie/beans/util/IPersistenceManager.java
incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java
incubator/wookie/trunk/src/org/apache/wookie/updates/UpdatesController.java
incubator/wookie/trunk/src/org/apache/wookie/util/html/StartPageProcessor.java
Modified: incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml (original)
+++ incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml Wed May 11 16:15:44 2011
@@ -297,16 +297,6 @@
</index>
</table>
- <table name="ServerFeature">
- <column name="id" primaryKey="true" required="true" type="INTEGER"/>
- <column name="jpa_version" type="INTEGER"/>
- <column name="featureName" required="true" size="255" type="VARCHAR"/>
- <column name="className" required="true" size="255" type="VARCHAR"/>
- <index name="IXServerFeature1">
- <index-column name="featureName"/>
- </index>
- </table>
-
<table name="Token">
<column name="id" primaryKey="true" required="true" type="INTEGER"/>
<column name="jpa_version" type="INTEGER"/>
Modified: incubator/wookie/trunk/features/build.xml
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/features/build.xml?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/features/build.xml (original)
+++ incubator/wookie/trunk/features/build.xml Wed May 11 16:15:44 2011
@@ -19,6 +19,7 @@
<property name="wookie.features.dir" location="."/>
<property name="project.build.classes.dir" location="${project.build.dir}/classes" />
<property name="feature.shared.dir" value="${servletEngine.webapp.dir}/wookie/shared/feature/${feature.shortname}"/>
+ <property name="feature.build.dir" value="${servletEngine.webapp.dir}/wookie/features/${feature.shortname}"/>
<target name="_clean">
</target>
@@ -31,24 +32,15 @@
</target>
<target name="build-feature" depends="_init">
- <!-- compile classes -->
- <javac
- source="${java.source.version}"
- target="${java.target.version}"
- destdir="${project.build.classes.dir}"
- debug="${compile.debug}"
- >
- <src path="${wookie.root.dir}/${wookie.features.dir}/${feature.shortname}/src" />
- </javac>
- <!-- copy to classes dir -->
</target>
<target name="deploy-feature">
<echo>Deploying feature: ${feature.shortname}</echo>
<!-- copy shared resources -->
- <mkdir dir="${user.dir}/${feature.shared.dir}"/>
- <copy todir="${user.dir}/${feature.shared.dir}">
- <fileset dir="${user.dir}/${wookie.features.dir}/${feature.shortname}/shared/"/>
+ <mkdir dir="${user.dir}/${feature.build.dir}"/>
+ <copy todir="${user.dir}/${feature.build.dir}">
+ <fileset dir="${user.dir}/${wookie.features.dir}/${feature.shortname}"/>
</copy>
+
</target>
</project>
Modified: incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java (original)
+++ incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java Wed May 11 16:15:44 2011
@@ -25,7 +25,6 @@ import org.apache.wookie.beans.IAccessRe
import org.apache.wookie.beans.IApiKey;
import org.apache.wookie.beans.IParticipant;
import org.apache.wookie.beans.IPreference;
-import org.apache.wookie.beans.IServerFeature;
import org.apache.wookie.beans.IWidget;
import org.apache.wookie.beans.IWidgetDefault;
import org.apache.wookie.beans.IWidgetInstance;
@@ -169,12 +168,6 @@ public abstract class AbstractPersistenc
participant.setParticipantThumbnailUrl("");
persistenceManager.save(participant);
- // create server feature
- IServerFeature serverFeature = persistenceManager.newInstance(IServerFeature.class);
- serverFeature.setFeatureName("test-feature-name");
- serverFeature.setClassName("test.feature.class.name");
- persistenceManager.save(serverFeature);
-
// create access request
IAccessRequest accessRequest = persistenceManager.newInstance(IAccessRequest.class);
accessRequest.setOrigin("localhost");
@@ -215,14 +208,6 @@ public abstract class AbstractPersistenc
assertNotNull(participant);
assertEquals(participants[0], participant);
- // test custom server feature query methods
- String [] serverFeatureNames = persistenceManager.findServerFeatureNames();
- assertNotNull(serverFeatureNames);
- assertEquals(1, serverFeatureNames.length);
- String serverFeatureName = serverFeatureNames[0];
- serverFeature = persistenceManager.findServerFeatureByName(serverFeatureName);
- assertNotNull(serverFeature);
- assertEquals("test-feature-name", serverFeature.getFeatureName());
IAccessRequest [] accessRequests = persistenceManager.findAll(IAccessRequest.class);
assertNotNull(accessRequests);
@@ -231,7 +216,6 @@ public abstract class AbstractPersistenc
// delete test objects
persistenceManager.delete(widgetInstance0);
persistenceManager.delete(participant);
- persistenceManager.delete(serverFeature);
persistenceManager.delete(accessRequests);
// commit and close persistence manager transaction
@@ -249,9 +233,6 @@ public abstract class AbstractPersistenc
participants = persistenceManager.findAll(IParticipant.class);
assertNotNull(participants);
assertEquals(0, participants.length);
- IServerFeature [] serverFeatures = persistenceManager.findAll(IServerFeature.class);
- assertNotNull(serverFeatures);
- assertEquals(0, serverFeatures.length);
// rollback and close persistence manager transaction
persistenceManager.rollback();
Modified: incubator/wookie/trunk/src/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/META-INF/persistence.xml?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/META-INF/persistence.xml (original)
+++ incubator/wookie/trunk/src/META-INF/persistence.xml Wed May 11 16:15:44 2011
@@ -31,7 +31,6 @@
<class>org.apache.wookie.beans.jpa.impl.ParticipantImpl</class>
<class>org.apache.wookie.beans.jpa.impl.PreferenceDefaultImpl</class>
<class>org.apache.wookie.beans.jpa.impl.PreferenceImpl</class>
- <class>org.apache.wookie.beans.jpa.impl.ServerFeatureImpl</class>
<class>org.apache.wookie.beans.jpa.impl.SharedDataImpl</class>
<class>org.apache.wookie.beans.jpa.impl.StartFileImpl</class>
<class>org.apache.wookie.beans.jpa.impl.TokenImpl</class>
Modified: incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java Wed May 11 16:15:44 2011
@@ -39,6 +39,7 @@ import org.apache.wookie.controller.Widg
import org.apache.wookie.exceptions.InvalidParametersException;
import org.apache.wookie.exceptions.ResourceDuplicationException;
import org.apache.wookie.exceptions.ResourceNotFoundException;
+import org.apache.wookie.feature.Features;
import org.apache.wookie.helpers.WidgetFactory;
import org.apache.wookie.helpers.WidgetKeyManager;
import org.apache.wookie.manager.IWidgetAdminManager;
@@ -485,7 +486,7 @@ public class WidgetAdminServlet extends
fac.setLocales(locales);
fac.setLocalPath(getServletContext().getContextPath()+properties.getString("widget.widgetfolder"));
fac.setOutputDirectory(WIDGETFOLDER);
- fac.setFeatures(persistenceManager.findServerFeatureNames());
+ fac.setFeatures(Features.getFeatureNames());
fac.setStartPageProcessor(new StartPageProcessor());
W3CWidget widgetModel = fac.parse(zipFile);
WidgetJavascriptSyntaxAnalyzer jsa = new WidgetJavascriptSyntaxAnalyzer(fac.getUnzippedWidgetDirectory());
Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/JCRPersistenceManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/JCRPersistenceManager.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/JCRPersistenceManager.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/JCRPersistenceManager.java Wed May 11 16:15:44 2011
@@ -61,7 +61,6 @@ import org.apache.wookie.beans.IParam;
import org.apache.wookie.beans.IParticipant;
import org.apache.wookie.beans.IPreference;
import org.apache.wookie.beans.IPreferenceDefault;
-import org.apache.wookie.beans.IServerFeature;
import org.apache.wookie.beans.ISharedData;
import org.apache.wookie.beans.IStartFile;
import org.apache.wookie.beans.IToken;
@@ -82,7 +81,6 @@ import org.apache.wookie.beans.jcr.impl.
import org.apache.wookie.beans.jcr.impl.ParticipantImpl;
import org.apache.wookie.beans.jcr.impl.PreferenceDefaultImpl;
import org.apache.wookie.beans.jcr.impl.PreferenceImpl;
-import org.apache.wookie.beans.jcr.impl.ServerFeatureImpl;
import org.apache.wookie.beans.jcr.impl.SharedDataImpl;
import org.apache.wookie.beans.jcr.impl.StartFileImpl;
import org.apache.wookie.beans.jcr.impl.TokenImpl;
@@ -132,7 +130,6 @@ public class JCRPersistenceManager imple
INTERFACE_TO_CLASS_MAP.put(IParticipant.class, ParticipantImpl.class);
INTERFACE_TO_CLASS_MAP.put(IPreference.class, PreferenceImpl.class);
INTERFACE_TO_CLASS_MAP.put(IPreferenceDefault.class, PreferenceDefaultImpl.class);
- INTERFACE_TO_CLASS_MAP.put(IServerFeature.class, ServerFeatureImpl.class);
INTERFACE_TO_CLASS_MAP.put(ISharedData.class, SharedDataImpl.class);
INTERFACE_TO_CLASS_MAP.put(IStartFile.class, StartFileImpl.class);
INTERFACE_TO_CLASS_MAP.put(IToken.class, TokenImpl.class);
@@ -147,7 +144,6 @@ public class JCRPersistenceManager imple
BEAN_INTERFACE_TO_CLASS_MAP.put(IAccessRequest.class, AccessRequestImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IApiKey.class, ApiKeyImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IParticipant.class, ParticipantImpl.class);
- BEAN_INTERFACE_TO_CLASS_MAP.put(IServerFeature.class, ServerFeatureImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IWhitelist.class, WhitelistImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IWidget.class, WidgetImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IWidgetDefault.class, WidgetDefaultImpl.class);
@@ -882,68 +878,6 @@ public class JCRPersistenceManager imple
}
/* (non-Javadoc)
- * @see org.apache.wookie.beans.util.IPersistenceManager#findServerFeatureByName(java.lang.String)
- */
- public IServerFeature findServerFeatureByName(String name)
- {
- // validate object content manager transaction
- if (ocm == null)
- {
- throw new IllegalStateException("Transaction not initiated or already closed");
- }
-
- // get server feature by name
- if (name != null)
- {
- try
- {
- IServerFeature [] serverFeature = findByValue(IServerFeature.class, "featureName", name);
- if (serverFeature.length == 1)
- {
- return serverFeature[0];
- }
- }
- catch (Exception e)
- {
- logger.error("Unexpected exception: "+e, e);
- }
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.apache.wookie.beans.util.IPersistenceManager#findServerFeatureNames()
- */
- public String[] findServerFeatureNames()
- {
- // validate object content manager transaction
- if (ocm == null)
- {
- throw new IllegalStateException("Transaction not initiated or already closed");
- }
-
- // get server feature names
- try
- {
- IServerFeature [] serverFeatures = findAll(IServerFeature.class);
- if (serverFeatures.length > 0)
- {
- String [] names = new String[serverFeatures.length];
- for (int i = 0; (i < serverFeatures.length); i++)
- {
- names[i] = serverFeatures[i].getFeatureName();
- }
- return names;
- }
- }
- catch (Exception e)
- {
- logger.error("Unexpected exception: "+e, e);
- }
- return new String[0];
- }
-
- /* (non-Javadoc)
* @see org.apache.wookie.beans.util.IPersistenceManager#findWidgetByGuid(java.lang.String)
*/
public IWidget findWidgetByGuid(String guid)
Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd Wed May 11 16:15:44 2011
@@ -154,9 +154,5 @@
- wookie:value (string) mandatory
- wookie:email (string) mandatory
-[wookie:serverFeature] > nt:base
-- wookie:featureName (string) mandatory
-- wookie:className (string) mandatory
-
[wookie:widgetService] > nt:base
- wookie:serviceName (string) mandatory
Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java Wed May 11 16:15:44 2011
@@ -58,7 +58,6 @@ import org.apache.wookie.beans.IParam;
import org.apache.wookie.beans.IParticipant;
import org.apache.wookie.beans.IPreference;
import org.apache.wookie.beans.IPreferenceDefault;
-import org.apache.wookie.beans.IServerFeature;
import org.apache.wookie.beans.ISharedData;
import org.apache.wookie.beans.IStartFile;
import org.apache.wookie.beans.IToken;
@@ -79,7 +78,6 @@ import org.apache.wookie.beans.jpa.impl.
import org.apache.wookie.beans.jpa.impl.ParticipantImpl;
import org.apache.wookie.beans.jpa.impl.PreferenceDefaultImpl;
import org.apache.wookie.beans.jpa.impl.PreferenceImpl;
-import org.apache.wookie.beans.jpa.impl.ServerFeatureImpl;
import org.apache.wookie.beans.jpa.impl.SharedDataImpl;
import org.apache.wookie.beans.jpa.impl.StartFileImpl;
import org.apache.wookie.beans.jpa.impl.TokenImpl;
@@ -127,7 +125,6 @@ public class JPAPersistenceManager imple
INTERFACE_TO_CLASS_MAP.put(IParticipant.class, ParticipantImpl.class);
INTERFACE_TO_CLASS_MAP.put(IPreference.class, PreferenceImpl.class);
INTERFACE_TO_CLASS_MAP.put(IPreferenceDefault.class, PreferenceDefaultImpl.class);
- INTERFACE_TO_CLASS_MAP.put(IServerFeature.class, ServerFeatureImpl.class);
INTERFACE_TO_CLASS_MAP.put(ISharedData.class, SharedDataImpl.class);
INTERFACE_TO_CLASS_MAP.put(IStartFile.class, StartFileImpl.class);
INTERFACE_TO_CLASS_MAP.put(IToken.class, TokenImpl.class);
@@ -143,7 +140,6 @@ public class JPAPersistenceManager imple
BEAN_INTERFACE_TO_CLASS_MAP.put(IApiKey.class, ApiKeyImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IParticipant.class, ParticipantImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IPreference.class, PreferenceImpl.class);
- BEAN_INTERFACE_TO_CLASS_MAP.put(IServerFeature.class, ServerFeatureImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(ISharedData.class, SharedDataImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IWhitelist.class, WhitelistImpl.class);
BEAN_INTERFACE_TO_CLASS_MAP.put(IWidget.class, WidgetImpl.class);
@@ -154,7 +150,6 @@ public class JPAPersistenceManager imple
BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IAccessRequest.class, Integer.class);
BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IApiKey.class, Integer.class);
BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IParticipant.class, Integer.class);
- BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IServerFeature.class, Integer.class);
BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IWhitelist.class, Integer.class);
BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IWidget.class, Integer.class);
BEAN_INTERFACE_TO_ID_FIELD_TYPE_MAP.put(IWidgetDefault.class, String.class);
@@ -736,66 +731,6 @@ public class JPAPersistenceManager imple
}
/* (non-Javadoc)
- * @see org.apache.wookie.beans.util.IPersistenceManager#findServerFeatureByName(java.lang.String)
- */
- public IServerFeature findServerFeatureByName(String name)
- {
- // validate entity manager transaction
- if (entityManager == null)
- {
- throw new IllegalStateException("Transaction not initiated or already closed");
- }
-
- // get server feature by name using custom query
- if (name != null)
- {
- try
- {
- Query query = entityManager.createNamedQuery("SERVER_FEATURE");
- query.setParameter("featureName", name);
- return (IServerFeature)query.getSingleResult();
- }
- catch (NoResultException nre)
- {
- }
- catch (Exception e)
- {
- logger.error("Unexpected exception: "+e, e);
- }
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.apache.wookie.beans.util.IPersistenceManager#findServerFeatureNames()
- */
- @SuppressWarnings("unchecked")
- public String[] findServerFeatureNames()
- {
- // validate entity manager transaction
- if (entityManager == null)
- {
- throw new IllegalStateException("Transaction not initiated or already closed");
- }
-
- // get server feature names using custom query
- try
- {
- Query query = entityManager.createNamedQuery("SERVER_FEATURE_NAMES");
- List<String> namesList = query.getResultList();
- if ((namesList != null) && !namesList.isEmpty())
- {
- return namesList.toArray(new String[namesList.size()]);
- }
- }
- catch (Exception e)
- {
- logger.error("Unexpected exception: "+e, e);
- }
- return new String[0];
- }
-
- /* (non-Javadoc)
* @see org.apache.wookie.beans.util.IPersistenceManager#findWidgetByGuid(java.lang.String)
*/
public IWidget findWidgetByGuid(String guid)
Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/util/IPersistenceManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/util/IPersistenceManager.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/util/IPersistenceManager.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/util/IPersistenceManager.java Wed May 11 16:15:44 2011
@@ -19,7 +19,6 @@ import java.util.Map;
import org.apache.wookie.beans.IAccessRequest;
import org.apache.wookie.beans.IBean;
import org.apache.wookie.beans.IParticipant;
-import org.apache.wookie.beans.IServerFeature;
import org.apache.wookie.beans.IWidget;
import org.apache.wookie.beans.IWidgetInstance;
@@ -213,14 +212,6 @@ public interface IPersistenceManager
* @return retrieved IParticipant bean instance or null if not found
*/
IParticipant findParticipantViewer(IWidgetInstance widgetInstance);
-
- /**
- * Custom name IServerFeature query.
- *
- * @param name name query value
- * @return retrieved IServerFeature bean instance or null if not found
- */
- IServerFeature findServerFeatureByName(String name);
/**
* Custom name IAccessRequest query.
@@ -229,11 +220,5 @@ public interface IPersistenceManager
* @return retrieved matching IAccessRequest beans array or empty array if none found
*/
IAccessRequest [] findApplicableAccessRequests(IWidget widget);
-
- /**
- * Custom IServerFeature names query.
- *
- * @return retrieved IServerFeature beans names array or empty array if none found
- */
- String [] findServerFeatureNames();
+
}
Added: incubator/wookie/trunk/src/org/apache/wookie/feature/Feature.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/feature/Feature.java?rev=1101947&view=auto
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/feature/Feature.java (added)
+++ incubator/wookie/trunk/src/org/apache/wookie/feature/Feature.java Wed May 11 16:15:44 2011
@@ -0,0 +1,56 @@
+/*
+ *
+ * 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.apache.wookie.feature;
+
+/**
+ * Default IFeature implementation
+ */
+public class Feature implements IFeature {
+
+ private String name;
+ private String[] scripts;
+ private String[] stylesheets;
+
+ public Feature(String name, String[] scripts, String[] stylesheets){
+ this.name = name;
+ this.scripts = scripts;
+ this.stylesheets = stylesheets;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.wookie.feature.IFeature#getName()
+ */
+ public String getName() {
+ return name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.wookie.feature.IFeature#scripts()
+ */
+ public String[] scripts() {
+ return scripts;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.wookie.feature.IFeature#stylesheets()
+ */
+ public String[] stylesheets() {
+ return stylesheets;
+ }
+
+}
Added: incubator/wookie/trunk/src/org/apache/wookie/feature/Features.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/feature/Features.java?rev=1101947&view=auto
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/feature/Features.java (added)
+++ incubator/wookie/trunk/src/org/apache/wookie/feature/Features.java Wed May 11 16:15:44 2011
@@ -0,0 +1,153 @@
+/*
+ *
+ * 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.apache.wookie.feature;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+import org.apache.log4j.Logger;
+import org.apache.wookie.feature.wave.WaveAPIImpl;
+import org.apache.wookie.w3c.util.IRIValidator;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+
+/**
+ * Installs and manages Features.
+ *
+ * Features are loaded from the DEFAULT_FEATURE_FOLDER, looking for files named feature.xml.
+ *
+ * Feature.xml files consist of a <feature> element with child <name> <script> and <stylesheet> elements.
+ *
+ * The <name> element contains the Feature name IRI; the <script> and <stylesheet> elements should contain a src attribute
+ * with the filename of the resource relative to the feature folder (e.g. "myfile.js")
+ */
+public class Features {
+
+ /*
+ * The current features installed
+ */
+ private static ArrayList<IFeature> features;
+
+ static Logger _logger = Logger.getLogger(Features.class.getName());
+
+ /*
+ * The default folder name for features
+ */
+ public static final File DEFAULT_FEATURE_FOLDER = new File("features");
+
+ /**
+ * Get the currently installed features
+ * @return a List of IFeature objects
+ */
+ public static List<IFeature> getFeatures(){
+ return features;
+ }
+
+ /**
+ * Get an array of names of installed features
+ * @return an array of names as Strings
+ */
+ public static String[] getFeatureNames(){
+ ArrayList<String> featureNames = new ArrayList<String>();
+ for (IFeature feature: features){
+ featureNames.add(feature.getName());
+ }
+ return featureNames.toArray(new String[featureNames.size()]);
+ }
+
+ /**
+ * Explicitly load any "special" features
+ */
+ public static void loadDefaultFeatures(){
+ features.add(new WaveAPIImpl());
+ }
+
+ /**
+ * Loads features from the default feature folder in the current servlet context
+ * @param context the current servlet context
+ */
+ public static void loadFeatures(ServletContext context){
+
+ // Clear any existing installed features
+ features = new ArrayList<IFeature>();
+
+ // Load defaults
+ loadDefaultFeatures();
+
+ // Iterate over child folders of the /features folder
+ for (File folder: DEFAULT_FEATURE_FOLDER.listFiles()){
+
+ // If the folder contains a feature.xml file, parse it and create a Feature object
+ if (folder.isDirectory()){
+ File featureXml = new File(folder.getPath()+"/feature.xml");
+ if (featureXml.exists() && featureXml.canRead()){
+ try {
+ // Create a base path for resources using the current servlet context and default feature folder
+ String basePath = context.getContextPath() + "/" + DEFAULT_FEATURE_FOLDER + "/" + folder.getName();
+ // Load the feature and add it to the features collection
+ IFeature feature = loadFeature(featureXml, basePath);
+ features.add(feature);
+ _logger.info("Installed feature:"+feature.getName());
+ } catch (Exception e) {
+ _logger.error("Error installing feature:"+e.getMessage());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Load a feature.xml file
+ * @param featureFile the feature.xml file to load
+ * @param basePath the base path (e.g. /wookie/features) to prepend to any resources
+ * @return an IFeature implementation
+ * @throws Exception
+ */
+ private static IFeature loadFeature(File featureFile, String basePath) throws Exception{
+ // Parse the XML
+ Document doc;
+ doc = new SAXBuilder().build(featureFile);
+
+ String name = doc.getRootElement().getChild("name").getText();
+ @SuppressWarnings("unchecked")
+ List<Element> scriptElements = doc.getRootElement().getChildren("script");
+ @SuppressWarnings("unchecked")
+ List<Element> stylesheetElements = doc.getRootElement().getChildren("stylesheet");
+
+ // Is the feature name a valid IRI?
+ if (!IRIValidator.isValidIRI(name)){
+ throw new Exception("Invalid feature: name is not a valid IRI");
+ }
+ // Construct arrays for scripts and stylesheet URLs
+ String[] scripts = new String[doc.getRootElement().getChildren("script").size()];
+ for (int i=0;i<scriptElements.size();i++){
+ scripts[i] = basePath + "/" + scriptElements.get(i).getAttributeValue("src");
+ }
+ String[] stylesheets = new String[doc.getRootElement().getChildren("stylesheet").size()];
+ for (int i=0;i<stylesheetElements.size();i++){
+ stylesheets[i] = basePath + "/" + stylesheetElements.get(i).getAttributeValue("src");
+ }
+ // Create a Feature object and return it
+ IFeature feature = new Feature(name, scripts, stylesheets);
+ return feature;
+ }
+
+}
Modified: incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java Wed May 11 16:15:44 2011
@@ -32,7 +32,7 @@ import org.apache.wookie.Messages;
import org.apache.wookie.ajaxmodel.IWidgetRuntimeHelper;
import org.apache.wookie.beans.util.IPersistenceManager;
import org.apache.wookie.beans.util.PersistenceManagerFactory;
-import org.apache.wookie.feature.FeatureLoader;
+import org.apache.wookie.feature.Features;
import org.apache.wookie.helpers.FlashMessage;
import org.apache.wookie.helpers.WidgetFactory;
import org.apache.wookie.util.WgtWatcher;
@@ -135,18 +135,7 @@ public class ContextListener implements
/*
* Load installed features
*/
- PropertiesConfiguration featuresConfiguration;
- File localFeaturesPropsFile = new File(System.getProperty("user.dir") + File.separator + "local.features.properties");
- if (localFeaturesPropsFile.exists()) {
- featuresConfiguration = new PropertiesConfiguration(localFeaturesPropsFile);
- _logger.info("Loading local features file: " + localOpenSocialPropsFile.toString());
- } else {
- featuresConfiguration = new PropertiesConfiguration("features.properties");
- featuresConfiguration.setFile(localFeaturesPropsFile);
- featuresConfiguration.save();
- _logger.info("Loading default features, configure your local server using: " + localFeaturesPropsFile.toString());
- }
- FeatureLoader.loadFeatures(featuresConfiguration);
+ Features.loadFeatures(context);
/*
* Run diagnostics
@@ -200,7 +189,7 @@ public class ContextListener implements
fac.setLocales(locales);
fac.setLocalPath(contextPath+localWidgetFolderPath);
fac.setOutputDirectory(WIDGETFOLDER);
- fac.setFeatures(persistenceManager.findServerFeatureNames());
+ fac.setFeatures(Features.getFeatureNames());
fac.setStartPageProcessor(new StartPageProcessor());
W3CWidget model = fac.parse(upload);
WidgetJavascriptSyntaxAnalyzer jsa = new WidgetJavascriptSyntaxAnalyzer(fac.getUnzippedWidgetDirectory());
Modified: incubator/wookie/trunk/src/org/apache/wookie/updates/UpdatesController.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/updates/UpdatesController.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/updates/UpdatesController.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/updates/UpdatesController.java Wed May 11 16:15:44 2011
@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletRes
import org.apache.commons.configuration.Configuration;
import org.apache.log4j.Logger;
-import org.apache.wookie.beans.IServerFeature;
import org.apache.wookie.beans.IWidget;
import org.apache.wookie.beans.util.IPersistenceManager;
import org.apache.wookie.beans.util.PersistenceManagerFactory;
@@ -32,6 +31,7 @@ import org.apache.wookie.exceptions.Inva
import org.apache.wookie.exceptions.ResourceDuplicationException;
import org.apache.wookie.exceptions.ResourceNotFoundException;
import org.apache.wookie.exceptions.UnauthorizedAccessException;
+import org.apache.wookie.feature.Features;
import org.apache.wookie.helpers.FlashMessage;
import org.apache.wookie.helpers.WidgetFactory;
import org.apache.wookie.util.html.StartPageProcessor;
@@ -194,13 +194,7 @@ public class UpdatesController extends C
_logger.error(e);
}
// Configure the widget factory with the installed feature set
- IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
- IServerFeature[] features = persistenceManager.findAll(IServerFeature.class);
- String[] featureNames = new String[features.length];
- for (int i=0;i<features.length;i++){
- featureNames[i] = features[i].getFeatureName();
- }
- factory.setFeatures(featureNames);
+ factory.setFeatures(Features.getFeatureNames());
factory.setStartPageProcessor(new StartPageProcessor());
return factory;
}
Modified: incubator/wookie/trunk/src/org/apache/wookie/util/html/StartPageProcessor.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/util/html/StartPageProcessor.java?rev=1101947&r1=1101946&r2=1101947&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/util/html/StartPageProcessor.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/util/html/StartPageProcessor.java Wed May 11 16:15:44 2011
@@ -17,9 +17,9 @@ import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
-import org.apache.wookie.beans.IServerFeature;
import org.apache.wookie.beans.util.IPersistenceManager;
import org.apache.wookie.beans.util.PersistenceManagerFactory;
+import org.apache.wookie.feature.Features;
import org.apache.wookie.feature.IFeature;
import org.apache.wookie.w3c.IContentEntity;
import org.apache.wookie.w3c.IFeatureEntity;
@@ -77,11 +77,13 @@ public class StartPageProcessor implemen
*/
private void addFeatures(IHtmlProcessor engine,W3CWidget model) throws Exception{
for (IFeatureEntity feature: model.getFeatures()){
- IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
- IServerFeature sf = persistenceManager.findServerFeatureByName(feature.getName());
- IFeature theFeature = getFeatureInstanceForName(sf.getClassName());
- addScripts(engine, theFeature);
- addStylesheets(engine, theFeature);
+ for (IFeature theFeature: Features.getFeatures()){
+ if (theFeature.getName().equals(feature.getName())){
+ addScripts(engine, theFeature);
+ addStylesheets(engine, theFeature);
+ }
+ }
+
}
}