summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-06-23 19:50:06 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-06-23 20:48:16 +0530
commite804392391cededbed09208e00eb0ab9312c4b6d (patch)
tree775abfba030b020657a2dd88e6fa24465f515d3a /src
parent356b3102e5aa24ab1eaae6d1460401be4d546152 (diff)
REST API Enhancements
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java37
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java9
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java2
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java26
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java46
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java100
6 files changed, 128 insertions, 92 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
index e055a2dd..f35c3e36 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
@@ -18,13 +18,17 @@
*******************************************************************************/
package com.gluster.storage.management.client;
+import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
+import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS;
+
+import java.util.List;
+
import javax.ws.rs.core.MultivaluedMap;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
-import com.gluster.storage.management.core.response.StringListResponse;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS;
+import com.gluster.storage.management.core.response.ServerNameListResponse;
import com.sun.jersey.core.util.MultivaluedMapImpl;
public class DiscoveredServersClient extends AbstractClient {
@@ -43,38 +47,33 @@ public class DiscoveredServersClient extends AbstractClient {
}
@SuppressWarnings("rawtypes")
- private Object getDiscoveredServers(Boolean getDetails, Class responseClass) {
+ private Object getDiscoveredServers(Boolean details, Class responseClass) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
- queryParams.putSingle("details", getDetails.toString());
+ queryParams.putSingle(QUERY_PARAM_DETAILS, details.toString());
return fetchResource(queryParams, responseClass);
}
- public StringListResponse getDiscoveredServerNames() {
-
- return (StringListResponse) getDiscoveredServers(Boolean.FALSE, StringListResponse.class);
+ public List<String> getDiscoveredServerNames() {
+ return ((ServerNameListResponse) getDiscoveredServers(Boolean.FALSE, ServerNameListResponse.class))
+ .getServerNames();
}
- public ServerListResponse getDiscoveredServerDetails() {
- return (ServerListResponse) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class);
+ public List<Server> getDiscoveredServerDetails() {
+ return ((ServerListResponse) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class)).getServers();
}
- @SuppressWarnings("unchecked")
public Server getServer(String serverName) {
- GenericResponse<Server> response = (GenericResponse<Server>) fetchSubResource(serverName, GenericResponse.class);
- return response.getData();
+ return (Server) fetchSubResource(serverName, Server.class);
}
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
DiscoveredServersClient serverResource = new DiscoveredServersClient(usersClient.getSecurityToken());
- StringListResponse discoveredServerNames = serverResource.getDiscoveredServerNames();
- System.out.println(discoveredServerNames.getData());
- ServerListResponse discoveredServers = serverResource.getDiscoveredServerDetails();
- System.out.println(discoveredServers.getData());
-
- // Server serverDetails = ServerResource.getServer("localhost");
- // System.out.println(serverDetails.getName());
+ List<String> discoveredServerNames = serverResource.getDiscoveredServerNames();
+ System.out.println(discoveredServerNames);
+ List<Server> discoveredServers = serverResource.getDiscoveredServerDetails();
+ System.out.println(discoveredServers);
}
}
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index 3c5aedf5..695fae19 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -105,14 +105,7 @@ public class GlusterDataModelManager {
}
private void initializeAutoDiscoveredServers(Cluster cluster) {
- ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(securityToken)
- .getDiscoveredServerDetails();
- Status status = discoveredServerListResponse.getStatus();
- if (!status.isSuccess() && !status.isPartSuccess()) {
- // TODO: Find a way to show warning in case of part success
- throw new GlusterRuntimeException(discoveredServerListResponse.getStatus().getMessage());
- }
- cluster.setAutoDiscoveredServers(discoveredServerListResponse.getData());
+ cluster.setAutoDiscoveredServers(new DiscoveredServersClient(securityToken).getDiscoveredServerDetails());
}
private void initializeVolumes(Cluster cluster) {
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
index a2d222a8..b3dc30c2 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
@@ -56,7 +56,6 @@ public class RESTConstants {
public static final String FORM_PARAM_ACCESS_PROTOCOLS = "accessProtocols";
public static final String FORM_PARAM_VOLUME_OPTIONS = "options";
-
public static final String FORM_PARAM_CLUSTER_NAME = "clusterName";
public static final String FORM_PARAM_SERVER_NAME = "serverName";
public static final String FORM_PARAM_DISKS = "disks";
@@ -85,6 +84,7 @@ public class RESTConstants {
public static final String QUERY_PARAM_TO_TIMESTAMP = "toTimestamp";
public static final String QUERY_PARAM_DOWNLOAD = "download";
public static final String QUERY_PARAM_SERVER_NAME = "serverName";
+ public static final String QUERY_PARAM_DETAILS = "details";
public static final String FORMAT_XML = "xml";
public static final String FORMAT_JSON = "json";
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java
index 16059b15..05627ab1 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java
@@ -22,47 +22,27 @@ import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.model.Status;
-@XmlRootElement(name = "response")
-public class ServerListResponse extends AbstractResponse {
+@XmlRootElement(name = "servers")
+public class ServerListResponse {
private List<Server> servers = new ArrayList<Server>();
public ServerListResponse() {
}
- public ServerListResponse(Status status, List<Server> servers) {
- setStatus(status);
+ public ServerListResponse(List<Server> servers) {
setServers(servers);
}
- @XmlElementWrapper(name = "servers")
@XmlElement(name = "server", type=Server.class)
public List<Server> getServers() {
return servers;
}
- /**
- * @param servers
- * the servers to set
- */
public void setServers(List<Server> servers) {
this.servers = servers;
}
-
- /*
- * (non-Javadoc)
- *
- * @see com.gluster.storage.management.core.model.Response#getData()
- */
- @Override
- @XmlTransient
- public List<Server> getData() {
- return getServers();
- }
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java
new file mode 100644
index 00000000..2211f29f
--- /dev/null
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * This file is part of Gluster Management Console.
+ *
+ * Gluster Management Console 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.
+ *
+ * Gluster Management Console 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 Affero General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *******************************************************************************/
+package com.gluster.storage.management.core.response;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * Response object for transferring cluster names during REST communication. This is just a wrapper over a list of
+ * Strings, and is required because the jersey rest framework can't transfer lists directly.
+ */
+@XmlRootElement(name="servers")
+public class ServerNameListResponse {
+private List<String> serverNames = new ArrayList<String>();
+
+ public ServerNameListResponse() {
+ }
+
+ public ServerNameListResponse(List<String> serverNames) {
+ this.serverNames = serverNames;
+ }
+
+ @XmlElement(name = "server", type = String.class)
+ public List<String> getServerNames() {
+ return serverNames;
+ }
+}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
index aba88d82..ee9d3600 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
@@ -18,6 +18,8 @@
*******************************************************************************/
package com.gluster.storage.management.server.resources;
+import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME;
+import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS;
import java.util.ArrayList;
@@ -29,16 +31,13 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import org.springframework.stereotype.Component;
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.model.Response;
import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
-import com.gluster.storage.management.core.response.StringListResponse;
+import com.gluster.storage.management.core.response.ServerNameListResponse;
import com.sun.jersey.spi.resource.Singleton;
@Component
@@ -67,57 +66,76 @@ public class DiscoveredServersResource extends AbstractServersResource {
@GET
@Produces(MediaType.APPLICATION_XML)
- @SuppressWarnings("rawtypes")
- public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) {
- if(getDetails != null && getDetails == true) {
- return getDiscoveredServerDetails();
+ public Response getDiscoveredServersXML(@QueryParam(QUERY_PARAM_DETAILS) Boolean details) {
+ return getDiscoveredServersResponse(details, MediaType.APPLICATION_XML);
+ }
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDiscoveredServersJSON(@QueryParam(QUERY_PARAM_DETAILS) Boolean details) {
+ return getDiscoveredServersResponse(details, MediaType.APPLICATION_JSON);
+ }
+
+ private Response getDiscoveredServersResponse(Boolean details, String mediaType) {
+ if(details != null && details == true) {
+ try {
+ List<Server> discoveredServers = getDiscoveredServerDetails();
+ return okResponse(new ServerListResponse(discoveredServers), mediaType);
+ } catch(Exception e) {
+ return errorResponse(e.getMessage());
+ }
+ } else {
+ return okResponse(new ServerNameListResponse(getDiscoveredServerNames()), mediaType);
}
- return new StringListResponse(getDiscoveredServerNames());
}
- private ServerListResponse getDiscoveredServerDetails() {
+ private List<Server> getDiscoveredServerDetails() {
List<Server> discoveredServers = new ArrayList<Server>();
- List<String> serverNames = getDiscoveredServerNames();
- GenericResponse<Server> discoveredServerResponse;
- int errCount = 0;
- StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
- for (String serverName : serverNames) {
- discoveredServerResponse = getDiscoveredServer(serverName);
- if (!discoveredServerResponse.getStatus().isSuccess()) {
- errMsg.append(CoreConstants.NEWLINE + serverName + " : " + discoveredServerResponse.getStatus());
- errCount++;
- } else {
- discoveredServers.add(discoveredServerResponse.getData());
+ for (String serverName : getDiscoveredServerNames()) {
+ try {
+ discoveredServers.add(getDiscoveredServer(serverName));
+ } catch(Exception e) {
+ // TODO: Log the exception
+ // continue with next discovered server
}
}
- Status status = null;
- if(errCount == 0) {
- status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
- } else if(errCount == serverNames.size()) {
- status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
- } else {
- status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
- }
- return new ServerListResponse(status, discoveredServers);
+ return discoveredServers;
}
- @Path("/{serverName}")
+ @Path("{" + PATH_PARAM_SERVER_NAME + "}")
@GET
@Produces(MediaType.APPLICATION_XML)
- public GenericResponse<Server> getDiscoveredServer(@PathParam("serverName") String serverName) {
- Server server = new Server(serverName);
+ public Response getDiscoveredServerXML(@PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
+ return getDiscoveredServerResponse(serverName, MediaType.APPLICATION_XML);
+ }
+
+ @Path("{" + PATH_PARAM_SERVER_NAME + "}")
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getDiscoveredServerJSON(@PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
+ return getDiscoveredServerResponse(serverName, MediaType.APPLICATION_JSON);
+ }
+
+ private Response getDiscoveredServerResponse(String serverName, String mediaType) {
+ if(serverName == null || serverName.isEmpty()) {
+ return badRequestResponse("Server name must not be empty!");
+ }
try {
- fetchServerDetails(server);
+ return okResponse(getDiscoveredServer(serverName), mediaType);
} catch (Exception e) {
- return new GenericResponse<Server>(new Status(e), null);
+ // TODO: Log the exception
+ return errorResponse(e.getMessage());
}
- return new GenericResponse<Server>(Status.STATUS_SUCCESS, server);
+ }
+
+ private Server getDiscoveredServer(String serverName) {
+ Server server = new Server(serverName);
+ fetchServerDetails(server);
+ return server;
}
public static void main(String[] args) {
- StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false);
- for (String server : listResponse.getData()) {
- System.out.println(server);
- }
+ Response response = (Response)new DiscoveredServersResource().getDiscoveredServersXML(false);
+ System.out.println(response.getEntity());
}
}