[Registry-dev] svn commit r14788 - in trunk/registry/modules:
core/src/main/java/org/wso2/registry
core/src/main/java/org/wso2/registry/app
core/src/main/java/org/wso2/registry/config
core/src/main/java/org/wso2/registry/jdbc
core/src/main/java/org/wso2/registry/lifecycle
core/src/main/java/org/wso2/registry/secure
core/src/test/java/org/wso2/registry/jdbc
webapps/src/main/java/org/wso2/registry/web/actions
webapps/src/main/webapp/admin
svn at wso2.org
svn at wso2.org
Thu Mar 13 21:40:53 PDT 2008
Author: glen
Date: Thu Mar 13 21:40:45 2008
New Revision: 14788
Log:
* Add ability for a Lifecycle to tell us, for a given RequestContext, the valid available actions for the resource in its current state
* Make available actions accessible from Registry interface (no remote impl yet!)
* Crude UI for available actions - but since you can't use the UI to associate lifecycles yet, you can't see it... unless you uncomment the code in ResourceDetailsAction.java:234-236. This clearly needs some TLC from the UI folks! Also note that POSTing to the lifecycle URLs (i.e. http://registry/resource;lifecycle[myCycle]:action) isn't implemented yet for transitions.
* Little code cleanup
Modified:
trunk/registry/modules/core/src/main/java/org/wso2/registry/Registry.java
trunk/registry/modules/core/src/main/java/org/wso2/registry/app/RemoteRegistry.java
trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryContext.java
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java
trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/DefaultLifecycle.java
trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/Lifecycle.java
trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/SecureRegistry.java
trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/SimpleLifecycleTest.java
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/ResourceDetailsAction.java
trunk/registry/modules/webapps/src/main/webapp/admin/registry-resources.jsp
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/Registry.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/Registry.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/Registry.java Thu Mar 13 21:40:45 2008
@@ -278,4 +278,7 @@
*/
void lifeCycleTransition(String resourcePath, String lifecycleName, String action)
throws RegistryException;
+
+ String[] getLifecycleActions(String resourcePath, String lifecycleName)
+ throws RegistryException;
}
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/app/RemoteRegistry.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/app/RemoteRegistry.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/app/RemoteRegistry.java Thu Mar 13 21:40:45 2008
@@ -847,4 +847,9 @@
public void lifeCycleTransition(String resourcePath, String lifecycleName, String action) throws RegistryException {
throw new UnsupportedOperationException();
}
+
+ public String[] getLifecycleActions(String resourcePath, String lifecycleName)
+ throws RegistryException {
+ throw new UnsupportedOperationException();
+ }
}
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryContext.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryContext.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryContext.java Thu Mar 13 21:40:45 2008
@@ -19,10 +19,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.registry.RegistryException;
-import org.wso2.registry.lifecycle.Lifecycle;
import org.wso2.registry.i18n.Messages;
import org.wso2.registry.jdbc.hsql.DBUtils;
import org.wso2.registry.jdbc.utils.RegistryDataSource;
+import org.wso2.registry.lifecycle.Lifecycle;
import org.wso2.registry.secure.HSQLDBInitializer;
import javax.sql.DataSource;
@@ -45,7 +45,7 @@
private List urlHandlers = new ArrayList();
private List queryProcessors = new ArrayList();
private Map lifecycles = new HashMap();
- private DataSource dataSource ;
+ private DataSource dataSource;
public RegistryContext() {
}
@@ -144,11 +144,11 @@
}
public void addLifecycle(Lifecycle lifecycle) {
- lifecycles.put(lifecycle.getName() ,lifecycle);
+ lifecycles.put(lifecycle.getName(), lifecycle);
}
- public Lifecycle getLifecycle(String name){
- return (Lifecycle) lifecycles.get(name);
+ public Lifecycle getLifecycle(String name) {
+ return (Lifecycle)lifecycles.get(name);
}
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java Thu Mar 13 21:40:45 2008
@@ -1366,33 +1366,42 @@
put(resource.getPath(), resource);
}
- private Map <String, Lifecycle> lifecycles = new HashMap<String,Lifecycle>();
+ private Map<String, Lifecycle> lifecycles = new HashMap<String, Lifecycle>();
+
private Lifecycle getLifecycle(String name) {
return lifecycles.get(name);
}
+
public void addLifecycle(String name, Lifecycle lifecycle) {
lifecycles.put(name, lifecycle);
}
- public void lifeCycleTransition(String resourcePath, String lifecycleName, String action)
+ public Lifecycle getResourceLifecycle(Resource resource, String lifecycleName)
throws RegistryException {
- Resource resource = get(resourcePath);
Lifecycle lifecycle = getLifecycle(lifecycleName);
if (lifecycle == null) {
throw new RegistryException("Lifecycle '" + lifecycleName + "' is not registered!");
}
- RequestContext context = new RequestContext(this);
- context.setResource(resource);
-
// Confirm this lifecycle is associated with this Resource
List<String> resourceLifecycles = resource.getLifecycles();
if (resourceLifecycles == null || !resourceLifecycles.contains(lifecycleName)) {
- throw new RegistryException("Resource at '" + resourcePath +
+ throw new RegistryException("Resource at '" + resource.getPath() +
"' not associated with lifecycle '" + lifecycleName + "'");
}
+ return lifecycle;
+ }
+
+ public void lifeCycleTransition(String resourcePath, String lifecycleName, String action)
+ throws RegistryException {
+ Resource resource = get(resourcePath);
+
+ Lifecycle lifecycle = getResourceLifecycle(resource, lifecycleName);
+ RequestContext context = new RequestContext(this);
+ context.setResource(resource);
+
// List lifeCycleNames = resource.getPropertyValues(Lifecycle.AVAILABLE_LIFE_CYCLES);
// if (lifeCycleNames == null) {
// throw new RegistryException("No lifecycle are associated with the resource");
@@ -1401,4 +1410,14 @@
lifecycle.transition(context, action);
put(resourcePath, resource);
}
+
+ public String[] getLifecycleActions(String resourcePath, String lifecycleName)
+ throws RegistryException {
+ Resource resource = get(resourcePath);
+ Lifecycle lifecycle = getResourceLifecycle(resource, lifecycleName);
+
+ RequestContext context = new RequestContext(this);
+ context.setResource(resource);
+ return lifecycle.getAvailableActions(context);
+ }
}
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/DefaultLifecycle.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/DefaultLifecycle.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/DefaultLifecycle.java Thu Mar 13 21:40:45 2008
@@ -24,6 +24,10 @@
import org.wso2.registry.jdbc.handlers.RequestContext;
import org.wso2.registry.users.UserRealm;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
public class DefaultLifecycle extends Lifecycle {
public static final String PHASE_CREATED = "created";
@@ -109,4 +113,12 @@
// TODO: So which resource gets the new state property??
}
+
+ private static List<String> promote = new ArrayList<String>();
+ static {
+ promote.add(ACTION);
+ }
+ public String [] getAvailableActions(RequestContext context) {
+ return (String [])promote.toArray();
+ }
}
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/Lifecycle.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/Lifecycle.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/lifecycle/Lifecycle.java Thu Mar 13 21:40:45 2008
@@ -5,6 +5,8 @@
import org.wso2.registry.RegistryException;
import org.wso2.registry.jdbc.handlers.RequestContext;
+import java.util.List;
+
public abstract class Lifecycle {
public static final String AVAILABLE_LIFE_CYCLES = "Lifecycles";
@@ -14,7 +16,6 @@
return name;
}
-
public void setName(String name) {
this.name = name;
}
@@ -40,4 +41,13 @@
* If the condition is not met or some thing is wrong
*/
public abstract void transition(RequestContext context, String action) throws RegistryException;
+
+ /**
+ * Get a list of available actions for the resource in the RequestContext, taking into account
+ * current state, user, etc.
+ *
+ * @param context the RequestContext containing info about the Resource, Registry, User, etc.
+ * @return a String[] of the names of valid actions for this lifecycle on the specified resource
+ */
+ public abstract String [] getAvailableActions(RequestContext context);
}
Modified: trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/SecureRegistry.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/SecureRegistry.java (original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/SecureRegistry.java Thu Mar 13 21:40:45 2008
@@ -762,4 +762,9 @@
public void lifeCycleTransition(String resourcePath, String lifecycleName, String action) throws RegistryException {
throw new UnsupportedOperationException();
}
+
+ public String[] getLifecycleActions(String resourcePath, String lifecycleName)
+ throws RegistryException {
+ return registry.getLifecycleActions(resourcePath, lifecycleName);
+ }
}
Modified: trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/SimpleLifecycleTest.java
==============================================================================
--- trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/SimpleLifecycleTest.java (original)
+++ trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/SimpleLifecycleTest.java Thu Mar 13 21:40:45 2008
@@ -52,6 +52,15 @@
r.setProperty(STATE_PROP, FINAL);
}
+
+ static String [] actions = new String [] { ACTION };
+
+ public String [] getAvailableActions(RequestContext context) {
+ Resource r = context.getResource();
+ String state = r.getProperty(STATE_PROP);
+ if (INIT.equals(state)) return actions;
+ return null;
+ }
}
public void testSimpleLifecycle() throws Exception {
@@ -74,6 +83,11 @@
assertNotNull(propValue);
assertEquals("Wrong initial state!", SimpleLifecycle.INIT, propValue);
+ String [] actions = registry.getLifecycleActions(RESOURCE, LIFECYCLE);
+ assertNotNull("No available actions", actions);
+ assertEquals("Wrong # of available actions", 1, actions.length);
+ assertEquals("Wrong available action", SimpleLifecycle.ACTION, actions[0]);
+
registry.lifeCycleTransition(RESOURCE, LIFECYCLE, SimpleLifecycle.ACTION);
resource = registry.get(RESOURCE);
Modified: trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/ResourceDetailsAction.java
==============================================================================
--- trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/ResourceDetailsAction.java (original)
+++ trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/actions/ResourceDetailsAction.java Thu Mar 13 21:40:45 2008
@@ -68,6 +68,8 @@
private List navigatablePaths = new ArrayList();
+ private Map<String,String[]> availableActions = new HashMap<String,String[]>();
+
private String parentPath;
/**
@@ -220,6 +222,18 @@
this.mediaType = resource.getMediaType();
this.averageRating = registry.getAverageRating(resource.getPath());
this.properties = resource.getProperties();
+ List<String> lifecycles = resource.getLifecycles();
+ if (lifecycles != null) {
+ for (String lifecycle : lifecycles) {
+ String [] actions = registry.getLifecycleActions(path, lifecycle);
+ if (actions == null) continue;
+ availableActions.put(lifecycle, actions);
+ }
+ }
+ // uncomment for testing lifecycle UI
+ /* else {
+ availableActions.put("dummyLifecycle", new String [] { "firstAction", "2ndAction"});
+ } */
Tag[] t = registry.getTags(resource.getPath());
tags.addAll(Arrays.asList(t));
@@ -712,4 +726,8 @@
public void setPermalink(String permalink) {
this.permalink = permalink;
}
+
+ public Map<String,String[]> getAvailableActions() {
+ return availableActions;
+ }
}
Modified: trunk/registry/modules/webapps/src/main/webapp/admin/registry-resources.jsp
==============================================================================
--- trunk/registry/modules/webapps/src/main/webapp/admin/registry-resources.jsp (original)
+++ trunk/registry/modules/webapps/src/main/webapp/admin/registry-resources.jsp Thu Mar 13 21:40:45 2008
@@ -10,6 +10,7 @@
<%@ page import="java.util.List" %>
<%@ page import="java.util.Properties" %>
<%@ page import="org.wso2.registry.web.utils.CommonUtil" %>
+<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
@@ -663,6 +664,67 @@
<!-- END comment listing box -->
</div>
+ <div class="box1-head">
+ <table cellspacing="0" cellpadding="0" border="0" style="width:100%">
+ <tr>
+
+ <td valign="top"><h2 class="sub-headding-comments">Lifecycles</h2></td>
+ <td align="right" valign="top">
+ <table cellpadding="0" cellspacing="0" border="0" class="toolBarTable">
+ <tr>
+ <td>
+ <a href="/wso2registry/atom<%=details.getPath()%>;comments" target="_blank" title="Subscribe to this feed"><img border="0" src="/wso2registry/admin/images/icon-feed-small.gif" /></a>
+ </td>
+ <td>
+ <% if (details.isLoggedIn() && !details.isVersionView()) { %><a href="#" onclick="showHideCommon('add-comment-div');expandIfNot('comments');"><img src="/wso2registry/admin/images/universal-add.gif" border="0" valign="top" title="Add New Comment" /></a><% } %>
+ </td>
+ <td style="padding-top:3px;">
+ <a href="#" onclick="showHideCommon('lifecycleIconExpanded');showHideCommon('lifecycleIconMinimized');showHideCommon('lifecycleExpanded');showHideCommon('lifecycleMinimized');">
+ <img src="/wso2registry/admin/images/icon-expanded.gif" border="0" align="top" id="lifecycleIconExpanded" />
+ <img src="/wso2registry/admin/images/icon-minimized.gif" border="0" align="top" id="lifecycleIconMinimized" style="display:none;" />
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+
+ </tr>
+ </table>
+ </div>
+ <div class="box2-mid" id="lifecycleMinimized" style="display:none;">
+ </div>
+
+ <div class="box2-mid" id="lifecycleExpanded">
+ <!-- START comments listing box -->
+ <div id="lifecycleList">
+ <%
+ Map<String,String[]> availableActions = details.getAvailableActions();
+ Iterator<String> iLifecycles = availableActions.keySet().iterator();
+ while (iLifecycles.hasNext()) {
+ String lifecycle = iLifecycles.next();
+ %>
+ <div class="lifecycle">
+ <h3><%=lifecycle%></h3>
+ <%
+ String [] actions = availableActions.get(lifecycle);
+ for (String action : actions) {
+ String actionURL = "/wso2registry" + details.getPath() +
+ ";lifecycle[" + lifecycle + "]:" + action;
+ %>
+ <form action="<%=actionURL%>" method="POST">
+ <input type="submit" name="<%=action%>">
+ </form>
+ <%
+ }
+ %>
+ </div>
+
+ <% } %>
+ </div>
+
+ <!-- END comment listing box -->
+
+ </div>
</td>
</tr>
More information about the Registry-dev
mailing list