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 2010/06/16 16:16:40 UTC

svn commit: r955236 [9/10] - in /incubator/wookie/branches/pluggablepersistence: ./ WebContent/WEB-INF/ WebContent/admin/ WebContent/webmenu/ ant/ etc/ddl-schema/ etc/tomcat/ etc/tomcat/conf/ parser/java/src/org/apache/wookie/w3c/util/ scripts/ scripts...

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/FeatureLoader.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/FeatureLoader.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/FeatureLoader.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/FeatureLoader.java Wed Jun 16 14:16:36 2010
@@ -15,9 +15,9 @@ package org.apache.wookie.feature;
 
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.log4j.Logger;
-import org.apache.wookie.beans.ServerFeature;
-import org.apache.wookie.util.hibernate.DBManagerFactory;
-import org.apache.wookie.util.hibernate.IDBManager;
+import org.apache.wookie.beans.IServerFeature;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.w3c.util.IRIValidator;
 
 import java.util.Iterator;
@@ -36,12 +36,12 @@ public class FeatureLoader {
 	 */
 	@SuppressWarnings("unchecked")
 	public static void loadFeatures(PropertiesConfiguration config){
-		final IDBManager dbManager = DBManagerFactory.getDBManager();
-		dbManager.beginTransaction();
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        persistenceManager.begin();
 		
 		// Remove existing features
-		for (ServerFeature sf: ServerFeature.findAll()){
-			sf.delete();
+		for (IServerFeature sf: persistenceManager.findAll(IServerFeature.class)){
+			persistenceManager.delete(sf);
 		}
 		
 		// Add features in properties configuration
@@ -50,11 +50,11 @@ public class FeatureLoader {
 			String klass = (String) i.next();
 			String name = config.getString(klass);
 			try {
-				ServerFeature sf = createFeature(name, klass);
+				IServerFeature sf = createFeature(name, klass);
 				// Only install it if there isn't an existing
 				// feature with the same name
-				if (ServerFeature.findByName(name) == null){
-					sf.save();
+				if (persistenceManager.findServerFeatureByName(name) == null){
+				    persistenceManager.save(sf);
 					_logger.info("Installed feature:"+name);					
 				} else {
 					_logger.error("Error installing feature: "+name+" was already installed");
@@ -64,48 +64,62 @@ public class FeatureLoader {
 				_logger.error("Error installing feature:"+e.getMessage());
 			}
 		}
-		dbManager.commitTransaction();
+		
+        persistenceManager.commit();
+        PersistenceManagerFactory.closePersistenceManager();
 	}
 
-	/**
+    /**
+     * Validates a feature for the supplied parameters, or throws
+     * an exception if the feature specified is not a valid.
+     * @param name the name of the feature, which must be a valid IRI
+     * @param klass the Class name of the feature, which must implement the IFeature interface
+     */
+    @SuppressWarnings("unchecked")
+    public static void validateFeature(String name, String klass) throws Exception{
+        // Are required parameters missing?
+        if (name == null || klass == null){
+            throw new Exception("Invalid feature");
+        }
+        // Does the class exist?
+        Class theClass;
+        try {
+            theClass = Class.forName(klass);
+        } catch (Exception e) {
+            throw new Exception("Invalid feature: class not found");
+        }
+        // Does the class implement IFeature?
+        boolean implementsFeature = false;
+        Class[] interfaces = theClass.getInterfaces();
+        if (interfaces != null) {
+            if (interfaces.length > 0){
+                if (interfaces[0].getName().equals("org.apache.wookie.feature.IFeature")) implementsFeature = true;
+            }
+        }
+        if (!implementsFeature) throw new Exception("Invalid feature: class is not a Feature class");
+        
+        // Does the feature name match that in the class?
+        if (!((IFeature) theClass.newInstance()).getName().equals(name)) throw new Exception("Invalid feature: feature name supplied and name in the class do not match");;
+
+        // Is the feature name a valid IRI?
+        if (!IRIValidator.isValidIRI(name)){
+            throw new Exception("Invalid feature: name is not a valid IRI");            
+        }
+    }
+
+    /**
 	 * Returns a valid ServerFeature for the supplied parameters, or throws
 	 * an exception if the feature specified is not a valid ServerFeature.
 	 * @param name the name of the feature, which must be a valid IRI
 	 * @param klass the Class name of the feature, which must implement the IFeature interface
 	 */
-	@SuppressWarnings("unchecked")
-	public static ServerFeature createFeature(String name, String klass) throws Exception{
-		// Are required parameters missing?
-		if (name == null || klass == null){
-			throw new Exception("Invalid feature");
-		}
-		// Does the class exist?
-		Class theClass;
-		try {
-			theClass = Class.forName(klass);
-		} catch (Exception e) {
-			throw new Exception("Invalid feature: class not found");
-		}
-		// Does the class implement IFeature?
-		boolean implementsFeature = false;
-		Class[] interfaces = theClass.getInterfaces();
-		if (interfaces != null) {
-			if (interfaces.length > 0){
-				if (interfaces[0].getName().equals("org.apache.wookie.feature.IFeature")) implementsFeature = true;
-			}
-		}
-		if (!implementsFeature) throw new Exception("Invalid feature: class is not a Feature class");
-		
-		// Does the feature name match that in the class?
-		if (!((IFeature) theClass.newInstance()).getName().equals(name)) throw new Exception("Invalid feature: feature name supplied and name in the class do not match");;
-
-		// Is the feature name a valid IRI?
-		if (!IRIValidator.isValidIRI(name)){
-			throw new Exception("Invalid feature: name is not a valid IRI");			
-		}
-		
+	public static IServerFeature createFeature(String name, String klass) throws Exception{
+		// validate feature
+	    validateFeature(name, klass);
+	    
 		// All is well, create the SF and return it
-		ServerFeature sf = new ServerFeature();
+		IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IServerFeature sf = persistenceManager.newInstance(IServerFeature.class);
 		sf.setClassName(klass);
 		sf.setFeatureName(name);
 		return sf;

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/wave/WaveAPIImpl.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/wave/WaveAPIImpl.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/wave/WaveAPIImpl.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/feature/wave/WaveAPIImpl.java Wed Jun 16 14:16:36 2010
@@ -20,9 +20,11 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.wookie.Messages;
-import org.apache.wookie.beans.Participant;
-import org.apache.wookie.beans.SharedData;
-import org.apache.wookie.beans.WidgetInstance;
+import org.apache.wookie.beans.IParticipant;
+import org.apache.wookie.beans.ISharedData;
+import org.apache.wookie.beans.IWidgetInstance;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.controller.PropertiesController;
 import org.apache.wookie.feature.IFeature;
 import org.apache.wookie.helpers.Notifier;
@@ -70,13 +72,14 @@ public class WaveAPIImpl implements IFea
 			return state;
 		}
 		// check if instance is valid
-		WidgetInstance widgetInstance = WidgetInstance.findByIdKey(id_key);
+		IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IWidgetInstance widgetInstance = persistenceManager.findWidgetInstanceByIdKey(id_key);
 		if (widgetInstance == null){
 			state.put("message", localizedMessages.getString("WidgetAPIImpl.0"));	 //$NON-NLS-1$
 			return state;			
 		}
 		//
-		for(SharedData data : SharedData.findSharedDataForInstance(widgetInstance)){
+		for(ISharedData data : widgetInstance.getSharedData()){
 			state.put(data.getDkey(), data.getDvalue());
 		}
 		return state;
@@ -89,9 +92,10 @@ public class WaveAPIImpl implements IFea
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		if(id_key == null) return localizedMessages.getString("WidgetAPIImpl.0"); //$NON-NLS-1$
-		WidgetInstance widgetInstance = WidgetInstance.findByIdKey(id_key);
+		IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IWidgetInstance widgetInstance = persistenceManager.findWidgetInstanceByIdKey(id_key);
 		if(widgetInstance==null) return localizedMessages.getString("WidgetAPIImpl.0"); //$NON-NLS-1$
-		Participant[] participants = Participant.getParticipants(widgetInstance);
+		IParticipant[] participants = persistenceManager.findParticipants(widgetInstance);
 		return ParticipantHelper.createJSONParticipantsDocument(participants);
 	}
 	
@@ -102,9 +106,10 @@ public class WaveAPIImpl implements IFea
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		if(id_key == null) return localizedMessages.getString("WidgetAPIImpl.0"); //$NON-NLS-1$
-		WidgetInstance widgetInstance = WidgetInstance.findByIdKey(id_key);
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidgetInstance widgetInstance = persistenceManager.findWidgetInstanceByIdKey(id_key);
 		if(widgetInstance == null) return localizedMessages.getString("WidgetAPIImpl.0"); //$NON-NLS-1$
-		Participant participant = Participant.getViewer(widgetInstance);
+        IParticipant participant = persistenceManager.findParticipantViewer(widgetInstance);
 		if (participant != null) return ParticipantHelper.createJSONParticipantDocument(participant); //$NON-NLS-1$
 		return null; // no viewer i.e. widget is anonymous
 	}
@@ -115,7 +120,8 @@ public class WaveAPIImpl implements IFea
 	public String submitDelta(String id_key, Map<String,String>map){
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
-		WidgetInstance widgetInstance = WidgetInstance.findByIdKey(id_key);
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidgetInstance widgetInstance = persistenceManager.findWidgetInstanceByIdKey(id_key);
 		if(widgetInstance == null) return localizedMessages.getString("WidgetAPIImpl.0"); //$NON-NLS-1$
 		if(widgetInstance.isLocked()) return localizedMessages.getString("WidgetAPIImpl.2"); //$NON-NLS-1$
 		//

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/AccessRequestHelper.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/AccessRequestHelper.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/AccessRequestHelper.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/AccessRequestHelper.java Wed Jun 16 14:16:36 2010
@@ -13,7 +13,7 @@
  */
 package org.apache.wookie.helpers;
 
-import org.apache.wookie.beans.AccessRequest;
+import org.apache.wookie.beans.IAccessRequest;
 
 /**
  * Helper for rendering Widget Access Request Policies (WARP)
@@ -27,10 +27,10 @@ public class AccessRequestHelper {
 	 * @param accessRequests
 	 * @return
 	 */
-	public static String createXMLAccessRequestDocument(AccessRequest[] accessRequests){
+	public static String createXMLAccessRequestDocument(IAccessRequest[] accessRequests){
 		String document = XMLDECLARATION;
 		document += "\n<policies>\n";
-		for (AccessRequest ar:accessRequests){
+		for (IAccessRequest ar:accessRequests){
 			document += toXml(ar);
 		}
 		document += "</policies>\n";
@@ -42,17 +42,17 @@ public class AccessRequestHelper {
 	 * @param accessRequests
 	 * @return
 	 */
-	public static String createAccessRequestHTMLTable(AccessRequest[] accessRequests){		
+	public static String createAccessRequestHTMLTable(IAccessRequest[] accessRequests){		
 		String document = "<table width=\"500\" class=\"ui-widget ui-widget-content\" align=\"center\">\n";
 		document+= "<tr class=\"ui-widget-header\"><td colspan=\"5\">Policies</td></tr>  ";
-		for (AccessRequest ar:accessRequests){
+		for (IAccessRequest ar:accessRequests){
 			document += toHtml(ar);
 		}
 		document += "</table>\n";
 		return document;
 	}
 	
-	private static String toXml(AccessRequest ar){
+	private static String toXml(IAccessRequest ar){
 		String xml = "\t<policy ";
 		xml += "id=\""+ar.getId()+"\" ";
 		xml += "widget=\""+ar.getWidget().getId()+"\" ";
@@ -67,7 +67,7 @@ public class AccessRequestHelper {
 		return xml;
 	}
 	
-	public static String toHtml(AccessRequest ar){
+	public static String toHtml(IAccessRequest ar){
 		String html = "";
 		if (ar.isGranted()){
 			html += "<tr style=\"background-color:#9FC\">";

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/Notifier.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/Notifier.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/Notifier.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/Notifier.java Wed Jun 16 14:16:36 2010
@@ -20,7 +20,7 @@ import java.util.Iterator;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSession;
 
-import org.apache.wookie.beans.WidgetInstance;
+import org.apache.wookie.beans.IWidgetInstance;
 import org.apache.wookie.util.SiblingPageNormalizer;
 import org.directwebremoting.ScriptBuffer;
 import org.directwebremoting.ScriptSession;
@@ -45,7 +45,7 @@ public class Notifier {
 	 * @param instance the widget instance whose siblings should be invoked
 	 * @param method the method to invoke on sibling widget instances
 	 */
-	public static void notifyWidgets(HttpSession session, WidgetInstance instance, String method){
+	public static void notifyWidgets(HttpSession session, IWidgetInstance instance, String method){
 		ServletContext ctx = session.getServletContext();
 		ServerContext sctx = ServerContextFactory.get(ctx);
 		String currentPage = new SiblingPageNormalizer().getNormalizedPage(instance);
@@ -58,7 +58,7 @@ public class Notifier {
 	 * current script session. Only use this method within a DWR thread.
 	 * @param widgetInstance the instance that is the source of the update
 	 */
-	public static void notifySiblings(WidgetInstance widgetInstance){
+	public static void notifySiblings(IWidgetInstance widgetInstance){
 		String sharedDataKey = widgetInstance.getSharedDataKey();
 		String script = "Widget.onSharedUpdate(\""+sharedDataKey+"\");"; //$NON-NLS-1$ //$NON-NLS-2$
 		callSiblings(widgetInstance,script);
@@ -68,7 +68,7 @@ public class Notifier {
 	 * Calls a script in sibling widget instances within the scope of the current DWR thread
 	 * @param call the JS method to call on the widget start file
 	 */
-	public static void callSiblings(WidgetInstance instance, String call){
+	public static void callSiblings(IWidgetInstance instance, String call){
 		WebContext wctx = WebContextFactory.get();
 		String currentPage = new SiblingPageNormalizer().getNormalizedPage(instance);
         Collection<?> pages = wctx.getScriptSessionsByPage(currentPage);

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/ParticipantHelper.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/ParticipantHelper.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/ParticipantHelper.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/ParticipantHelper.java Wed Jun 16 14:16:36 2010
@@ -13,7 +13,7 @@
  */
 package org.apache.wookie.helpers;
 
-import org.apache.wookie.beans.Participant;
+import org.apache.wookie.beans.IParticipant;
 
 /**
  * A helper for Participants
@@ -29,8 +29,8 @@ public class ParticipantHelper {
 	 * @param participant
 	 * @return
 	 */
-	public static String createXMLParticipantsDocument(Participant participant){
-		Participant[] participants = {participant};
+	public static String createXMLParticipantsDocument(IParticipant participant){
+		IParticipant[] participants = {participant};
 		return createXMLParticipantsDocument(participants);
 	}
 	
@@ -41,24 +41,24 @@ public class ParticipantHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	public static String createXMLParticipantsDocument(Participant[] participants){
+	public static String createXMLParticipantsDocument(IParticipant[] participants){
 		String document = XMLDECLARATION;
 		document += "\n<participants>\n"; //$NON-NLS-1$
-		for (Participant participant:participants){
+		for (IParticipant participant:participants){
 			document += toXml(participant);
 		}
 		document += "</participants>\n"; //$NON-NLS-1$
 		return document;
 	}
 	
-	public static String createJSONParticipantDocument(Participant participant){
+	public static String createJSONParticipantDocument(IParticipant participant){
 		 return "{\"Participant\":"+ParticipantHelper.toJson(participant)+"}"; //$NON-NLS-1$
 	}
 	
-	public static String createJSONParticipantsDocument(Participant[] participants){
+	public static String createJSONParticipantsDocument(IParticipant[] participants){
 		String json = "{\"Participants\":[";//$NON-NLS-1$
 		String delimit = "";
-		for (Participant participant: participants){
+		for (IParticipant participant: participants){
 			json+=delimit+toJson(participant);
 			delimit = ","; //$NON-NLS-1$
 		}
@@ -72,10 +72,10 @@ public class ParticipantHelper {
 	 * @param participant the participant to represent
 	 * @return the XML representation of the participant
 	 */
-	public static String toXml(Participant participant){
-			return "<participant id=\""+participant.getParticipant_id()+
-								"\" display_name=\""+participant.getParticipant_display_name()+
-								"\" thumbnail_url=\""+participant.getParticipant_thumbnail_url()+
+	public static String toXml(IParticipant participant){
+			return "<participant id=\""+participant.getParticipantId()+
+								"\" display_name=\""+participant.getParticipantDisplayName()+
+								"\" thumbnail_url=\""+participant.getParticipantThumbnailUrl()+
 					"\" />"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 	}
 
@@ -84,11 +84,11 @@ public class ParticipantHelper {
 	 * @param participant
 	 * @return
 	 */
-	public static String toJson(Participant participant){
+	public static String toJson(IParticipant participant){
 		String json = "{"+
-		"\"participant_id\":\""+participant.getParticipant_id()+
-		"\", \"participant_display_name\":\""+participant.getParticipant_display_name()+
-		"\", \"participant_thumbnail_url\":\""+participant.getParticipant_thumbnail_url()+"\"}";
+		"\"participant_id\":\""+participant.getParticipantId()+
+		"\", \"participant_display_name\":\""+participant.getParticipantDisplayName()+
+		"\", \"participant_thumbnail_url\":\""+participant.getParticipantThumbnailUrl()+"\"}";
 		return json; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 	}
 

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetFactory.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetFactory.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetFactory.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetFactory.java Wed Jun 16 14:16:36 2010
@@ -13,22 +13,22 @@
  */
 package org.apache.wookie.helpers;
 
-import java.util.Set;
-
 import org.apache.log4j.Logger;
-import org.apache.wookie.beans.AccessRequest;
-import org.apache.wookie.beans.Description;
-import org.apache.wookie.beans.Feature;
-import org.apache.wookie.beans.License;
-import org.apache.wookie.beans.Name;
-import org.apache.wookie.beans.Param;
-import org.apache.wookie.beans.PreferenceDefault;
-import org.apache.wookie.beans.StartFile;
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetDefault;
-import org.apache.wookie.beans.WidgetIcon;
-import org.apache.wookie.beans.WidgetInstance;
-import org.apache.wookie.beans.WidgetType;
+import org.apache.wookie.beans.IAccessRequest;
+import org.apache.wookie.beans.IDescription;
+import org.apache.wookie.beans.IFeature;
+import org.apache.wookie.beans.ILicense;
+import org.apache.wookie.beans.IName;
+import org.apache.wookie.beans.IParam;
+import org.apache.wookie.beans.IPreferenceDefault;
+import org.apache.wookie.beans.IStartFile;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.IWidgetDefault;
+import org.apache.wookie.beans.IWidgetIcon;
+import org.apache.wookie.beans.IWidgetInstance;
+import org.apache.wookie.beans.IWidgetType;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.w3c.IAccessEntity;
 import org.apache.wookie.w3c.IContentEntity;
 import org.apache.wookie.w3c.IDescriptionEntity;
@@ -52,7 +52,7 @@ public class WidgetFactory {
 	 * @param grantAccessRequests whether to automatically grant access requests for the widget
 	 * @return the widget
 	 */
-	public static Widget addNewWidget(W3CWidget model, boolean grantAccessRequests) {
+	public static IWidget addNewWidget(W3CWidget model, boolean grantAccessRequests) {
 		return addNewWidget(model,null, grantAccessRequests);
 	}
 
@@ -61,7 +61,7 @@ public class WidgetFactory {
 	 * @param model the model of the widget to add
 	 * @return the widget
 	 */
-	public static Widget addNewWidget(W3CWidget model) {
+	public static IWidget addNewWidget(W3CWidget model) {
 		return addNewWidget(model,null,false);
 	}
 
@@ -71,7 +71,7 @@ public class WidgetFactory {
 	 * @param widgetTypes the types to allocate the widget to
 	 * @return the widget
 	 */
-	public static Widget addNewWidget(W3CWidget model,String[] widgetTypes) {
+	public static IWidget addNewWidget(W3CWidget model,String[] widgetTypes) {
 		return addNewWidget(model,widgetTypes,false);
 	}	
 
@@ -83,23 +83,25 @@ public class WidgetFactory {
 	 * @param grantAccessRequests whether to grant access requests created for the widget
 	 * @return the widget
 	 */
-	public static Widget addNewWidget(W3CWidget model, String[] widgetTypes, boolean grantAccessRequests) {	
-		Widget widget = createWidget(model);
-		createTypes(widgetTypes, widget);
-		createStartFiles(model,widget);
-		createNames(model,widget);
-		createDescriptions(model,widget);
-		createIcons(model, widget);
-		createLicenses(model,widget);		
-		createPreferences(model,widget);
-		createFeatures(model,widget);
-		createAccessRequests(model, widget, grantAccessRequests);
+	public static IWidget addNewWidget(W3CWidget model, String[] widgetTypes, boolean grantAccessRequests) {
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IWidget widget = createWidget(persistenceManager, model);
+		createTypes(persistenceManager, widgetTypes, widget);
+		createStartFiles(persistenceManager, model,widget);
+		createNames(persistenceManager, model,widget);
+		createDescriptions(persistenceManager, model,widget);
+		createIcons(persistenceManager, model, widget);
+		createLicenses(persistenceManager, model,widget);		
+		createPreferences(persistenceManager, model,widget);
+		createFeatures(persistenceManager, model,widget);
+        persistenceManager.save(widget);
+		createAccessRequests(persistenceManager, model, widget, grantAccessRequests);
 		return widget;	       
 	}
 
-	private static Widget createWidget(W3CWidget model){
-		Widget widget;
-		widget = new Widget();												
+	private static IWidget createWidget(IPersistenceManager persistenceManager, W3CWidget model){
+		IWidget widget;
+		widget = persistenceManager.newInstance(IWidget.class);												
 		widget.setWidgetAuthor(model.getAuthor());
 		widget.setWidgetAuthorEmail(model.getAuthorEmail());
 		widget.setWidgetAuthorHref(model.getAuthorHref());
@@ -107,112 +109,110 @@ public class WidgetFactory {
 		widget.setHeight(model.getHeight());
 		widget.setWidth(model.getWidth());
 		widget.setVersion(model.getVersion());
-		widget.save();	
 		return widget;
 	}
 
-	@SuppressWarnings("unchecked")
-	private static void createTypes(String[] widgetTypes, Widget widget){
-		WidgetType widgetType;
+	private static void createTypes(IPersistenceManager persistenceManager, String[] widgetTypes, IWidget widget){
+		IWidgetType widgetType;
 		if (widgetTypes!=null){
 			for(int i=0;i<widgetTypes.length;i++){
-				widgetType = new WidgetType();
+				widgetType = persistenceManager.newInstance(IWidgetType.class);
 				widgetType.setWidgetContext(widgetTypes[i]);
-				widgetType.setWidget(widget);
 				widget.getWidgetTypes().add(widgetType);
-				widgetType.save();
 			}
 		}
 	}
 
-	private static void createStartFiles(W3CWidget model, Widget widget){
+	private static void createStartFiles(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for (IContentEntity page:model.getContentList()){
-			StartFile start = new StartFile();
+			IStartFile start = persistenceManager.newInstance(IStartFile.class);
 			start.setCharset(page.getCharSet());
 			start.setLang(page.getLang());
 			start.setUrl(page.getSrc());
-			start.setWidget(widget);
-			start.save();
+            widget.getStartFiles().add(start);
 		}
 	}
 
-	private static void createNames(W3CWidget model, Widget widget){
+	private static void createNames(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for (INameEntity name:model.getNames()){
-			Name widgetName = new Name();
+			IName widgetName = persistenceManager.newInstance(IName.class);
 			widgetName.setLang(name.getLang());
 			widgetName.setDir(name.getDir());
 			widgetName.setName(name.getName());
 			widgetName.setShortName(name.getShort());
-			widgetName.setWidget(widget);
-			widgetName.save();
+            widget.getNames().add(widgetName);
 		}
 	}
 
-	private static void createDescriptions(W3CWidget model, Widget widget){
+	private static void createDescriptions(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for (IDescriptionEntity desc:model.getDescriptions()){
-			Description widgetDesc = new Description();
+			IDescription widgetDesc = persistenceManager.newInstance(IDescription.class);
 			widgetDesc.setContent(desc.getDescription());
 			widgetDesc.setLang(desc.getLang());
 			widgetDesc.setDir(desc.getDir());
-			widgetDesc.setWidget(widget);
-			widgetDesc.save();
+            widget.getDescriptions().add(widgetDesc);
 		}
 	}
 
-	private static void createIcons(W3CWidget model, Widget widget){
+	private static void createIcons(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for(IIconEntity icon: model.getIconsList()){
-			WidgetIcon widgetIcon = new WidgetIcon(icon.getSrc(),icon.getHeight(),icon.getWidth(),icon.getLang(), widget);
-			widgetIcon.save();
+            IWidgetIcon widgetIcon = persistenceManager.newInstance(IWidgetIcon.class);
+            widgetIcon.setSrc(icon.getSrc());
+            widgetIcon.setHeight(icon.getHeight());
+            widgetIcon.setWidth(icon.getWidth());
+            widgetIcon.setLang(icon.getLang());
+            widget.getWidgetIcons().add(widgetIcon);
 		}
 	}
 
-	private static void createLicenses(W3CWidget model, Widget widget){
+	private static void createLicenses(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for(ILicenseEntity licenseModel: model.getLicensesList()){
-			License license = new License(licenseModel.getLicenseText(),licenseModel.getHref(), licenseModel.getLang(), licenseModel.getDir(), widget);
-			license.save();
+            ILicense license = persistenceManager.newInstance(ILicense.class);
+            license.setText(licenseModel.getLicenseText());
+            license.setHref(licenseModel.getHref());
+            license.setLang(licenseModel.getLang());
+            license.setDir(licenseModel.getDir());
+            widget.getLicenses().add(license);
 		}
 	}
 
-	private static void createPreferences(W3CWidget model, Widget widget){
+	private static void createPreferences(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for(IPreferenceEntity prefEntity : model.getPrefences()){
-			PreferenceDefault prefenceDefault = new PreferenceDefault();
-			prefenceDefault.setPreference(prefEntity.getName());
-			prefenceDefault.setValue(prefEntity.getValue());
-			prefenceDefault.setReadOnly(prefEntity.isReadOnly());
-			prefenceDefault.setWidget(widget);
-			prefenceDefault.save();
+            IPreferenceDefault preferenceDefault = persistenceManager.newInstance(IPreferenceDefault.class);
+			preferenceDefault.setPreference(prefEntity.getName());
+			preferenceDefault.setValue(prefEntity.getValue());
+			preferenceDefault.setReadOnly(prefEntity.isReadOnly());
+            widget.getPreferenceDefaults().add(preferenceDefault);
 		}
 	}
 
-	private static void createFeatures(W3CWidget model, Widget widget){
+	private static void createFeatures(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget){
 		for(IFeatureEntity featureEntity: model.getFeatures()){
-			Feature feature = new Feature();
+            IFeature feature = persistenceManager.newInstance(IFeature.class);
 			feature.setFeatureName(featureEntity.getName());
 			feature.setRequired(featureEntity.isRequired());
-			feature.setWidget(widget);
-			feature.save();			
+            widget.getFeatures().add(feature);
 			// now attach all parameters to this feature.
 			for(IParamEntity paramEntity : featureEntity.getParams()){
-				Param param = new Param();
+	            IParam param = persistenceManager.newInstance(IParam.class);
 				param.setParameterName(paramEntity.getName());
 				param.setParameterValue(paramEntity.getValue());
-				param.setParentFeature(feature);
-				param.save();
+	            feature.getParameters().add(param);
 			}
 		}
 	}
 
-	private static void createAccessRequests(W3CWidget model, Widget widget, boolean grantAccessRequests){
+	private static void createAccessRequests(IPersistenceManager persistenceManager, W3CWidget model, IWidget widget, boolean grantAccessRequests){
 		for(IAccessEntity accessEntity:model.getAccessList()){
-			AccessRequest acc = new AccessRequest();
+            IAccessRequest acc = persistenceManager.newInstance(IAccessRequest.class);
 			acc.setOrigin(accessEntity.getOrigin());
 			acc.setSubdomains(accessEntity.hasSubDomains());
-			acc.setWidget(widget);
 			acc.setGranted(grantAccessRequests);
+			acc.setWidget(widget);
 			if (grantAccessRequests){
 				_logger.info("access policy granted for "+widget.getWidgetTitle("en")+" to access "+acc.getOrigin());
 			}
-			acc.save();
+			persistenceManager.save(acc);
 		}
 	}
 
@@ -221,8 +221,9 @@ public class WidgetFactory {
 	 * @param id the id of the widget
 	 * @return true if the widget is destroyed successfully
 	 */
-	public static boolean destroy(int id){
-		Widget widget = Widget.findById(Integer.valueOf(id));
+	public static boolean destroy(Object id){
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IWidget widget = persistenceManager.findById(IWidget.class, id);
 		return destroy(widget);
 	}
 
@@ -231,41 +232,27 @@ public class WidgetFactory {
 	 * @param widget the widget to destroy
 	 * @return true if the widget is destroyed successfully
 	 */
-	public static boolean destroy(Widget widget){
+	public static boolean destroy(IWidget widget){
 
 		if(widget==null) return false;
 		
 		// remove any defaults for this widget
-		WidgetDefault[] widgetDefault = WidgetDefault.findByValue("widgetId", widget.getId());
-		if (widgetDefault.length == 1) widgetDefault[0].delete();
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IWidgetDefault[] widgetDefault = persistenceManager.findByValue(IWidgetDefault.class, "widget", widget);
+		if (widgetDefault.length == 1) persistenceManager.delete(widgetDefault[0]);
 		
 		// remove any widget instances for this widget
-		WidgetInstance[] instances = WidgetInstance.findByValue("widget", widget);	
-		for(WidgetInstance instance : instances){
+		IWidgetInstance[] instances = persistenceManager.findByValue(IWidgetInstance.class, "widget", widget);	
+		for(IWidgetInstance instance : instances){
 			WidgetInstanceFactory.destroy(instance);
 		}
-		
-		// remove any widget types for this widget
-		Set<?> types = widget.getWidgetTypes();
-		WidgetType[] widgetTypes = types.toArray(new WidgetType[types.size()]);		        
-		for(int j=0;j<widgetTypes.length;++j){	
-			widgetTypes[j].delete();
-		}
 
-		// remove PreferenceDefaults
-		PreferenceDefault.delete(PreferenceDefault.findByValue("widget", widget));
-
-		// remove Features
-		for(Feature feature :Feature.findByValue("widget", widget)){
-			Param.delete(Param.findByValue("parentFeature", feature));
-			feature.delete();
-		}
-		
 		// remove any AccessRequests
-		AccessRequest.delete(AccessRequest.findByValue("widget", widget));
-
+        IAccessRequest[] accessRequests = persistenceManager.findByValue(IAccessRequest.class, "widget", widget);
+        persistenceManager.delete(accessRequests);
+		
 		// remove the widget itself
-		widget.delete();
+		persistenceManager.delete(widget);
 		return true;
 	} 
 

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetHelper.java Wed Jun 16 14:16:36 2010
@@ -16,13 +16,13 @@ package org.apache.wookie.helpers;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-import org.apache.wookie.beans.Description;
-import org.apache.wookie.beans.License;
-import org.apache.wookie.beans.Name;
-import org.apache.wookie.beans.PreferenceDefault;
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetIcon;
-import org.apache.wookie.beans.WidgetType;
+import org.apache.wookie.beans.IDescription;
+import org.apache.wookie.beans.ILicense;
+import org.apache.wookie.beans.IName;
+import org.apache.wookie.beans.IPreferenceDefault;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.IWidgetIcon;
+import org.apache.wookie.beans.IWidgetType;
 import org.apache.wookie.w3c.util.LocalizationUtils;
 
 /**
@@ -40,8 +40,8 @@ public class WidgetHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	public static String createXMLWidgetsDocument(Widget widget, String localIconPath, String[] locales){
-		Widget[] widgets = {widget};
+	public static String createXMLWidgetsDocument(IWidget widget, String localIconPath, String[] locales){
+		IWidget[] widgets = {widget};
 		return createXMLWidgetsDocument(widgets, localIconPath, locales);
 	}
 
@@ -52,10 +52,10 @@ public class WidgetHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	public static String createXMLWidgetsDocument(Widget[] widgets, String localIconPath, String[] locales){
+	public static String createXMLWidgetsDocument(IWidget[] widgets, String localIconPath, String[] locales){
 		String document = XMLDECLARATION;
 		document += "\n<widgets>\n";
-		for (Widget widget:widgets){
+		for (IWidget widget:widgets){
 			document += toXml(widget, localIconPath, locales);
 		}
 		document += "</widgets>\n";
@@ -69,7 +69,7 @@ public class WidgetHelper {
 	 * @param localIconPath the local path to prefix any local icons, typically the server URL
 	 * @return the XML representation of the widget
 	 */
-	public static String toXml(Widget widget, String localIconPath, String[] locales){
+	public static String toXml(IWidget widget, String localIconPath, String[] locales){
 		String out = getWidgetElement(widget);
 		out += getName(widget, locales);
 		out += getDescription(widget, locales);
@@ -82,7 +82,7 @@ public class WidgetHelper {
 		return out;
 	}
 	
-	private static String getWidgetElement(Widget widget){
+	private static String getWidgetElement(IWidget widget){
 		if (widget == null) return null;
 		String width = "";
 		String height = "";
@@ -103,7 +103,7 @@ public class WidgetHelper {
 		return out;
 	}
 	
-	private static String getAuthor(Widget widget){
+	private static String getAuthor(IWidget widget){
 		String out = "\t\t<author";
 		if (widget.getWidgetAuthorEmail() != null) out+= " email=\""+widget.getWidgetAuthorEmail()+"\"";
 		if (widget.getWidgetAuthorHref() != null) out+= " href=\""+widget.getWidgetAuthorHref()+"\"";
@@ -113,11 +113,10 @@ public class WidgetHelper {
 		return out;
 	}
 	
-	private static String getLicenses(Widget widget, String[] locales){
+	private static String getLicenses(IWidget widget, String[] locales){
 		String out = "";
-		License[] licenses = License.findByValue("widget", widget);		
-		licenses = (License[]) LocalizationUtils.processElementsByLocales(licenses, locales);
-		for (License license: licenses){
+		ILicense[] licenses = (ILicense[])LocalizationUtils.processElementsByLocales(widget.getLicenses(), locales);
+		for (ILicense license: licenses){
 			out +="\t\t<license ";
 			if (license.getLang()!=null) out+=" xml:lang=\""+license.getLang()+"\"";
 			if (license.getHref()!=null) out+=" href=\""+license.getHref()+"\"";
@@ -127,17 +126,16 @@ public class WidgetHelper {
 		return out;
 	}
 	
-	private static String getPreferences(Widget widget){
+	private static String getPreferences(IWidget widget){
 		String out = "";
-		PreferenceDefault[] prefs = PreferenceDefault.findByValue("widget",widget);
-		for (PreferenceDefault pref : prefs) {
+		for (IPreferenceDefault pref : widget.getPreferenceDefaults()) {
 			out += "\t\t<preference name=\"" + pref.getPreference() + "\"  value=\""+pref.getValue()+"\"  readonly=\"" + (pref.isReadOnly()? "true" : "false") + "\"/>";
 		}
 		return out;
 	}
 
-	private static String getName(Widget widget, String[] locales){
-		Name name = (Name) LocalizationUtils.getLocalizedElement(Name.findByValue("widget", widget),locales);
+	private static String getName(IWidget widget, String[] locales){
+		IName name = (IName)LocalizationUtils.getLocalizedElement(widget.getNames(),locales);
 		String shortName = null;
 		String longName = null;
 		if (name != null) {
@@ -153,8 +151,8 @@ public class WidgetHelper {
 		return out;
 	}
 
-	private static String getDescription(Widget widget, String[] locales){
-		Description desc = (Description) LocalizationUtils.getLocalizedElement(Description.findByValue("widget", widget), locales);	
+	private static String getDescription(IWidget widget, String[] locales){
+		IDescription desc = (IDescription)LocalizationUtils.getLocalizedElement(widget.getDescriptions(), locales);	
 		String out = "\t\t<description";
 		if (desc!= null && desc.getDir()!=null) out+=" dir=\""+desc.getDir()+"\"";
 		out += ">";
@@ -163,26 +161,25 @@ public class WidgetHelper {
 		return out;
 	}
 	
-	private static String getTags(Widget widget){
+	private static String getTags(IWidget widget){
 		String out = "";
-		WidgetType[] types = WidgetType.findByValue("widget", widget);
-		for (WidgetType type:types){
+		for (IWidgetType type:widget.getWidgetTypes()){
 			out +="\t\t<category>"+type.getWidgetContext()+"</category>\n";
 		}
 		return out;
 	}
 
-	private static String getIcons(Widget widget, String[] locales, String localIconPath){
+	private static String getIcons(IWidget widget, String[] locales, String localIconPath){
 		URL urlWidgetIcon = null;
 		String out = "";
-		WidgetIcon[] icons;
+		IWidgetIcon[] icons;
 		if (locales != null && locales.length != 0){
-			icons = (WidgetIcon[]) LocalizationUtils.processElementsByLocales(WidgetIcon.findForWidget(widget), locales);
+			icons = (IWidgetIcon[])LocalizationUtils.processElementsByLocales(widget.getWidgetIcons(), locales);
 		} else {
-			icons = WidgetIcon.findForWidget(widget);
+			icons = widget.getWidgetIcons().toArray(new IWidgetIcon[widget.getWidgetIcons().size()]);
 		}
 		if (icons!=null){
-			for (WidgetIcon icon: icons){
+			for (IWidgetIcon icon: icons){
 				try {
 					// If local...
 					if (!icon.getSrc().startsWith("http")) {

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceFactory.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceFactory.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceFactory.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceFactory.java Wed Jun 16 14:16:36 2010
@@ -19,12 +19,12 @@ import javax.servlet.http.HttpSession;
 import org.apache.commons.configuration.Configuration;
 import org.apache.log4j.Logger;
 import org.apache.wookie.Messages;
-import org.apache.wookie.beans.Participant;
-import org.apache.wookie.beans.Preference;
-import org.apache.wookie.beans.PreferenceDefault;
-import org.apache.wookie.beans.SharedData;
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetInstance;
+import org.apache.wookie.beans.IPreference;
+import org.apache.wookie.beans.IPreferenceDefault;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.IWidgetInstance;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.util.HashGenerator;
 import org.apache.wookie.util.opensocial.OpenSocialUtils;
 import org.apache.wookie.w3c.util.LocalizationUtils;
@@ -67,9 +67,10 @@ public class WidgetInstanceFactory{
 	 * Return the "default widget" instance
 	 * @return
 	 */
-	public static WidgetInstance defaultInstance(String locale){
-		WidgetInstance instance = new WidgetInstance();
-		instance.setWidget(Widget.findDefaultByType("unsupported")); //$NON-NLS-1$
+	public static IWidgetInstance defaultInstance(String locale){
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IWidgetInstance instance = persistenceManager.newInstance(IWidgetInstance.class);
+		instance.setWidget(persistenceManager.findWidgetDefaultByType("unsupported")); //$NON-NLS-1$
 		instance.setIdKey("0000");
 		instance.setLang(locale);
 		instance.setOpensocialToken("");
@@ -87,17 +88,18 @@ public class WidgetInstanceFactory{
 	 * @param localizedMessages
 	 * @return
 	 */
-	public WidgetInstance newInstance(String apiKey, String userId, String sharedDataKey, String serviceType, String widgetId, String lang){
+	public IWidgetInstance newInstance(String apiKey, String userId, String sharedDataKey, String serviceType, String widgetId, String lang){
 		try {
-			Widget widget;
-			WidgetInstance widgetInstance;
+			IWidget widget;
+			IWidgetInstance widgetInstance;
 			// Widget ID or Widget Type?
+	        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
 			if (widgetId != null){
-				widget = Widget.findByGuid(widgetId);
+				widget = persistenceManager.findWidgetByGuid(widgetId);
 			} 
 			else {
 				// does this type of widget exist?
-				widget = Widget.findDefaultByType(serviceType);				
+				widget = persistenceManager.findWidgetDefaultByType(serviceType);				
 			}
 			// Unsupported
 			if (widget == null) return null;
@@ -118,7 +120,7 @@ public class WidgetInstanceFactory{
 
 			Configuration properties = (Configuration) session.getServletContext().getAttribute("opensocial"); //$NON-NLS-1$
 			
-			widgetInstance = addNewWidgetInstance(apiKey, userId, sharedDataKey, widget, nonce, hashKey, properties, lang);
+			widgetInstance = addNewWidgetInstance(persistenceManager, apiKey, userId, sharedDataKey, widget, nonce, hashKey, properties, lang);
 			return widgetInstance;
 		} catch (Exception ex) {
 			return null;
@@ -127,6 +129,7 @@ public class WidgetInstanceFactory{
 
 	/**
 	 * Create a new widget instance object, populate its default values, and save it.
+	 * @param persistenceManager
 	 * @param api_key
 	 * @param userId
 	 * @param sharedDataKey
@@ -136,8 +139,8 @@ public class WidgetInstanceFactory{
 	 * @param properties
 	 * @return
 	 */
-	private WidgetInstance addNewWidgetInstance(String api_key, String userId, String sharedDataKey, Widget widget, String nonce, String idKey, Configuration properties, String lang) {		
-		WidgetInstance widgetInstance = new WidgetInstance();
+	private IWidgetInstance addNewWidgetInstance(IPersistenceManager persistenceManager, String api_key, String userId, String sharedDataKey, IWidget widget, String nonce, String idKey, Configuration properties, String lang) {		
+		IWidgetInstance widgetInstance = persistenceManager.newInstance(IWidgetInstance.class);
 		widgetInstance.setUserId(userId);
 		widgetInstance.setSharedDataKey(sharedDataKey);
 		widgetInstance.setIdKey(idKey);
@@ -166,46 +169,43 @@ public class WidgetInstanceFactory{
 			}
 		}
 
-		// Save
-		widgetInstance.save();
-
 		// add in the sharedDataKey as a preference so that a widget can know
 		// what sharedData event to listen to later
-		setPreference(widgetInstance, "sharedDataKey", sharedDataKey, true);//$NON-NLS-1$
+		setPreference(persistenceManager, widgetInstance, "sharedDataKey", sharedDataKey, true);//$NON-NLS-1$
 
 		// add in widget defaults
-		PreferenceDefault[] prefs = PreferenceDefault.findByValue("widget", widget);	
-		if (prefs == null) return null;
-		for (PreferenceDefault pref: prefs){
-			setPreference(widgetInstance, pref.getPreference(), pref.getValue(),pref.isReadOnly());
+		for (IPreferenceDefault pref: widget.getPreferenceDefaults()){
+			setPreference(persistenceManager, widgetInstance, pref.getPreference(), pref.getValue(),pref.isReadOnly());
 		}	
+
+		// Save
+		persistenceManager.save(widgetInstance);
+
 		return widgetInstance;
 	}
 
 	/**
 	 * Initialize a preference for the instance
+     * @param persistenceManager
 	 * @param instance
 	 * @param key
 	 * @param value
 	 */
-	private void setPreference(WidgetInstance widgetInstance, String key, String value, boolean readOnly){
-		Preference pref = new Preference();
-		pref.setWidgetInstance(widgetInstance);
+	private void setPreference(IPersistenceManager persistenceManager, IWidgetInstance widgetInstance, String key, String value, boolean readOnly){
+		IPreference pref = persistenceManager.newInstance(IPreference.class);
 		pref.setDkey(key);				
 		pref.setDvalue(value);
 		pref.setReadOnly(readOnly);
-		pref.save();	
+		widgetInstance.getPreferences().add(pref);
 	}
 	
 	/**
 	 * Destroy a widget instance and all references to it
 	 * @param instance
 	 */
-	public static void destroy(WidgetInstance instance){
-		SharedData.delete(SharedData.findByValue("widgetInstance", instance));
-		Preference.delete(Preference.findByValue("widgetInstance", instance));
-		Participant.delete(Participant.findByValue("widgetInstance", instance));
-		instance.delete();
+	public static void destroy(IWidgetInstance instance){
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		persistenceManager.delete(instance);
 	}
 
 }

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceHelper.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceHelper.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceHelper.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetInstanceHelper.java Wed Jun 16 14:16:36 2010
@@ -13,8 +13,8 @@
  */
 package org.apache.wookie.helpers;
 
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetInstance;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.IWidgetInstance;
 import org.apache.wookie.w3c.IW3CXMLConfiguration;
 
 /**
@@ -33,9 +33,9 @@ public class WidgetInstanceHelper {
 	 * @param urlWidgetProxyServer the local URL of the proxy service
 	 * @return
 	 */
-	public static String createXMLWidgetInstanceDocument(WidgetInstance instance, String url){
+	public static String createXMLWidgetInstanceDocument(IWidgetInstance instance, String url){
 		String xml = XMLDECLARATION;
-		Widget widget = instance.getWidget();
+		IWidget widget = instance.getWidget();
 		
 		// Return a default width and height where the original value is either not provided
 		// or of an invalid range (<0)

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetKeyManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetKeyManager.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetKeyManager.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetKeyManager.java Wed Jun 16 14:16:36 2010
@@ -23,7 +23,9 @@ import org.apache.commons.mail.SimpleEma
 import org.apache.log4j.Logger;
 
 import org.apache.wookie.Messages;
-import org.apache.wookie.beans.ApiKey;
+import org.apache.wookie.beans.IApiKey;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.exceptions.SystemUnavailableException;
 import org.apache.wookie.util.HashGenerator;
 import org.apache.wookie.w3c.util.RandomGUID;
@@ -43,18 +45,19 @@ public class WidgetKeyManager{
 		if (value == null) return false;
 		if (value.trim().equals("")) return false;
 		value = value.trim();
-		ApiKey[] key = ApiKey.findByValue("value", value);
+		IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IApiKey[] key = persistenceManager.findByValue(IApiKey.class, "value", value);
 		if (key == null || key.length !=1) return false;
-		return revokeKey(key[0]);
+		return revokeKey(persistenceManager, key[0]);
 	}
 	
 	/**
 	 * Revoke a key
 	 * @param key the key to revoke
 	 */
-	private static boolean revokeKey(ApiKey key){
+	private static boolean revokeKey(IPersistenceManager persistenceManager, IApiKey key){
 		if (key == null) return false;
-		key.delete();
+		persistenceManager.delete(key);
 		return true;
 	}
 	
@@ -67,8 +70,9 @@ public class WidgetKeyManager{
 	 * @throws SystemUnavailableException if there is a problem generating the key
 	 */
 	public static void createKey(HttpServletRequest request, String email, Messages localizedMessages) throws SystemUnavailableException, EmailException {
-		
-		ApiKey key = new ApiKey();
+	    
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IApiKey key = persistenceManager.newInstance(IApiKey.class);
 		key.setEmail(email);
 
 		// generate a nonce
@@ -85,7 +89,7 @@ public class WidgetKeyManager{
 		hashKey = hashKey.replaceAll("\\+", ".pl."); //$NON-NLS-1$ //$NON-NLS-2$
 
 		key.setValue(hashKey);
-		key.save();
+		persistenceManager.save(key);
 		
 		String message = localizedMessages.getString("WidgetKeyManager.0")+hashKey+" \n";  //$NON-NLS-1$//$NON-NLS-2$
 		message+="\n" + localizedMessages.getString("WidgetKeyManager.1"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -112,7 +116,8 @@ public class WidgetKeyManager{
 
 		// Empty key/empty origin
 		if (key.trim().equals("")) return false; //$NON-NLS-1$
-		ApiKey[] apiKey = ApiKey.findByValue("value", key);
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		IApiKey[] apiKey = persistenceManager.findByValue(IApiKey.class, "value", key);
 		if (apiKey == null || apiKey.length !=1) {
 		  _logger.info("Invalid API key supplied: " + key);
 		  return false;

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetServiceHelper.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetServiceHelper.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetServiceHelper.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/helpers/WidgetServiceHelper.java Wed Jun 16 14:16:36 2010
@@ -13,8 +13,10 @@
  */
 package org.apache.wookie.helpers;
 
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetService;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.IWidgetService;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 
 public class WidgetServiceHelper {
 	
@@ -26,7 +28,7 @@ public class WidgetServiceHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	public static String createXMLWidgetServiceDocument(WidgetService service, String localIconPath, String[] locales){
+	public static String createXMLWidgetServiceDocument(IWidgetService service, String localIconPath, String[] locales){
 		return XMLDECLARATION + WidgetServiceHelper.toXml(service, localIconPath, locales);
 	}
 	
@@ -36,10 +38,10 @@ public class WidgetServiceHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	public static String createXMLWidgetServicesDocument(WidgetService[] services, String localIconPath, boolean defaults, String[] locales){
+	public static String createXMLWidgetServicesDocument(IWidgetService[] services, String localIconPath, boolean defaults, String[] locales){
 		String out = XMLDECLARATION;
 		out+="<services>\n";
-		for (WidgetService service: services){
+		for (IWidgetService service: services){
 			out += WidgetServiceHelper.toXml(service,localIconPath,defaults, locales);
 		}
 		out+="</services>\n";
@@ -52,7 +54,7 @@ public class WidgetServiceHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	private static String toXml(WidgetService service, String localIconPath, String[] locales){
+	private static String toXml(IWidgetService service, String localIconPath, String[] locales){
 		return toXml(service, localIconPath,false, locales);
 	}
 	
@@ -62,15 +64,16 @@ public class WidgetServiceHelper {
 	 * @param localIconPath
 	 * @return
 	 */
-	private static String toXml(WidgetService service, String localIconPath, boolean defaults, String[] locales){
+	private static String toXml(IWidgetService service, String localIconPath, boolean defaults, String[] locales){
 		String out = "\n<service name=\""+service.getServiceName()+"\">\n";
-		Widget[] widgets;
+		IWidget[] widgets;
+		IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
 		if (defaults){
-			 widgets = new Widget[]{Widget.findDefaultByType(service.getServiceName())};
+			 widgets = new IWidget[]{persistenceManager.findWidgetDefaultByType(service.getServiceName())};
 		} else {
-			widgets = Widget.findByType(service.getServiceName());
+			widgets = persistenceManager.findWidgetsByType(service.getServiceName());
 		}
-		for (Widget widget:widgets) out += WidgetHelper.toXml(widget, localIconPath, locales);
+		for (IWidget widget:widgets) out += WidgetHelper.toXml(widget, localIconPath, locales);
 		out +="</service>\n";
 		return out;
 	}

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/IWidgetAdminManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/IWidgetAdminManager.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/IWidgetAdminManager.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/IWidgetAdminManager.java Wed Jun 16 14:16:36 2010
@@ -28,14 +28,14 @@ public interface IWidgetAdminManager {
 	 * @param widgetId
 	 * @param widgetType
 	 */
-	boolean removeSingleWidgetType(int widgetId, String widgetType);
+	boolean removeSingleWidgetType(String widgetId, String widgetType);
 
 	/**
 	 * Sets a given widget to be the default for a given context - i.e. chat or discussion etc...
 	 * @param key - the key of the widget to set as defult
 	 * @param widgetType - the type of widget
 	 */
-	void setDefaultWidget(int key, String widgetType);
+	void setDefaultWidget(String key, String widgetType);
 
 	/**
 	 * FRom a given widget db key, allow to add multiple types
@@ -43,7 +43,7 @@ public interface IWidgetAdminManager {
 	 * @param widgetTypes
 	 * @param maximize
 	 */
-	void setWidgetTypesForWidget(int dbKey,
+	void setWidgetTypesForWidget(String dbKey,
 			String[] widgetTypes, boolean maximize);
 
 

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/impl/WidgetAdminManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/impl/WidgetAdminManager.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/impl/WidgetAdminManager.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/manager/impl/WidgetAdminManager.java Wed Jun 16 14:16:36 2010
@@ -15,14 +15,16 @@
 package org.apache.wookie.manager.impl;
 
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.log4j.Logger;
 import org.apache.wookie.Messages;
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetDefault;
-import org.apache.wookie.beans.WidgetType;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.IWidgetDefault;
+import org.apache.wookie.beans.IWidgetType;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.manager.IWidgetAdminManager;
 
 /**
@@ -43,93 +45,106 @@ public class WidgetAdminManager implemen
 		this.localizedMessages = localizedMessages;	
 	}
 	
-	private void deleteWidgetDefaultByIdAndServiceType(int widgetKey, String serviceType){
+	private void deleteWidgetDefaultByIdAndServiceType(Object widgetKey, String serviceType){
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidget widget = persistenceManager.findById(IWidget.class, widgetKey);
 		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("widgetId", widgetKey);
+		map.put("widget", widget);
 		map.put("widgetContext", serviceType);
-		WidgetDefault[] widgetDefaults;
-		widgetDefaults = WidgetDefault.findByValues(map);
-		WidgetDefault.delete(widgetDefaults);
+        IWidgetDefault[] widgetDefaults = persistenceManager.findByValues(IWidgetDefault.class, map);
+		persistenceManager.delete(widgetDefaults);
 	}
 	
-	private boolean doesServiceExistForWidget(int dbkey, String serviceType){
-		Widget widget = Widget.findById(Integer.valueOf(dbkey));
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("widget", widget);
-		map.put("widgetContext", serviceType);
-		WidgetType[] types = WidgetType.findByValues(map);
-		if (types == null || types.length !=1) return false;
-		return true;					
+	private boolean doesServiceExistForWidget(Object dbkey, String serviceType){
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidget widget = persistenceManager.findById(IWidget.class, dbkey);
+        Iterator<IWidgetType> typesIter = widget.getWidgetTypes().iterator();
+        while (typesIter.hasNext())
+        {
+            IWidgetType type = typesIter.next();
+            if (type.getWidgetContext().equalsIgnoreCase(serviceType))
+            {
+                return true;
+            }
+        }
+		return false;					
 	}
 	
 	/* (non-Javadoc)
-	 * @see org.apache.wookie.manager.IWidgetAdminManager#removeSingleWidgetType(int, java.lang.String)
+	 * @see org.apache.wookie.manager.IWidgetAdminManager#removeSingleWidgetType(java.lang.String, java.lang.String)
 	 */
-	public boolean removeSingleWidgetType(int widgetId, String widgetType) {
+	public boolean removeSingleWidgetType(String widgetId, String widgetType) {
 		boolean response = false;	
-		Widget widget = Widget.findById(Integer.valueOf(widgetId));
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidget widget = persistenceManager.findById(IWidget.class, widgetId);
 		// remove any widget types for this widget
-		Set<?> types = widget.getWidgetTypes();
-        WidgetType[] widgetTypes = types.toArray(new WidgetType[types.size()]);		        
-        for(int j=0;j<widgetTypes.length;++j){						
-    		if(widgetType.equalsIgnoreCase(widgetTypes[j].getWidgetContext())){
-    			// BUG FIX
-    			// Using only the deleteObject method meant that
-    			// the set still contained this widgetType.
-    			// So we also remove it from the list
-    			types.remove(widgetTypes[j]);
-    			widgetTypes[j].delete();
-    			response = true;
-    		}
-		}
+        Iterator<IWidgetType> typesIter = widget.getWidgetTypes().iterator();
+        while (typesIter.hasNext())
+        {
+            IWidgetType type = typesIter.next();
+            if (type.getWidgetContext().equalsIgnoreCase(widgetType))
+            {
+                typesIter.remove();
+                response = true;
+            }
+        }
+        if (response)
+        {
+            persistenceManager.save(widget);
+        }
         // if it exists as a service default, then remove it
         deleteWidgetDefaultByIdAndServiceType(widgetId, widgetType);
         return response;
 	}
 	
 	/* (non-Javadoc)
-	 * @see org.apache.wookie.manager.IWidgetAdminManager#setDefaultWidget(int, java.lang.String)
+	 * @see org.apache.wookie.manager.IWidgetAdminManager#setDefaultWidget(java.lang.String, java.lang.String)
 	 */
-	public void setDefaultWidget(int key, String widgetType){
+	public void setDefaultWidget(String key, String widgetType){
         boolean found=false;
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidget widget = persistenceManager.findById(IWidget.class, key);
 		// does it already exist in the widgetdefault table?
-		WidgetDefault[] currentDefaults = WidgetDefault.findAll();
+        IWidgetDefault [] currentDefaults = persistenceManager.findAll(IWidgetDefault.class);
 		for(int i=0;i<currentDefaults.length;i++){
 			if(currentDefaults[i].getWidgetContext().equalsIgnoreCase(widgetType)){   
 				// found it so update to new widget id
-				currentDefaults[i].setWidgetId(key);
-				currentDefaults[i].save();
+				currentDefaults[i].setWidget(widget);
+				persistenceManager.save(currentDefaults[i]);
 				found=true;
 			}
 		}
 		// didnt find it already set, so add new one
 		if(!found){
-			WidgetDefault wd = new WidgetDefault();
+			IWidgetDefault wd = persistenceManager.newInstance(IWidgetDefault.class);
 			wd.setWidgetContext(widgetType);
-			wd.setWidgetId(key);	
-			wd.save();
+			wd.setWidget(widget);	
+			persistenceManager.save(wd);
 		}
 	}
 	
 	/* (non-Javadoc)
-	 * @see org.apache.wookie.manager.IWidgetAdminManager#setWidgetTypesForWidget(int, java.lang.String[], boolean)
+	 * @see org.apache.wookie.manager.IWidgetAdminManager#setWidgetTypesForWidget(java.lang.String, java.lang.String[], boolean)
 	 */
-	@SuppressWarnings("unchecked")
-	public void setWidgetTypesForWidget(int dbKey, String[] widgetTypes, boolean maximize){
-		Widget widget = Widget.findById(dbKey);
+	public void setWidgetTypesForWidget(String dbKey, String[] widgetTypes, boolean maximize){
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        IWidget widget = persistenceManager.findById(IWidget.class, dbKey);
 
-		WidgetType widgetType;
+        boolean widgetTypesSet = false;
 		if (widgetTypes!=null){
 			for(int i=0;i<widgetTypes.length;i++){	
 				if(!doesServiceExistForWidget(widget.getId(), widgetTypes[i])){
-					widgetType = new WidgetType();
+				    IWidgetType widgetType = persistenceManager.newInstance(IWidgetType.class);
 					widgetType.setWidgetContext(widgetTypes[i]);
-					widgetType.setWidget(widget);
 					widget.getWidgetTypes().add(widgetType);
-					widgetType.save();						
+					widgetTypesSet = true;
 				}
 			}
-		}			
+		}
+		if (widgetTypesSet)
+		{
+		    persistenceManager.save(widget);
+		}
 	}
 
 }

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/proxy/ProxyServlet.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/proxy/ProxyServlet.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/proxy/ProxyServlet.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/proxy/ProxyServlet.java Wed Jun 16 14:16:36 2010
@@ -31,10 +31,12 @@ import javax.servlet.http.HttpServletRes
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.httpclient.auth.AuthenticationException;
 import org.apache.log4j.Logger;
-import org.apache.wookie.beans.AccessRequest;
-import org.apache.wookie.beans.Whitelist;
-import org.apache.wookie.beans.Widget;
-import org.apache.wookie.beans.WidgetInstance;
+import org.apache.wookie.beans.IAccessRequest;
+import org.apache.wookie.beans.IWidgetInstance;
+import org.apache.wookie.beans.IWhitelist;
+import org.apache.wookie.beans.IWidget;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 
 /**
  * A web proxy servlet which will translate calls for content and return them as if they came from
@@ -73,7 +75,8 @@ public class ProxyServlet extends HttpSe
 			}
 
 			// Check that the request is coming from a valid widget
-			WidgetInstance instance = WidgetInstance.findByIdKey(request.getParameter("instanceid_key"));	
+			IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+			IWidgetInstance instance = persistenceManager.findWidgetInstanceByIdKey(request.getParameter("instanceid_key"));	
 			if(instance == null && !isDefaultGadget(request)){
 				response.sendError(HttpServletResponse.SC_FORBIDDEN,"<error>"+UNAUTHORISED_MESSAGE+"</error>");	
 				return;
@@ -166,9 +169,10 @@ public class ProxyServlet extends HttpSe
 	 * @param aUrl
 	 * @return
 	 */
-	public boolean isAllowed(URI requestedUri, WidgetInstance instance){
+	public boolean isAllowed(URI requestedUri, IWidgetInstance instance){
 		// Check global whitelist
-		for (Whitelist whiteList : Whitelist.findAll()){
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+		for (IWhitelist whiteList : persistenceManager.findAll(IWhitelist.class)){
 			// TODO - make this better then just comparing the beginning...
 			if(requestedUri.toString().toLowerCase().startsWith(whiteList.getfUrl().toLowerCase()))			
 				return true;
@@ -186,8 +190,9 @@ public class ProxyServlet extends HttpSe
 	 * @param widget the Widget requesting access to the URI
 	 * @return true if a policy grants access to the requested URI
 	 */
-	private boolean isAllowedByPolicy(URI requestedUri, Widget widget){
-		for (AccessRequest policy: AccessRequest.findAllApplicable(widget))
+	private boolean isAllowedByPolicy(URI requestedUri, IWidget widget){
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+	    for (IAccessRequest policy: persistenceManager.findApplicableAccessRequests(widget))
 			if (policy.isAllowed(requestedUri)) return true;
 		fLogger.warn("No policy grants widget "+widget.getWidgetTitle("en")+" access to: "+requestedUri.toString());
 		return false;

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/ContextListener.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/ContextListener.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/ContextListener.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/ContextListener.java Wed Jun 16 14:16:36 2010
@@ -14,35 +14,33 @@
 
 package org.apache.wookie.server;
 
-
 import java.io.File;
 import java.io.IOException;
+import java.util.Iterator;
 import java.util.Locale;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.log4j.Logger;
 import org.apache.wookie.Messages;
-import org.apache.wookie.beans.ServerFeature;
-import org.apache.wookie.beans.Widget;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.feature.FeatureLoader;
 import org.apache.wookie.helpers.FlashMessage;
 import org.apache.wookie.helpers.WidgetFactory;
 import org.apache.wookie.util.WgtWatcher;
 import org.apache.wookie.util.WidgetFileUtils;
-import org.apache.wookie.util.hibernate.DBManagerFactory;
-import org.apache.wookie.util.hibernate.HibernateUtil;
-import org.apache.wookie.util.hibernate.IDBManager;
 import org.apache.wookie.util.html.StartPageProcessor;
 import org.apache.wookie.w3c.W3CWidget;
 import org.apache.wookie.w3c.W3CWidgetFactory;
 import org.apache.wookie.w3c.exceptions.BadManifestException;
 import org.apache.wookie.w3c.exceptions.BadWidgetZipFileException;
 import org.apache.wookie.w3c.util.WidgetPackageUtils;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
 
 /**
  * ContextListener - does some init work and makes certain things are available 
@@ -62,11 +60,10 @@ public class ContextListener implements 
 	 */
 	static Logger _logger = Logger.getLogger(ContextListener.class.getName());
 	
-	public void contextInitialized(ServletContextEvent event) {
-		// start hibernate now, not on first request
-		HibernateUtil.getSessionFactory();
+    public void contextInitialized(ServletContextEvent event) {
 		try {
 			ServletContext context = event.getServletContext();
+			
 			/* 
 			 *  load the widgetserver.properties file and put it into this context
 			 *  as an attribute 'properties' available to all resources
@@ -83,6 +80,30 @@ public class ContextListener implements 
 				_logger.info("Using default widget server properties, configure your local server using: " + localPropsFile.toString());
 			}
 		 	context.setAttribute("properties", (Configuration) configuration);
+		 	
+		 	/*
+		 	 * Merge in system properties overrides
+		 	 */
+		 	Iterator<Object> systemKeysIter = System.getProperties().keySet().iterator();
+		 	while (systemKeysIter.hasNext()) {
+		 	    String key = systemKeysIter.next().toString();
+		 	    if (configuration.containsKey(key) || key.startsWith("widget.")) {
+		 	        String setting = configuration.getString(key);
+		 	        String override = System.getProperty(key);
+		 	        if ((override != null) && (override.length() > 0) && !override.equals(setting)) {
+		 	            configuration.setProperty(key, override);
+		 	            if (setting != null) {
+		 	                _logger.info("Overridden server configuration property: " + key + "=" +override);
+		 	            }
+		 	        }
+		 	    }
+		 	}
+		 	
+		 	/*
+		 	 * Initialize persistence manager factory now, not on first request
+		 	 */
+		 	PersistenceManagerFactory.initialize(configuration);
+		 	
 		 	/*
 		 	 * Initialise the locale handler
 		 	 */
@@ -161,24 +182,24 @@ public class ContextListener implements 
 		final String contextPath = context.getContextPath();
 		Thread thr = new Thread(){
 	 		public void run() {
-	 			/** Get a DBManager for this thread. */
-	 			final IDBManager dbManager = DBManagerFactory.getDBManager();
 	 			int interval = 5000;
 	 			WgtWatcher watcher = new WgtWatcher();
 	 			watcher.setWatchDir(deploy);
 	 			watcher.setListener(new WgtWatcher.FileChangeListener(){
 	 				public void fileModified(File f) {
+	 			        // get persistence manager for this thread
+                        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
 	 					try{
-	 						dbManager.beginTransaction();
+	 						persistenceManager.begin();
 	 						File upload = WidgetFileUtils.dealWithDroppedFile(UPLOADFOLDER, f);
 	 						W3CWidgetFactory fac = new W3CWidgetFactory();
 	 						fac.setLocales(locales);
 	 						fac.setLocalPath(contextPath+localWidgetFolderPath);
 	 						fac.setOutputDirectory(WIDGETFOLDER);
-	 						fac.setFeatures(ServerFeature.getFeatureNames());
+	 						fac.setFeatures(persistenceManager.findServerFeatureNames());
 	 						fac.setStartPageProcessor(new StartPageProcessor());
 	 						W3CWidget model = fac.parse(upload);
-	 						if(!Widget.exists(model.getIdentifier())) {
+	 						if(persistenceManager.findWidgetByGuid(model.getIdentifier()) == null) {
 	 							WidgetFactory.addNewWidget(model, true);	
 	 							String message = model.getLocalName("en") +"' - " + localizedMessages.getString("WidgetAdminServlet.19");
 	 							_logger.info(message);
@@ -188,23 +209,30 @@ public class ContextListener implements 
 	 							_logger.info(message);
 	 							FlashMessage.getInstance().message(message);
 	 						}
-	 						dbManager.commitTransaction();
+	 						persistenceManager.commit();
 	 					} catch (IOException e) {
+                            persistenceManager.rollback();
 	 						String error = f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.1");
 	 						FlashMessage.getInstance().error(error);
 	 						_logger.error(error);
 	 					} catch (BadWidgetZipFileException e) {
+                            persistenceManager.rollback();
 	 						String error = f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.2");
 	 						FlashMessage.getInstance().error(error);
 	 						_logger.error(error);
 	 					} catch (BadManifestException e) {
+                            persistenceManager.rollback();
 	 						String error = f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.3");
 	 						FlashMessage.getInstance().error(error);
 	 						_logger.error(error);
 	 					} catch (Exception e) {
+                            persistenceManager.rollback();
 	 						String error = f.getName()+":"+e.getLocalizedMessage();
 	 						FlashMessage.getInstance().error(error);
 	 						_logger.error(error);
+						} finally {
+				            // close thread persistence manager
+				            PersistenceManagerFactory.closePersistenceManager();						    
 						}
 	 				}
 	 				public void fileRemoved(File f) {
@@ -217,7 +245,6 @@ public class ContextListener implements 
 	 		         Thread.sleep(interval);
 	 		       }
 	 		     } catch (InterruptedException iex) {
-	 		    	 dbManager.closeSession();
 	 		     }
 	 		}	
 	 	};
@@ -227,6 +254,9 @@ public class ContextListener implements 
 	}
 
 	public void contextDestroyed(ServletContextEvent event){
-		HibernateUtil.getSessionFactory().close(); // Free all resources
+        /*
+         * Terminate persistence manager factory
+         */
+	    PersistenceManagerFactory.terminate();	    
 	}
 }

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/LocalizedResourceFilter.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/LocalizedResourceFilter.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/LocalizedResourceFilter.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/LocalizedResourceFilter.java Wed Jun 16 14:16:36 2010
@@ -29,7 +29,9 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.configuration.Configuration;
-import org.apache.wookie.beans.WidgetInstance;
+import org.apache.wookie.beans.IWidgetInstance;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.w3c.util.LocalizationUtils;
 import org.apache.wookie.w3c.util.WidgetPackageUtils;
 
@@ -71,7 +73,8 @@ public class LocalizedResourceFilter imp
 				// Find the instance key in the current session
 				String key = (String)filterConfig.getServletContext().getAttribute("id_key");
 				if (key != null){
-					WidgetInstance instance = WidgetInstance.findByIdKey(key);
+				    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+					IWidgetInstance instance = persistenceManager.findWidgetInstanceByIdKey(key);
 					if (instance != null){
 						// Only if we have a valid instance and a resource which has no localization
 						// parameter do we start the locale algorithm
@@ -121,7 +124,7 @@ public class LocalizedResourceFilter imp
 	 * @param instance
 	 * @return the localized path for the resource; if none is found, the original path is returned
 	 */
-	private String getLocalizedResource(String originalPath, WidgetInstance instance){
+	private String getLocalizedResource(String originalPath, IWidgetInstance instance){
 		// Remove the context URI from the path, or this will mess up
 		// the algorithm for locating the file using its real path
 		String context = filterConfig.getServletContext().getContextPath();
@@ -177,7 +180,7 @@ public class LocalizedResourceFilter imp
 	 * @param instance
 	 * @return
 	 */
-	private String getWidgetInstanceBasePath(WidgetInstance instance){
+	private String getWidgetInstanceBasePath(IWidgetInstance instance){
 		String guid = instance.getWidget().getGuid();
 		Configuration config = (Configuration) filterConfig.getServletContext().getAttribute("properties");
 		final String localWidgetFolderPath = filterConfig.getServletContext().getContextPath()+config.getString("widget.widgetfolder");

Modified: incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/MainFilter.java
URL: http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/MainFilter.java?rev=955236&r1=955235&r2=955236&view=diff
==============================================================================
--- incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/MainFilter.java (original)
+++ incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/server/MainFilter.java Wed Jun 16 14:16:36 2010
@@ -23,8 +23,8 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 
-import org.apache.wookie.util.hibernate.DBManagerFactory;
-import org.apache.wookie.util.hibernate.IDBManager;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 
 /**
  * Filter to set DB transactions
@@ -36,13 +36,21 @@ public class MainFilter implements Filte
 
 	public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) 
 	throws IOException, ServletException {
-		/** Get a DBManager for this thread. */
-		final IDBManager dbManager = DBManagerFactory.getDBManager();							
-			dbManager.beginTransaction();
-			chain.doFilter(request, response);		
-			dbManager.commitTransaction();
-			// Close the session [This method checks if the session is open]
-			dbManager.closeSession();
+		// get persistence manager for this thread
+	    IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+	    try {
+	        // start and commit transaction around servlet invocation
+			persistenceManager.begin();
+			chain.doFilter(request, response);
+			persistenceManager.commit();
+	    } catch (Throwable t) {
+	        // rollback transaction on exception
+            persistenceManager.rollback();
+            throw new RuntimeException();
+	    } finally {
+            // close thread persistence manager
+	        PersistenceManagerFactory.closePersistenceManager();
+	    }
 	}
 
 	public void init(FilterConfig arg0) throws ServletException {