Author: julien_viet
Date: 2009-09-13 15:05:47 -0400 (Sun, 13 Sep 2009)
New Revision: 184
Added:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/QueryTestCase.java
Modified:
components/mop/trunk/api/src/main/java/org/gatein/mop/api/Model.java
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/ObjectType.java
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/Workspace.java
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/WorkspaceImpl.java
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/WorkspaceTestCase.java
Log:
added proper unit test for querying
Modified: components/mop/trunk/api/src/main/java/org/gatein/mop/api/Model.java
===================================================================
--- components/mop/trunk/api/src/main/java/org/gatein/mop/api/Model.java 2009-09-13
18:24:06 UTC (rev 183)
+++ components/mop/trunk/api/src/main/java/org/gatein/mop/api/Model.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -19,9 +19,13 @@
package org.gatein.mop.api;
import org.gatein.mop.api.workspace.Workspace;
+import org.gatein.mop.api.workspace.WorkspaceObject;
+import org.gatein.mop.api.workspace.ObjectType;
+import java.util.Iterator;
+
/**
- * Provides access to the model.
+ * Provides access to the model.
*
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
@@ -35,4 +39,24 @@
*/
Workspace getWorkspace();
+ /**
+ * Returns a specified object or null if it cannot be found.
+ *
+ * @param type the object type
+ * @param id the object id
+ * @param <O> the object type parameter
+ * @return the object
+ */
+ <O extends WorkspaceObject> O findObjectById(ObjectType<O> type, String
id);
+
+ <O extends WorkspaceObject> O findObjectByPath(ObjectType<? extends O>
type, String path);
+
+ <O extends WorkspaceObject> Iterator<O> findObject(ObjectType<O>
type, String statement);
+
+ String pathOf(WorkspaceObject o);
+
+ void save();
+
+ void close();
+
}
Modified:
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/ObjectType.java
===================================================================
---
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/ObjectType.java 2009-09-13
18:24:06 UTC (rev 183)
+++
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/ObjectType.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -61,15 +61,6 @@
public static final ObjectType<Page> PAGE = new
ObjectType<Page>(Page.class);
/** . */
- public static final ObjectType<Page> TEMPLATE = new
ObjectType<Page>(Page.class, PAGE);
-
- /** . */
- public static final ObjectType<Page> CONFIGURATION = new
ObjectType<Page>(Page.class, PAGE);
-
- /** . */
- public static final ObjectType<Page> CONTENT = new
ObjectType<Page>(Page.class, PAGE);
-
- /** . */
public static final ObjectType<Navigation> NAVIGATION = new
ObjectType<Navigation>(Navigation.class);
/** . */
Modified:
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/Workspace.java
===================================================================
---
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/Workspace.java 2009-09-13
18:24:06 UTC (rev 183)
+++
components/mop/trunk/api/src/main/java/org/gatein/mop/api/workspace/Workspace.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -68,13 +68,4 @@
*/
<S extends Site> S addSite(ObjectType<S> siteType, String name);
- /**
- * Returns a specified object or null if it cannot be found.
- *
- * @param type the object type
- * @param id the object id
- * @param <O> the object type parameter
- * @return the object
- */
- <O extends WorkspaceObject> O getObject(ObjectType<O> type, String id);
}
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-09-13
18:24:06 UTC (rev 183)
+++
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/ModelImpl.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -22,6 +22,20 @@
import org.gatein.mop.core.api.content.CustomizationContextProviderRegistry;
import org.gatein.mop.core.api.content.CustomizationContextResolver;
import org.gatein.mop.core.api.workspace.WorkspaceImpl;
+import org.gatein.mop.core.api.workspace.SiteImpl;
+import org.gatein.mop.core.api.workspace.PortalSite;
+import org.gatein.mop.core.api.workspace.GroupSite;
+import org.gatein.mop.core.api.workspace.UserSite;
+import org.gatein.mop.core.api.workspace.UIContainerImpl;
+import org.gatein.mop.core.api.workspace.UIWindowImpl;
+import org.gatein.mop.core.api.workspace.UIBodyImpl;
+import org.gatein.mop.core.api.workspace.PageImpl;
+import org.gatein.mop.core.api.workspace.NavigationImpl;
+import org.gatein.mop.core.api.workspace.WorkspaceObjectImpl;
+import org.gatein.mop.core.api.workspace.SharedSite;
+import org.gatein.mop.core.api.workspace.UIComponentImpl;
+import org.gatein.mop.core.api.workspace.PageLinkImpl;
+import org.gatein.mop.core.api.workspace.URLLinkImpl;
import org.gatein.mop.api.workspace.WorkspaceCustomizationContext;
import org.gatein.mop.core.api.workspace.content.ContextSpecialization;
import org.gatein.mop.core.api.workspace.content.AbstractCustomization;
@@ -34,6 +48,8 @@
import org.chromattic.api.event.LifeCycleListener;
import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
@@ -42,6 +58,29 @@
public class ModelImpl implements Model {
/** . */
+ private static final Map<ObjectType<?>, Class<? extends
WorkspaceObjectImpl>> typeToClassImpl;
+
+ static {
+ Map<ObjectType<?>, Class<? extends WorkspaceObjectImpl>> tmp = new
HashMap<ObjectType<?>, Class<? extends WorkspaceObjectImpl>>();
+ tmp.put(ObjectType.ANY, WorkspaceObjectImpl.class);
+ tmp.put(ObjectType.WORKSPACE, WorkspaceImpl.class);
+ tmp.put(ObjectType.SITE, SiteImpl.class);
+ tmp.put(ObjectType.PORTAL_SITE, PortalSite.class);
+ tmp.put(ObjectType.GROUP_SITE, GroupSite.class);
+ tmp.put(ObjectType.USER_SITE, UserSite.class);
+ tmp.put(ObjectType.SHARED_SITE, SharedSite.class);
+ tmp.put(ObjectType.PAGE, PageImpl.class);
+ tmp.put(ObjectType.NAVIGATION, NavigationImpl.class);
+ tmp.put(ObjectType.COMPONENT, UIComponentImpl.class);
+ tmp.put(ObjectType.BODY, UIBodyImpl.class);
+ tmp.put(ObjectType.CONTAINER, UIContainerImpl.class);
+ tmp.put(ObjectType.WINDOW, UIWindowImpl.class);
+ tmp.put(ObjectType.PAGE_LINK, PageLinkImpl.class);
+ tmp.put(ObjectType.URL_LINK, URLLinkImpl.class);
+ typeToClassImpl = tmp;
+ }
+
+ /** . */
private final ChromatticSession session;
/** . */
@@ -57,7 +96,7 @@
private final CustomizationContextResolver customizationContextResolver = new
CustomizationContextResolver() {
public CustomizationContext resolve(String contextType, String contextId) {
if (WorkspaceCustomizationContext.TYPE.equals(contextType)) {
- return getWorkspace().getObject(ObjectType.WINDOW, contextId);
+ return findObjectById(ObjectType.WINDOW, contextId);
} else {
return customizationContextResolvers.resolve(contextType, contextId);
}
@@ -112,14 +151,15 @@
};
public <O extends WorkspaceObject> Iterator<O>
findObject(ObjectType<O> type, String statement) {
- return
session.createQueryBuilder().from(type.getJavaType()).<O>where(statement).get().iterator();
+ Class<? extends WorkspaceObjectImpl> impl = typeToClassImpl.get(type);
+ return
session.createQueryBuilder().from(impl).<O>where(statement).get().iterator();
}
- public String getPath(WorkspaceObject o) {
+ public String pathOf(WorkspaceObject o) {
return session.getPath(o);
}
- public <O extends WorkspaceObject> O getObject(ObjectType<? extends O>
type, String path) {
+ public <O extends WorkspaceObject> O findObjectByPath(ObjectType<? extends
O> type, String path) {
Class<? extends O> t = type.getJavaType();
return session.findByPath(t, path);
}
@@ -132,4 +172,14 @@
((ContextSpecialization)o).setCustomizationContextResolver(customizationContextResolver);
}
}
+
+ public <O extends WorkspaceObject> O findObjectById(ObjectType<O> type,
String id) {
+ Class<? extends WorkspaceObjectImpl> impl = typeToClassImpl.get(type);
+ WorkspaceObjectImpl object = session.findById(impl, id);
+ if (object != null) {
+ return type.cast(object);
+ } else {
+ return null;
+ }
+ }
}
Modified:
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/WorkspaceImpl.java
===================================================================
---
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/WorkspaceImpl.java 2009-09-13
18:24:06 UTC (rev 183)
+++
components/mop/trunk/core/src/main/java/org/gatein/mop/core/api/workspace/WorkspaceImpl.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -70,9 +70,6 @@
// CustomizationContextResolver implementation
***********************************************************************
@FindById
- public abstract WorkspaceObject getObject(String objectId);
-
- @FindById
public abstract CustomizationContext resolveContext(String contextId);
// WorkspaceCustomizationContext implementation
**********************************************************************
@@ -137,15 +134,6 @@
return sites.addSite(name);
}
- public <O extends WorkspaceObject> O getObject(ObjectType<O> type, String
id) {
- WorkspaceObject object = getObject(id);
- if (object != null) {
- return type.cast(object);
- } else {
- return null;
- }
- }
-
public Site getSharedSite() {
return getSite(ObjectType.SHARED_SITE, "default");
}
Added:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/QueryTestCase.java
===================================================================
---
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/QueryTestCase.java
(rev 0)
+++
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/QueryTestCase.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -0,0 +1,43 @@
+/*
+ * 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.core.api.workspace;
+
+import org.gatein.mop.core.api.AbstractPOMTestCase;
+import org.gatein.mop.core.api.ModelImpl;
+import org.gatein.mop.api.workspace.Workspace;
+import org.gatein.mop.api.workspace.ObjectType;
+import org.gatein.mop.api.workspace.Site;
+
+import java.util.Iterator;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class QueryTestCase extends AbstractPOMTestCase {
+
+ public void testFoo() {
+ ModelImpl model = pomService.getModel();
+ Workspace workspace = model.getWorkspace();
+ Site site = workspace.addSite(ObjectType.PORTAL_SITE, "foo");
+ model.save();
+ Iterator<Site> sites = model.findObject(ObjectType.PORTAL_SITE,
"jcr:path='" + model.pathOf(site) + "'");
+ assertTrue(sites.hasNext());
+ assertSame(site, sites.next());
+ assertFalse(sites.hasNext());
+ }
+}
Modified:
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/WorkspaceTestCase.java
===================================================================
---
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/WorkspaceTestCase.java 2009-09-13
18:24:06 UTC (rev 183)
+++
components/mop/trunk/core/src/test/java/org/gatein/mop/core/api/workspace/WorkspaceTestCase.java 2009-09-13
19:05:47 UTC (rev 184)
@@ -40,19 +40,21 @@
public class WorkspaceTestCase extends AbstractPOMTestCase {
public void testGetSite() {
- Workspace workspace = pomService.getModel().getWorkspace();
+ ModelImpl model = pomService.getModel();
+ Workspace workspace = model.getWorkspace();
Site site = workspace.addSite(ObjectType.GROUP_SITE, "site");
assertNotNull(site);
- Site s2 = workspace.getObject(ObjectType.SITE, site.getObjectId());
+ Site s2 = model.findObjectById(ObjectType.SITE, site.getObjectId());
assertEquals(site, s2);
assertEquals(workspace, site.getWorkspace());
}
public void testGetPortal() {
- Workspace workspace = pomService.getModel().getWorkspace();
+ ModelImpl model = pomService.getModel();
+ Workspace workspace = model.getWorkspace();
Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal");
assertNotNull(portal);
- Site s2 = workspace.getObject(ObjectType.SITE, portal.getObjectId());
+ Site s2 = model.findObjectById(ObjectType.SITE, portal.getObjectId());
assertEquals(portal, s2);
}