blob: f268a37bb483eef2b8141561474b5b7e3d0644f2 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.airavata.services.registry.rest.resources;
import org.apache.airavata.registry.api.AiravataRegistry2;
import org.apache.airavata.registry.api.WorkspaceProject;
import org.apache.airavata.registry.api.exception.RegistryException;
import org.apache.airavata.registry.api.exception.worker.WorkspaceProjectAlreadyExistsException;
import org.apache.airavata.registry.api.exception.worker.WorkspaceProjectDoesNotExistsException;
import org.apache.airavata.services.registry.rest.resourcemappings.WorkspaceProjectList;
import org.apache.airavata.services.registry.rest.utils.ResourcePathConstants;
import org.apache.airavata.services.registry.rest.utils.RestServicesConstants;
import javax.servlet.ServletContext;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
/**
* This class is a REST interface for all the operations related to Project that are exposed in
* Airavata Registry API
*/
@Path(ResourcePathConstants.ProjectResourcePathConstants.REGISTRY_API_PROJECTREGISTRY)
public class ProjectRegistryResource {
private AiravataRegistry2 airavataRegistry;
@Context
ServletContext context;
/**
* ---------------------------------Project Registry----------------------------------*
*/
/**
* This method will check whether a given project name exists
* @param projectName project name
* @return HTTP response
*/
@GET
@Path(ResourcePathConstants.ProjectResourcePathConstants.PROJECT_EXIST)
@Produces(MediaType.TEXT_PLAIN)
public Response isWorkspaceProjectExists(@QueryParam("projectName") String projectName) {
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
boolean result = airavataRegistry.isWorkspaceProjectExists(projectName);
if (result) {
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity("Project exists...");
return builder.build();
} else {
Response.ResponseBuilder builder = Response.status(Response.Status.NOT_FOUND);
builder.entity("Project does not exist...");
return builder.build();
}
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
/**
* This method will check whether a project exists and create according to the createIfNotExists
* flag
* @param projectName project name
* @param createIfNotExists flag to check whether a new project should be created or not
* @return HTTP response
*/
@POST
@Path(ResourcePathConstants.ProjectResourcePathConstants.PROJECT_EXIST_CREATE)
@Produces(MediaType.TEXT_PLAIN)
public Response isWorkspaceProjectExistsCreate(@FormParam("projectName") String projectName,
@FormParam("createIfNotExists") String createIfNotExists) {
boolean createIfNotExistStatus = false;
if (createIfNotExists.equals("true")) {
createIfNotExistStatus = true;
}
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
boolean result = airavataRegistry.isWorkspaceProjectExists(projectName, createIfNotExistStatus);
if (result) {
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity("New project has been created...");
return builder.build();
} else {
Response.ResponseBuilder builder = Response.status(Response.Status.NOT_FOUND);
builder.entity("Could not create the project...");
return builder.build();
}
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
/**
* This method will add new workspace project
* @param projectName project name
* @return HTTP response
*/
@POST
@Path(ResourcePathConstants.ProjectResourcePathConstants.ADD_PROJECT)
@Produces(MediaType.TEXT_PLAIN)
public Response addWorkspaceProject(@FormParam("projectName") String projectName) {
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
WorkspaceProject workspaceProject = new WorkspaceProject(projectName, airavataRegistry);
airavataRegistry.addWorkspaceProject(workspaceProject);
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity("Workspace project added successfully...");
return builder.build();
} catch (WorkspaceProjectAlreadyExistsException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
/**
* This method will update the workspace project
* @param projectName project name
* @return HTTP response
*/
@POST
@Path(ResourcePathConstants.ProjectResourcePathConstants.UPDATE_PROJECT)
@Produces(MediaType.TEXT_PLAIN)
public Response updateWorkspaceProject(@FormParam("projectName") String projectName) {
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
WorkspaceProject workspaceProject = new WorkspaceProject(projectName, airavataRegistry);
airavataRegistry.updateWorkspaceProject(workspaceProject);
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity("Workspace project updated successfully...");
return builder.build();
} catch (WorkspaceProjectDoesNotExistsException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
/**
* This method will delete workspace project
* @param projectName project name
* @return HTTP response
*/
@DELETE
@Path(ResourcePathConstants.ProjectResourcePathConstants.DELETE_PROJECT)
@Produces(MediaType.TEXT_PLAIN)
public Response deleteWorkspaceProject(@QueryParam("projectName") String projectName) {
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
airavataRegistry.deleteWorkspaceProject(projectName);
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity("Workspace project deleted successfully...");
return builder.build();
} catch (WorkspaceProjectDoesNotExistsException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
/**
* This method will retrieve the workspace project
* @param projectName project name
* @return HTTP response
*/
@GET
@Path(ResourcePathConstants.ProjectResourcePathConstants.GET_PROJECT)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getWorkspaceProject(@QueryParam("projectName") String projectName) {
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
WorkspaceProject workspaceProject = airavataRegistry.getWorkspaceProject(projectName);
if (workspaceProject != null) {
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity(workspaceProject);
return builder.build();
} else {
Response.ResponseBuilder builder = Response.status(Response.Status.NOT_FOUND);
builder.entity("No workspace projects available...");
return builder.build();
}
} catch (WorkspaceProjectDoesNotExistsException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
/**
* This method will retrieve all the workspace projects
* @return HTTP response
*/
@GET
@Path(ResourcePathConstants.ProjectResourcePathConstants.GET_PROJECTS)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getWorkspaceProjects() {
airavataRegistry = (AiravataRegistry2) context.getAttribute(RestServicesConstants.AIRAVATA_REGISTRY);
try {
List<WorkspaceProject> workspaceProjects = airavataRegistry.getWorkspaceProjects();
WorkspaceProjectList workspaceProjectList = new WorkspaceProjectList();
WorkspaceProject[] workspaceProjectSet = new WorkspaceProject[workspaceProjects.size()];
for (int i = 0; i < workspaceProjects.size(); i++) {
workspaceProjectSet[i] = workspaceProjects.get(i);
}
workspaceProjectList.setWorkspaceProjects(workspaceProjectSet);
if (workspaceProjects.size() != 0) {
Response.ResponseBuilder builder = Response.status(Response.Status.OK);
builder.entity(workspaceProjectList);
return builder.build();
} else {
Response.ResponseBuilder builder = Response.status(Response.Status.NO_CONTENT);
builder.entity("No workspace projects available...");
return builder.build();
}
} catch (RegistryException e) {
Response.ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
builder.entity(e.getMessage());
return builder.build();
}
}
}