blob: c6372ee614f2aaa23dcb477564109364cd101a44 [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.nutch.service.resources;
import java.util.Map;
import java.util.Set;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.nutch.service.model.request.NutchConfig;
import com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures;
import com.fasterxml.jackson.databind.SerializationFeature;
@Path("/config")
public class ConfigResource extends AbstractResource{
public static final String DEFAULT = "default";
/**
* Returns a list of all configurations created.
* @return List of configurations
*/
@GET
@Path("/")
@JacksonFeatures(serializationEnable = { SerializationFeature.INDENT_OUTPUT })
public Set<String> getConfigs() {
return configManager.list();
}
/**
* Get configuration properties
* @param configId The configuration ID to fetch
* @return HashMap of the properties set within the given configId
*/
@GET
@Path("/{configId}")
@JacksonFeatures(serializationEnable = { SerializationFeature.INDENT_OUTPUT })
public Map<String, String> getConfig(@PathParam("configId") String configId) {
return configManager.getAsMap(configId);
}
/**
* Get property
* @param configId The ID of the configuration
* @param propertyId The name(key) of the property
* @return value of the specified property in the provided configId.
*/
@GET
@Path("/{configId}/{propertyId}")
@Produces(MediaType.TEXT_PLAIN)
@JacksonFeatures(serializationEnable = { SerializationFeature.INDENT_OUTPUT })
public String getProperty(@PathParam("configId") String configId,
@PathParam("propertyId") String propertyId) {
return configManager.getAsMap(configId).get(propertyId);
}
/**
* Removes the configuration from the list of known configurations.
* @param configId The ID of the configuration to delete
*/
@DELETE
@Path("/{configId}")
public void deleteConfig(@PathParam("configId") String configId) {
configManager.delete(configId);
}
/**
* Create new configuration.
* @param newConfig
* @return The name of the new configuration created
*/
@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public Response createConfig(NutchConfig newConfig) {
if (newConfig == null) {
return Response.status(400)
.entity("Nutch configuration cannot be empty!").build();
}
try{
configManager.create(newConfig);
}catch(Exception e){
return Response.status(400)
.entity(e.getMessage()).build();
}
return Response.ok(newConfig.getConfigId()).build();
}
/**
* Adds/Updates a particular property value in the configuration
* @param confId Configuration ID whose property needs to be updated. Make sure that the given
* confId exists to prevent errors.
* @param propertyKey Name of the property
* @param value Value as a simple text
* @return Success code
*/
@PUT
@Path("/{configId}/{propertyId}")
@Consumes(MediaType.TEXT_PLAIN)
public Response updateProperty(@PathParam("configId")String confId,
@PathParam("propertyId")String propertyKey, String value) {
try{
configManager.setProperty(confId, propertyKey, value);
}catch(Exception e) {
return Response.status(400).entity(e.getMessage()).build();
}
return Response.ok().build();
}
}