Author: julien_viet
Date: 2010-02-22 04:42:13 -0500 (Mon, 22 Feb 2010)
New Revision: 1796
Added:
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomizationState.java
Modified:
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomization.java
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetContentProvider.java
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetState.java
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletContentProvider.java
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletPreferencesState.java
components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/StateContainer.java
Log:
better spi integration with content state
Modified:
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomization.java
===================================================================
---
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomization.java 2010-02-22
09:19:12 UTC (rev 1795)
+++
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomization.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -49,7 +49,7 @@
*/
@FormattedBy(MOPFormatter.class)
@PrimaryType(name = "mop:customization")
-public abstract class AbstractCustomization implements Customization<Object>,
StateContainer
+public abstract class AbstractCustomization implements Customization<Object>
{
/** . */
@@ -71,6 +71,22 @@
/** . */
public ChromatticSession session;
+ /** . */
+ private StateContainer container = new StateContainer() {
+ public Object getState() {
+ return getCustomizationState();
+ }
+
+ public void setState(Object state) {
+ setCustomizationState((AbstractCustomizationState)state);
+ }
+ public <T> T create(Class<T> type) {
+ T t = session.create(type);
+ setCustomizationState((AbstractCustomizationState)t);
+ return t;
+ }
+ };
+
@Id
public abstract String getId();
@@ -84,6 +100,12 @@
@Create
abstract ContextSpecialization createContextSpecialization();
+ @OneToOne
+ @MappedBy("mop:state")
+ public abstract AbstractCustomizationState getCustomizationState();
+
+ public abstract void setCustomizationState(AbstractCustomizationState
customizationState);
+
public abstract CustomizationContext getContext();
public abstract AbstractCustomization getParent();
@@ -98,7 +120,7 @@
ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
//
- Object childPayload = contentProvider.getState(this);
+ Object childPayload = contentProvider.getState(container);
//
Object parentPayload = null;
@@ -131,7 +153,7 @@
ContentType contentType = getType();
String mimeType = contentType.getMimeType();
ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
- return contentProvider.getState(this);
+ return contentProvider.getState(container);
}
public void setState(Object state)
@@ -139,7 +161,7 @@
ContentType contentType = getType();
String mimeType = contentType.getMimeType();
ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
- contentProvider.setState(this, state);
+ contentProvider.setState(container, state);
}
public Customization<Object> getCustomization(Set<CustomizationContext>
contexts)
Added:
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomizationState.java
===================================================================
---
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomizationState.java
(rev 0)
+++
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomizationState.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.gatein.mop.core.api.workspace.content;
+
+import org.chromattic.api.annotations.OneToOne;
+import org.chromattic.api.annotations.PrimaryType;
+import org.chromattic.api.annotations.RelatedMappedBy;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+@PrimaryType(name = "mop:customizationstate")
+public abstract class AbstractCustomizationState {
+
+ @OneToOne
+ @RelatedMappedBy("mop:state")
+ public abstract AbstractCustomization getCustomization();
+
+}
Modified:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetContentProvider.java
===================================================================
---
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetContentProvider.java 2010-02-22
09:19:12 UTC (rev 1795)
+++
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetContentProvider.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -20,12 +20,7 @@
import org.gatein.mop.spi.content.ContentProvider;
import org.gatein.mop.spi.content.StateContainer;
-import org.gatein.mop.core.api.workspace.content.AbstractCustomization;
-import org.chromattic.api.ChromatticSession;
-import org.chromattic.api.UndeclaredRepositoryException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
import java.util.List;
/**
@@ -42,72 +37,36 @@
public void setState(StateContainer container, Gadget state)
{
- try
+ GadgetState prefs = (GadgetState)container.getState();
+ if (prefs != null)
{
- ChromatticSession session = ((AbstractCustomization)container).session;
- String containerId = session.getId(container);
- Node node = session.getJCRSession().getNodeByUUID(containerId);
-
- //
- GadgetState prefs;
- if (node.hasNode("mop:state"))
+ if (state == null)
{
- Node stateNode = node.getNode("mop:state");
- prefs = (GadgetState)session.findById(Object.class, stateNode.getUUID());
- if (state == null)
- {
- session.remove(prefs);
- return;
- }
+ container.setState(null);
}
- else
+ }
+ else
+ {
+ if (state != null)
{
- if (state == null)
- {
- return;
- }
- else
- {
- Node stateNode = node.addNode("mop:state",
"mop:gadget");
- prefs = (GadgetState)session.findById(Object.class, stateNode.getUUID());
- }
+ prefs = container.create(GadgetState.class);
+ prefs.setUserPrefs(state.getUserPref());
}
-
- //
- prefs.setUserPrefs(state.getUserPref());
}
- catch (RepositoryException e)
- {
- throw new UndeclaredRepositoryException(e);
- }
}
public Gadget getState(StateContainer container)
{
- try
+ GadgetState prefs = (GadgetState)container.getState();
+ if (prefs != null)
{
- ChromatticSession session = ((AbstractCustomization)container).session;
- String containerId = session.getId(container);
- Node node = session.getJCRSession().getNodeByUUID(containerId);
-
- //
- GadgetState prefs;
- if (node.hasNode("mop:state"))
- {
- Node stateNode = node.getNode("mop:state");
- prefs = (GadgetState)session.findById(Object.class, stateNode.getUUID());
- Gadget gadget = new Gadget();
- gadget.setUserPref(prefs.getUserPrefs());
- return gadget;
- }
- else
- {
- return null;
- }
+ Gadget gadget = new Gadget();
+ gadget.setUserPref(prefs.getUserPrefs());
+ return gadget;
}
- catch (RepositoryException e)
+ else
{
- throw new UndeclaredRepositoryException(e);
+ return null;
}
}
Modified:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetState.java
===================================================================
---
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetState.java 2010-02-22
09:19:12 UTC (rev 1795)
+++
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/gadget/GadgetState.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -20,13 +20,14 @@
import org.chromattic.api.annotations.PrimaryType;
import org.chromattic.api.annotations.Property;
+import org.gatein.mop.core.api.workspace.content.AbstractCustomizationState;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
*/
@PrimaryType(name = "mop:gadget")
-public abstract class GadgetState
+public abstract class GadgetState extends AbstractCustomizationState
{
@Property(name = "mop:prefs")
Modified:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletContentProvider.java
===================================================================
---
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletContentProvider.java 2010-02-22
09:19:12 UTC (rev 1795)
+++
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletContentProvider.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -20,12 +20,7 @@
import org.gatein.mop.spi.content.ContentProvider;
import org.gatein.mop.spi.content.StateContainer;
-import org.gatein.mop.core.api.workspace.content.AbstractCustomization;
-import org.chromattic.api.ChromatticSession;
-import org.chromattic.api.UndeclaredRepositoryException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
@@ -60,70 +55,40 @@
public void setState(StateContainer container, Preferences state)
{
- try
- {
- ChromatticSession session = ((AbstractCustomization)container).session;
- String containerId = session.getId(container);
- Node node = session.getJCRSession().getNodeByUUID(containerId);
+ PortletPreferencesState prefs = (PortletPreferencesState)container.getState();
- //
- PortletPreferencesState prefs;
- if (node.hasNode("mop:state"))
+ //
+ if (prefs != null)
+ {
+ if (state == null)
{
- Node stateNode = node.getNode("mop:state");
- prefs = (PortletPreferencesState)session.findById(Object.class,
stateNode.getUUID());
- if (state == null)
- {
- session.remove(prefs);
- return;
- }
+ container.setState(null);
}
else
{
- if (state == null)
- {
- return;
- }
- else
- {
- Node stateNode = node.addNode("mop:state",
"mop:portletpreferences");
- prefs = (PortletPreferencesState)session.findById(Object.class,
stateNode.getUUID());
- }
+ prefs.setPayload(state);
}
-
- //
- prefs.setPayload(state);
}
- catch (RepositoryException e)
+ else
{
- throw new UndeclaredRepositoryException(e);
+ if (state != null)
+ {
+ prefs = container.create(PortletPreferencesState.class);
+ prefs.setPayload(state);
+ }
}
}
public Preferences getState(StateContainer container)
{
- try
+ PortletPreferencesState prefs = (PortletPreferencesState)container.getState();
+ if (prefs != null)
{
- ChromatticSession session = ((AbstractCustomization)container).session;
- String containerId = session.getId(container);
- Node node = session.getJCRSession().getNodeByUUID(containerId);
-
- //
- PortletPreferencesState prefs;
- if (node.hasNode("mop:state"))
- {
- Node stateNode = node.getNode("mop:state");
- prefs = (PortletPreferencesState)session.findById(Object.class,
stateNode.getUUID());
- return (Preferences)prefs.getPayload();
- }
- else
- {
- return null;
- }
+ return prefs.getPayload();
}
- catch (RepositoryException e)
+ else
{
- throw new UndeclaredRepositoryException(e);
+ return null;
}
}
Modified:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletPreferencesState.java
===================================================================
---
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletPreferencesState.java 2010-02-22
09:19:12 UTC (rev 1795)
+++
components/mop/trunk/core/src/test/java/org/gatein/mop/core/support/content/portlet/PortletPreferencesState.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -20,10 +20,8 @@
import org.chromattic.api.annotations.OneToMany;
import org.chromattic.api.annotations.Create;
-import org.chromattic.api.annotations.OneToOne;
import org.chromattic.api.annotations.PrimaryType;
-import org.chromattic.api.annotations.RelatedMappedBy;
-import org.gatein.mop.core.api.workspace.content.AbstractCustomization;
+import org.gatein.mop.core.api.workspace.content.AbstractCustomizationState;
import java.util.Map;
@@ -32,7 +30,7 @@
* @version $Revision$
*/
@PrimaryType(name = "mop:portletpreferences")
-public abstract class PortletPreferencesState
+public abstract class PortletPreferencesState extends AbstractCustomizationState
{
/** . */
@@ -44,11 +42,7 @@
@Create
public abstract PortletPreferenceState create();
- @OneToOne
- @RelatedMappedBy("mop:state")
- public abstract AbstractCustomization getCustomization();
-
- private void setPayload(Preferences payload)
+ public void setPayload(Preferences payload)
{
this.payload = payload;
@@ -66,13 +60,8 @@
}
}
- public void setPayload(Object payload)
+ public Preferences getPayload()
{
- setPayload((Preferences)payload);
- }
-
- public Object getPayload()
- {
if (payload == null)
{
PreferencesBuilder builder = new PreferencesBuilder();
Modified:
components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/StateContainer.java
===================================================================
---
components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/StateContainer.java 2010-02-22
09:19:12 UTC (rev 1795)
+++
components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/StateContainer.java 2010-02-22
09:42:13 UTC (rev 1796)
@@ -24,4 +24,11 @@
*/
public interface StateContainer
{
+
+ Object getState();
+
+ void setState(Object state);
+
+ <T> T create(Class<T> type);
+
}