[gatein-commits] gatein SVN: r261 - in components/mop/trunk: core/src/main/java/org/gatein/mop/core/api/workspace and 5 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Oct 5 05:48:58 EDT 2009


Author: julien_viet
Date: 2009-10-05 05:48:58 -0400 (Mon, 05 Oct 2009)
New Revision: 261

Added:
   components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/StateContainer.java
Removed:
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationState.java
Modified:
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/ModelImpl.java
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/UIWindowImpl.java
   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/CustomizationContainer.java
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceClone.java
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceCustomization.java
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceSpecialization.java
   components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/portlet/PortletPreferencesState.java
   components/mop/trunk/core/src/main/resources/conf/standalone/nodetypes.xml
   components/mop/trunk/core/src/test/java/org/gatein/mop/core/impl/portlet/PortletContentProvider.java
   components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/ContentProvider.java
Log:
GTNMOP-8 : Allow external plugability of content provider


Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/ModelImpl.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/ModelImpl.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/ModelImpl.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -165,7 +165,8 @@
   }
 
   private void inject(Object o, boolean persistent) {
-    if (o instanceof AbstractCustomization && persistent) {
+    if (o instanceof AbstractCustomization) {
+      ((AbstractCustomization)o).session = session;
       ((AbstractCustomization)o).registry = contentManagers;
     }
     if (o instanceof ContextSpecialization) {

Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/UIWindowImpl.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/UIWindowImpl.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/UIWindowImpl.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -51,14 +51,6 @@
 
   public abstract void setCustomization(WorkspaceCustomization customization);
 
-/*
-  @ManyToOne(type = RelationshipType.PATH)
-  @MappedBy("relatedcustomization")
-  public abstract Customization getRelatedCustomization();
-
-  public abstract void setRelatedCustomization(Customization relatedCustomization);
-*/
-
   @Create
   public abstract WorkspaceClone create();
 
@@ -71,11 +63,6 @@
     if (getCustomization() != null) {
       throw new IllegalStateException("Already customized");
     }
-/*
-    if (getRelatedCustomization() != null) {
-      throw new IllegalStateException("Referencing a customization context");
-    }
-*/
     WorkspaceClone customization = create();
     setCustomization(customization);
     customization.setMimeType(contentType.getMimeType());
@@ -92,10 +79,23 @@
         throw new IllegalStateException("Already customized");
       }
 
-      //
+      // Get parent customization
+      WorkspaceCustomization parentCustomization = (WorkspaceCustomization)customization;
+
+      // Create
       WorkspaceSpecialization specialization = create2();
+
+      // Persist
       setCustomization(specialization);
-      specialization.setCustomization((WorkspaceCustomization)customization);
+
+      // Configuration
+      specialization.setMimeType(parentCustomization.getMimeType());
+      specialization.setContentId(parentCustomization.getContentId());
+
+      // Create relationship
+      specialization.setCustomization(parentCustomization);
+
+      //
       return (Customization<S>)specialization;
     } else {
       throw new IllegalArgumentException("implement customization of "+ customization);

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	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/AbstractCustomization.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -24,11 +24,12 @@
 import org.gatein.mop.api.workspace.WorkspaceCustomizationContext;
 import org.gatein.mop.core.api.content.CustomizationContextComparator;
 import org.gatein.mop.core.api.content.ContentManagerRegistry;
-import org.gatein.mop.core.api.workspace.content.portlet.PortletPreferencesState;
 import org.gatein.mop.spi.content.ContentProvider;
+import org.gatein.mop.spi.content.StateContainer;
 import org.chromattic.api.annotations.OneToOne;
 import org.chromattic.api.annotations.MappedBy;
 import org.chromattic.api.annotations.Create;
+import org.chromattic.api.ChromatticSession;
 
 import java.util.Set;
 import java.util.Collection;
@@ -42,7 +43,7 @@
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
  * @version $Revision$
  */
-public abstract class AbstractCustomization implements Customization<Object> {
+public abstract class AbstractCustomization implements Customization<Object>, StateContainer {
 
   /** . */
   protected static final CustomizationContextComparator comparator;
@@ -59,12 +60,9 @@
   /** . */
   public ContentManagerRegistry registry;
 
-  @OneToOne
-  @MappedBy("state")
-  public abstract CustomizationState getContentState();
+  /** . */
+  public ChromatticSession session;
 
-  public abstract void setContentState(CustomizationState state);
-
   @OneToOne
   @MappedBy("contexttypes")
   abstract ContextTypeContainer getContextTypes();
@@ -75,21 +73,22 @@
   @Create
   abstract ContextSpecialization createContextSpecialization();
 
-  @Create
-  public abstract PortletPreferencesState createPreferenceState();
-
   public abstract CustomizationContext getContext();
 
   public abstract AbstractCustomization getParent();
 
   public Object getVirtualState() {
-    Object childPayload = null;
-    CustomizationState state = getContentState();
-    if (state != null) {
-      childPayload = state.getPayload();
-    }
 
+    ContentType contentType = getType();
+
+    String mimeType = contentType.getMimeType();
+
+    ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
+
     //
+    Object childPayload = contentProvider.getState(this);
+
+    //
     Object parentPayload = null;
     AbstractCustomization parent = getParent();
     if (parent != null) {
@@ -99,9 +98,6 @@
     //
     if (parentPayload != null) {
       if (childPayload != null) {
-        ContentType contentType = getType();
-        String mimeType = contentType.getMimeType();
-        ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
         return contentProvider.combine(Arrays.asList(parentPayload, childPayload));
       } else {
         return parentPayload;
@@ -112,29 +108,17 @@
   }
 
   public Object getState() {
-    CustomizationState state = getContentState();
-    if (state != null) {
-      return state.getPayload();
-    } else {
-      return null;
-    }
+    ContentType contentType = getType();
+    String mimeType = contentType.getMimeType();
+    ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
+    return contentProvider.getState(this);
   }
 
   public void setState(Object state) {
-    if (state == null) {
-      setContentState(null);
-    } else {
-      CustomizationState contentState = getContentState();
-
-      //
-      if (contentState == null) {
-        contentState = createPreferenceState();
-        setContentState(contentState);
-      }
-
-      //
-      contentState.setPayload(state);
-    }
+    ContentType contentType = getType();
+    String mimeType = contentType.getMimeType();
+    ContentProvider contentProvider = registry.providers.get(mimeType).getProvider();
+    contentProvider.setState(this, state);
   }
 
   public Customization<Object> getCustomization(Set<CustomizationContext> contexts) {

Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationContainer.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationContainer.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationContainer.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -66,9 +66,12 @@
 
   public <S> Customization<S> customize(String name, Customization<S> customization) {
     Map<String, WorkspaceCustomization> contents = getCustomizations();
+    WorkspaceCustomization workspaceCustomization = (WorkspaceCustomization)customization;
     WorkspaceSpecialization content = createSpecialization();
     contents.put(name, content);
-    content.setCustomization((WorkspaceCustomization)customization);
+    content.setMimeType(workspaceCustomization.getMimeType());
+    content.setContentId(workspaceCustomization.getContentId());
+    content.setCustomization(workspaceCustomization);
     return (Customization<S>)content;
   }
 

Deleted: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationState.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationState.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/CustomizationState.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -1,31 +0,0 @@
-/**
- * Copyright (C) 2009 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;
-
-/**
- * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
- * @version $Revision$
- */
-public abstract class CustomizationState {
-
-  public abstract Object getPayload();
-
-  public abstract void setPayload(Object payload);
-
-}
\ No newline at end of file

Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceClone.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceClone.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceClone.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -25,9 +25,7 @@
 import org.chromattic.api.annotations.OneToMany;
 import org.chromattic.api.RelationshipType;
 import org.gatein.mop.api.content.CustomizationContext;
-import org.gatein.mop.api.content.ContentType;
 import org.gatein.mop.api.workspace.WorkspaceCustomizationContext;
-import org.gatein.mop.core.api.content.ContentRegistration;
 
 import java.util.Set;
 import java.util.Collections;
@@ -48,16 +46,6 @@
   @Name
   public abstract String getFooName();
 
-  @Property(name = "mimetype")
-  public abstract String getMimeType();
-
-  public abstract void setMimeType(String mimeType);
-
-  @Property(name = "contentid")
-  public abstract String getContentId();
-
-  public abstract void setContentId(String contentId);
-
   @OneToMany(type = RelationshipType.PATH)
   @RelatedMappedBy("customization")
   public abstract Collection<WorkspaceSpecialization> getSpecializations();
@@ -94,13 +82,4 @@
     //
     doDestroy();
   }
-
-  public ContentType<Object> getType() {
-    ContentRegistration registration = registry.providers.get(getMimeType());
-    if (registration != null) {
-      return (ContentType<Object>)registration.getContentType();
-    } else {
-      return null;
-    }
-  }
 }

Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceCustomization.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceCustomization.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceCustomization.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -20,8 +20,11 @@
 
 import org.chromattic.api.annotations.ManyToOne;
 import org.chromattic.api.annotations.Destroy;
+import org.chromattic.api.annotations.Property;
 import org.gatein.mop.api.content.CustomizationContext;
+import org.gatein.mop.api.content.ContentType;
 import org.gatein.mop.core.api.workspace.UIWindowImpl;
+import org.gatein.mop.core.api.content.ContentRegistration;
 
 /**
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
@@ -29,13 +32,23 @@
  */
 public abstract class WorkspaceCustomization extends AbstractCustomization {
 
+  @Property(name = "mimetype")
+  public abstract String getMimeType();
+
+  public abstract void setMimeType(String mimeType);
+
+  @Property(name = "contentid")
+  public abstract String getContentId();
+
+  public abstract void setContentId(String contentId);
+
   @ManyToOne
   public abstract Object getOwner();
 
   @Destroy
   public abstract void doDestroy();
 
-  public CustomizationContext getContext() {
+  public final CustomizationContext getContext() {
     Object owner = getOwner();
     if (owner instanceof CustomizationContainer) {
       return ((CustomizationContainer)owner).getOwner();
@@ -45,4 +58,13 @@
       throw new AssertionError();
     }
   }
+
+  public final ContentType<Object> getType() {
+    ContentRegistration registration = registry.providers.get(getMimeType());
+    if (registration != null) {
+      return (ContentType<Object>)registration.getContentType();
+    } else {
+      return null;
+    }
+  }
 }

Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceSpecialization.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceSpecialization.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/WorkspaceSpecialization.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -22,7 +22,6 @@
 import org.chromattic.api.annotations.ManyToOne;
 import org.chromattic.api.annotations.MappedBy;
 import org.chromattic.api.RelationshipType;
-import org.gatein.mop.api.content.ContentType;
 
 /**
  * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
@@ -41,24 +40,6 @@
     doDestroy();
   }
 
-  public String getContentId() {
-    AbstractCustomization parent = getParent();
-    if (parent == null) {
-      return null;
-    } else {
-      return parent.getContentId();
-    }
-  }
-
-  public ContentType<Object> getType() {
-    AbstractCustomization parent = getParent();
-    if (parent == null) {
-      return null;
-    } else {
-      return parent.getType();
-    }
-  }
-
   public AbstractCustomization getParent() {
     return getCustomization();
   }

Modified: components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/portlet/PortletPreferencesState.java
===================================================================
--- components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/portlet/PortletPreferencesState.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/content/portlet/PortletPreferencesState.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -21,10 +21,12 @@
 import org.chromattic.api.annotations.NodeMapping;
 import org.chromattic.api.annotations.OneToMany;
 import org.chromattic.api.annotations.Create;
-import org.gatein.mop.core.api.workspace.content.CustomizationState;
+import org.chromattic.api.annotations.OneToOne;
+import org.chromattic.api.annotations.RelatedMappedBy;
 import org.gatein.mop.core.content.portlet.Preferences;
 import org.gatein.mop.core.content.portlet.Preference;
 import org.gatein.mop.core.content.portlet.PreferencesBuilder;
+import org.gatein.mop.core.api.workspace.content.AbstractCustomization;
 
 import java.util.Map;
 
@@ -33,7 +35,7 @@
  * @version $Revision$
  */
 @NodeMapping(name = "mop:portletpreferences")
-public abstract class PortletPreferencesState extends CustomizationState {
+public abstract class PortletPreferencesState {
 
   /** . */
   private Preferences payload;
@@ -44,6 +46,10 @@
   @Create
   public abstract PortletPreferenceState create();
 
+  @OneToOne
+  @RelatedMappedBy("state")
+  public abstract AbstractCustomization getCustomization();
+
   private void setPayload(Preferences payload) {
 
     this.payload = payload;

Modified: components/mop/trunk/core/src/main/resources/conf/standalone/nodetypes.xml
===================================================================
--- components/mop/trunk/core/src/main/resources/conf/standalone/nodetypes.xml	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/main/resources/conf/standalone/nodetypes.xml	2009-10-05 09:48:58 UTC (rev 261)
@@ -113,12 +113,6 @@
     <supertypes>
       <supertype>mop:customization</supertype>
     </supertypes>
-  </nodeType>
-
-  <nodeType name="mop:workspaceclone" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>mop:workspacecustomization</supertype>
-    </supertypes>
     <propertyDefinitions>
       <propertyDefinition name="contentid" requiredType="String" autoCreated="false" mandatory="true" onParentVersion="COPY" protected="false" multiple="false">
         <valueConstraints/>
@@ -129,6 +123,12 @@
     </propertyDefinitions>
   </nodeType>
 
+  <nodeType name="mop:workspaceclone" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
+    <supertypes>
+      <supertype>mop:workspacecustomization</supertype>
+    </supertypes>
+  </nodeType>
+
   <nodeType name="mop:workspacespecialization" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
     <supertypes>
       <supertype>mop:workspacecustomization</supertype>

Modified: components/mop/trunk/core/src/test/java/org/gatein/mop/core/impl/portlet/PortletContentProvider.java
===================================================================
--- components/mop/trunk/core/src/test/java/org/gatein/mop/core/impl/portlet/PortletContentProvider.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/core/src/test/java/org/gatein/mop/core/impl/portlet/PortletContentProvider.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -20,9 +20,16 @@
 
 import org.gatein.mop.spi.content.ContentProvider;
 import org.gatein.mop.spi.content.GetState;
+import org.gatein.mop.spi.content.StateContainer;
 import org.gatein.mop.core.content.portlet.Preference;
 import org.gatein.mop.core.content.portlet.Preferences;
+import org.gatein.mop.core.api.workspace.content.AbstractCustomization;
+import org.gatein.mop.core.api.workspace.content.portlet.PortletPreferencesState;
+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;
@@ -69,4 +76,61 @@
     //
     return new Preferences(entries);
   }
+
+  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;
+      if (node.hasNode("state")) {
+        Node stateNode = node.getNode("state");
+        prefs = (PortletPreferencesState)session.findById(Object.class, stateNode.getUUID());
+        if (state == null) {
+          session.remove(prefs);
+          return;
+        }
+      } else {
+        if (state == null) {
+          return;
+        } else {
+          Node stateNode = node.addNode("state", "mop:portletpreferences");
+          prefs = (PortletPreferencesState)session.findById(Object.class, stateNode.getUUID());
+        }
+      }
+
+      //
+      prefs.setPayload(state);
+    }
+    catch (RepositoryException e) {
+      throw new UndeclaredRepositoryException(e);
+    }
+  }
+
+  public Preferences getState(StateContainer container) {
+    try {
+      ChromatticSession session = ((AbstractCustomization)container).session;
+      String containerId = session.getId(container);
+      Node node = session.getJCRSession().getNodeByUUID(containerId);
+
+      //
+      PortletPreferencesState prefs;
+      if (node.hasNode("state")) {
+        Node stateNode = node.getNode("state");
+        prefs = (PortletPreferencesState)session.findById(Object.class, stateNode.getUUID());
+        return (Preferences)prefs.getPayload();
+      } else {
+        return null;
+      }
+    }
+    catch (RepositoryException e) {
+      throw new UndeclaredRepositoryException(e);
+    }
+  }
+
+  public Class<Preferences> getStateType() {
+    return Preferences.class;
+  }
 }

Modified: components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/ContentProvider.java
===================================================================
--- components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/ContentProvider.java	2009-10-05 09:48:06 UTC (rev 260)
+++ components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/ContentProvider.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -44,4 +44,27 @@
    */
   S combine(List<S> states);
 
+  /**
+   * Update the state container with the provided state.
+   * 
+   * @param container the state container
+   * @param state the state
+   */
+  void setState(StateContainer container, S state);
+
+  /**
+   * Returns the state attached to the provided container.
+   *
+   * @param container the container
+   * @return the state
+   */
+  S getState(StateContainer container);
+
+  /**
+   * Returns the class the represents the state as seen by the framework client.
+   *
+   * @return the external state class
+   */
+  Class<S> getStateType();
+
 }

Added: 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	                        (rev 0)
+++ components/mop/trunk/spi/src/main/java/org/gatein/mop/spi/content/StateContainer.java	2009-10-05 09:48:58 UTC (rev 261)
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2003-2007 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see<http://www.gnu.org/licenses/>.
+ */
+package org.gatein.mop.spi.content;
+
+/**
+ * @author <a href="mailto:julien.viet at exoplatform.com">Julien Viet</a>
+ * @version $Revision$
+ */
+public interface StateContainer {
+}



More information about the gatein-commits mailing list