You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2017/05/23 09:36:32 UTC
ambari git commit: AMBARI-21029. Integrate SettingService with
Swagger (adoroszlai)
Repository: ambari
Updated Branches:
refs/heads/ambari-rest-api-explorer 017726319 -> 51fc3cf77
AMBARI-21029. Integrate SettingService with Swagger (adoroszlai)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/51fc3cf7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/51fc3cf7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/51fc3cf7
Branch: refs/heads/ambari-rest-api-explorer
Commit: 51fc3cf77302c7bc04ffb9fdbd53f053b053514f
Parents: 0177263
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Tue May 23 11:35:31 2017 +0200
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Tue May 23 11:35:31 2017 +0200
----------------------------------------------------------------------
.../api/services/SettingRequestSwagger.java | 30 +++++
.../server/api/services/SettingService.java | 126 ++++++++++++++++---
.../server/controller/SettingRequest.java | 69 ++++++++++
.../server/controller/SettingResponse.java | 90 +++++++++++++
.../internal/SettingResourceProvider.java | 64 ++++++----
.../server/api/services/SettingServiceTest.java | 2 +-
6 files changed, 337 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/51fc3cf7/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingRequestSwagger.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingRequestSwagger.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingRequestSwagger.java
new file mode 100644
index 0000000..4e854a4
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingRequestSwagger.java
@@ -0,0 +1,30 @@
+/*
+ * 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.ambari.server.api.services;
+
+import org.apache.ambari.server.controller.ApiModel;
+import org.apache.ambari.server.controller.SettingRequest;
+import org.apache.ambari.server.controller.internal.SettingResourceProvider;
+
+import io.swagger.annotations.ApiModelProperty;
+
+@SuppressWarnings("unused") // for Swagger
+public interface SettingRequestSwagger extends ApiModel {
+ @ApiModelProperty(name = SettingResourceProvider.RESPONSE_KEY)
+ SettingRequest getSettingRequest();
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/51fc3cf7/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingService.java
index e186be2..b8da678 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/SettingService.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -29,18 +29,35 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.ambari.server.api.resources.ResourceInstance;
+import org.apache.ambari.server.controller.SettingResponse.SettingResponseWrapper;
+import org.apache.ambari.server.controller.internal.SettingResourceProvider;
import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.http.HttpStatus;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
/**
* Service responsible for setting resource requests.
*/
-@Path("/settings/")
+@Path("/settings")
+@Api(value = "/settings", description = "Endpoint for settings-specific operations")
public class SettingService extends BaseService {
+ private static final String DEFAULT_FIELDS_GET_SETTINGS = SettingResourceProvider.SETTING_NAME_PROPERTY_ID;
+ private static final String DEFAULT_FIELDS_GET_SETTING = SettingResourceProvider.ALL_PROPERTIES;
+ private static final String SETTING_REQUEST_TYPE = "org.apache.ambari.server.api.services.SettingRequestSwagger";
+
/**
* Construct a SettingService.
*/
@@ -58,9 +75,26 @@ public class SettingService extends BaseService {
* @return setting collection resource representation
*/
@GET
- @Produces("text/plain")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(value = "Returns all settings",
+ response = SettingResponseWrapper.class, responseContainer = RESPONSE_CONTAINER_LIST)
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY,
+ defaultValue = DEFAULT_FIELDS_GET_SETTINGS),
+ @ApiImplicitParam(name = QUERY_SORT, value = QUERY_SORT_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY),
+ @ApiImplicitParam(name = QUERY_PAGE_SIZE, value = QUERY_PAGE_SIZE_DESCRIPTION, defaultValue = DEFAULT_PAGE_SIZE, dataType = DATA_TYPE_INT, paramType = PARAM_TYPE_QUERY),
+ @ApiImplicitParam(name = QUERY_FROM, value = QUERY_FROM_DESCRIPTION, allowableValues = QUERY_FROM_VALUES, defaultValue = DEFAULT_FROM, dataType = DATA_TYPE_INT, paramType = PARAM_TYPE_QUERY),
+ @ApiImplicitParam(name = QUERY_TO, value = QUERY_TO_DESCRIPTION, allowableValues = QUERY_TO_VALUES, dataType = QUERY_TO_TYPE, paramType = PARAM_TYPE_QUERY),
+ })
+ @ApiResponses({
+ @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+ @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+ @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+ @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+ })
public Response getSettings(String body, @Context HttpHeaders headers, @Context UriInfo ui) {
- return handleRequest(headers, body, ui, Request.Type.GET, createSettingResource(null));
+ ResourceInstance resource = createSettingResource(null);
+ return handleRequest(headers, body, ui, Request.Type.GET, resource);
}
/**
@@ -75,14 +109,33 @@ public class SettingService extends BaseService {
*/
@GET
@Path("{settingName}")
- @Produces("text/plain")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(value = "Returns a specific setting",
+ response = SettingResponseWrapper.class)
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY,
+ defaultValue = DEFAULT_FIELDS_GET_SETTING),
+ @ApiImplicitParam(name = QUERY_SORT, value = QUERY_SORT_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY),
+ @ApiImplicitParam(name = QUERY_PAGE_SIZE, value = QUERY_PAGE_SIZE_DESCRIPTION, defaultValue = DEFAULT_PAGE_SIZE, dataType = DATA_TYPE_INT, paramType = PARAM_TYPE_QUERY),
+ @ApiImplicitParam(name = QUERY_FROM, value = QUERY_FROM_DESCRIPTION, allowableValues = QUERY_FROM_VALUES, defaultValue = DEFAULT_FROM, dataType = DATA_TYPE_INT, paramType = PARAM_TYPE_QUERY),
+ @ApiImplicitParam(name = QUERY_TO, value = QUERY_TO_DESCRIPTION, allowableValues = QUERY_TO_VALUES, dataType = QUERY_TO_TYPE, paramType = PARAM_TYPE_QUERY),
+ })
+ @ApiResponses({
+ @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+ @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_RESOURCE_NOT_FOUND),
+ @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+ @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+ @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+ })
public Response getSetting(String body, @Context HttpHeaders headers, @Context UriInfo ui,
- @PathParam("settingName") String settingName) {
- return handleRequest(headers, body, ui, Request.Type.GET, createSettingResource(settingName));
+ @ApiParam(value = "setting name", required = true) @PathParam("settingName") String settingName
+ ) {
+ ResourceInstance resource = createSettingResource(settingName);
+ return handleRequest(headers, body, ui, Request.Type.GET, resource);
}
/**
- * Handles: POST /settings/{settingName}
+ * Handles: POST /settings
* Create a specific setting.
*
* @param headers http headers
@@ -91,9 +144,24 @@ public class SettingService extends BaseService {
* @return information regarding the created setting
*/
@POST
- @Produces("text/plain")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(value = "Creates a setting")
+ @ApiImplicitParams({
+ @ApiImplicitParam(dataType = SETTING_REQUEST_TYPE, paramType = PARAM_TYPE_BODY, required = true)
+ })
+ @ApiResponses({
+ @ApiResponse(code = HttpStatus.SC_CREATED, message = MSG_SUCCESSFUL_OPERATION),
+ @ApiResponse(code = HttpStatus.SC_ACCEPTED, message = MSG_REQUEST_ACCEPTED),
+ @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+ @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_NOT_FOUND),
+ @ApiResponse(code = HttpStatus.SC_CONFLICT, message = MSG_RESOURCE_ALREADY_EXISTS),
+ @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+ @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+ @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+ })
public Response createSetting(String body, @Context HttpHeaders headers, @Context UriInfo ui) {
- return handleRequest(headers, body, ui, Request.Type.POST, createSettingResource(null));
+ ResourceInstance resource = createSettingResource(null);
+ return handleRequest(headers, body, ui, Request.Type.POST, resource);
}
/**
@@ -108,10 +176,23 @@ public class SettingService extends BaseService {
*/
@PUT
@Path("{settingName}")
- @Produces("text/plain")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(value = "Updates a setting")
+ @ApiImplicitParams({
+ @ApiImplicitParam(dataType = SETTING_REQUEST_TYPE, paramType = PARAM_TYPE_BODY, required = true)
+ })
+ @ApiResponses({
+ @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+ @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_RESOURCE_NOT_FOUND),
+ @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+ @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+ @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+ })
public Response updateSetting(String body, @Context HttpHeaders headers, @Context UriInfo ui,
- @PathParam("settingName") String settingName) {
- return handleRequest(headers, body, ui, Request.Type.PUT, createSettingResource(settingName));
+ @ApiParam(value = "setting name", required = true) @PathParam("settingName") String settingName
+ ) {
+ ResourceInstance resource = createSettingResource(settingName);
+ return handleRequest(headers, body, ui, Request.Type.PUT, resource);
}
/**
@@ -126,10 +207,20 @@ public class SettingService extends BaseService {
*/
@DELETE
@Path("{settingName}")
- @Produces("text/plain")
+ @Produces(MediaType.TEXT_PLAIN)
+ @ApiOperation(value = "Deletes a setting")
+ @ApiResponses({
+ @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+ @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_RESOURCE_NOT_FOUND),
+ @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+ @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+ @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+ })
public Response deleteSetting(@Context HttpHeaders headers, @Context UriInfo ui,
- @PathParam("settingName") String settingName) {
- return handleRequest(headers, null, ui, Request.Type.DELETE, createSettingResource(settingName));
+ @ApiParam(value = "setting name", required = true) @PathParam("settingName") String settingName
+ ) {
+ ResourceInstance resource = createSettingResource(settingName);
+ return handleRequest(headers, null, ui, Request.Type.DELETE, resource);
}
// ----- helper methods ----------------------------------------------------
@@ -141,8 +232,9 @@ public class SettingService extends BaseService {
*
* @return a setting resource instance
*/
- ResourceInstance createSettingResource(String settingName) {
+ protected ResourceInstance createSettingResource(String settingName) {
return createResource(Resource.Type.Setting,
Collections.singletonMap(Resource.Type.Setting, settingName));
}
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/51fc3cf7/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingRequest.java
new file mode 100644
index 0000000..4331ba3
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingRequest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.ambari.server.controller;
+
+import java.util.Objects;
+
+import org.apache.ambari.server.controller.internal.SettingResourceProvider;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class SettingRequest {
+
+ private final String name;
+ private final String settingType;
+ private final String content;
+
+ public SettingRequest(String name, String settingType, String content) {
+ this.name = name;
+ this.settingType = settingType;
+ this.content = content;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.NAME)
+ public String getName() {
+ return name;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.SETTING_TYPE)
+ public String getSettingType() {
+ return settingType;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.CONTENT)
+ public String getContent() {
+ return content;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SettingRequest other = (SettingRequest) o;
+ return Objects.equals(name, other.name) &&
+ Objects.equals(settingType, other.settingType) &&
+ Objects.equals(content, other.content);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, settingType, content);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/51fc3cf7/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingResponse.java
new file mode 100644
index 0000000..cd51184
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/SettingResponse.java
@@ -0,0 +1,90 @@
+/*
+ * 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.ambari.server.controller;
+
+import java.util.Objects;
+
+import org.apache.ambari.server.controller.internal.SettingResourceProvider;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class SettingResponse {
+
+ private final String name;
+ private final String settingType;
+ private final String content;
+ private final String updatedBy;
+ private final long updateTimestamp;
+
+ public SettingResponse(String name, String settingType, String content, String updatedBy, long updateTimestamp) {
+ this.name = name;
+ this.settingType = settingType;
+ this.content = content;
+ this.updatedBy = updatedBy;
+ this.updateTimestamp = updateTimestamp;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.NAME)
+ public String getName() {
+ return name;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.SETTING_TYPE)
+ public String getSettingType() {
+ return settingType;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.CONTENT)
+ public String getContent() {
+ return content;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.UPDATED_BY)
+ public String getUpdatedBy() {
+ return updatedBy;
+ }
+
+ @ApiModelProperty(name = SettingResourceProvider.UPDATE_TIMESTAMP)
+ public long getUpdateTimestamp() {
+ return updateTimestamp;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SettingResponse other = (SettingResponse) o;
+ return Objects.equals(name, other.name) &&
+ Objects.equals(settingType, other.settingType) &&
+ Objects.equals(content, other.content) &&
+ Objects.equals(updatedBy, other.updatedBy) &&
+ updateTimestamp == other.updateTimestamp;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, settingType, content, updatedBy, updateTimestamp);
+ }
+
+ public interface SettingResponseWrapper extends ApiModel {
+ @ApiModelProperty(name = SettingResourceProvider.RESPONSE_KEY)
+ @SuppressWarnings("unused")
+ SettingResponse getSettingResponse();
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/51fc3cf7/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/SettingResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/SettingResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/SettingResourceProvider.java
index e50490e..5235ef4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/SettingResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/SettingResourceProvider.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -29,6 +29,7 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.DuplicateResourceException;
import org.apache.ambari.server.StaticallyInject;
+import org.apache.ambari.server.controller.SettingResponse;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
import org.apache.ambari.server.controller.spi.NoSuchResourceException;
import org.apache.ambari.server.controller.spi.Predicate;
@@ -46,6 +47,7 @@ import org.apache.ambari.server.security.authorization.RoleAuthorization;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
+import com.google.common.collect.ImmutableSet;
import com.google.inject.Inject;
/**
@@ -54,14 +56,20 @@ import com.google.inject.Inject;
@StaticallyInject
public class SettingResourceProvider extends AbstractAuthorizedResourceProvider {
- private static final String SETTINGS = "Settings";
+ public static final String RESPONSE_KEY = "Settings";
protected static final String ID = "id";
protected static final String SETTING = "Setting";
- protected static final String SETTING_NAME_PROPERTY_ID = PropertyHelper.getPropertyId(SETTINGS, "name");
- protected static final String SETTING_SETTING_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId(SETTINGS, "setting_type");
- protected static final String SETTING_CONTENT_PROPERTY_ID = PropertyHelper.getPropertyId(SETTINGS, "content");
- protected static final String SETTING_UPDATED_BY_PROPERTY_ID = PropertyHelper.getPropertyId(SETTINGS, "updated_by");
- protected static final String SETTING_UPDATE_TIMESTAMP_PROPERTY_ID = PropertyHelper.getPropertyId(SETTINGS, "update_timestamp");
+ public static final String NAME = "name";
+ public static final String SETTING_TYPE = "setting_type";
+ public static final String CONTENT = "content";
+ public static final String UPDATED_BY = "updated_by";
+ public static final String UPDATE_TIMESTAMP = "update_timestamp";
+ public static final String SETTING_NAME_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + NAME;
+ public static final String SETTING_SETTING_TYPE_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + SETTING_TYPE;
+ public static final String SETTING_CONTENT_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + CONTENT;
+ public static final String SETTING_UPDATED_BY_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + UPDATED_BY;
+ public static final String SETTING_UPDATE_TIMESTAMP_PROPERTY_ID = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + UPDATE_TIMESTAMP;
+ public static final String ALL_PROPERTIES = RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + "*";
/**
* The property ids for setting resource.
@@ -73,7 +81,11 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
*/
private static final Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
- private static final Set<String> requiredProperties = new HashSet<>();
+ private static final Set<String> REQUIRED_PROPERTIES = ImmutableSet.of(
+ SETTING_NAME_PROPERTY_ID,
+ SETTING_SETTING_TYPE_PROPERTY_ID,
+ SETTING_CONTENT_PROPERTY_ID
+ );
@Inject
private static SettingDAO dao;
@@ -88,10 +100,6 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
propertyIds.add(SETTING);
keyPropertyIds.put(Resource.Type.Setting, SETTING_NAME_PROPERTY_ID);
-
- requiredProperties.add(SETTING_NAME_PROPERTY_ID);
- requiredProperties.add(SETTING_SETTING_TYPE_PROPERTY_ID);
- requiredProperties.add(SETTING_CONTENT_PROPERTY_ID);
}
protected SettingResourceProvider() {
@@ -113,9 +121,9 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
Set<Resource> associatedResources = new HashSet<>();
for (Map<String, Object> properties : request.getProperties()) {
- SettingEntity settingEntity = createResources(newCreateCommand(request, properties));
+ SettingResponse setting = createResources(newCreateCommand(request, properties));
Resource resource = new ResourceImpl(Resource.Type.Setting);
- resource.setProperty(SETTING_NAME_PROPERTY_ID, settingEntity.getName());
+ resource.setProperty(SETTING_NAME_PROPERTY_ID, setting.getName());
associatedResources.add(resource);
}
@@ -145,7 +153,7 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
Set<String> requestedIds = getRequestPropertyIds(request, predicate);
Set<Resource> resources = new HashSet<>();
for(SettingEntity entity : entities) {
- resources.add(toResource(entity, requestedIds));
+ resources.add(toResource(toResponse(entity), requestedIds));
}
return resources;
}
@@ -169,10 +177,10 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
}
- private Command<SettingEntity> newCreateCommand(final Request request, final Map<String, Object> properties) {
- return new Command<SettingEntity>() {
+ private Command<SettingResponse> newCreateCommand(final Request request, final Map<String, Object> properties) {
+ return new Command<SettingResponse>() {
@Override
- public SettingEntity invoke() throws AmbariException, AuthorizationException {
+ public SettingResponse invoke() throws AmbariException, AuthorizationException {
SettingEntity entity = toEntity(properties);
if (dao.findByName(entity.getName()) != null) {
throw new DuplicateResourceException(
@@ -180,7 +188,7 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
}
dao.create(entity);
notifyCreate(Resource.Type.Setting, request);
- return entity;
+ return toResponse(entity);
}
};
}
@@ -224,18 +232,18 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
entity.setUpdateTimestamp(System.currentTimeMillis());
}
- private Resource toResource(final SettingEntity settingEntity, final Set<String> requestedIds) {
+ private Resource toResource(final SettingResponse setting, final Set<String> requestedIds) {
Resource resource = new ResourceImpl(Resource.Type.Setting);
- setResourceProperty(resource, SETTING_NAME_PROPERTY_ID, settingEntity.getName(), requestedIds);
- setResourceProperty(resource, SETTING_SETTING_TYPE_PROPERTY_ID, settingEntity.getSettingType(), requestedIds);
- setResourceProperty(resource, SETTING_CONTENT_PROPERTY_ID, settingEntity.getContent(), requestedIds);
- setResourceProperty(resource, SETTING_UPDATED_BY_PROPERTY_ID, settingEntity.getUpdatedBy(), requestedIds);
- setResourceProperty(resource, SETTING_UPDATE_TIMESTAMP_PROPERTY_ID, settingEntity.getUpdateTimestamp(), requestedIds);
+ setResourceProperty(resource, SETTING_NAME_PROPERTY_ID, setting.getName(), requestedIds);
+ setResourceProperty(resource, SETTING_SETTING_TYPE_PROPERTY_ID, setting.getSettingType(), requestedIds);
+ setResourceProperty(resource, SETTING_CONTENT_PROPERTY_ID, setting.getContent(), requestedIds);
+ setResourceProperty(resource, SETTING_UPDATED_BY_PROPERTY_ID, setting.getUpdatedBy(), requestedIds);
+ setResourceProperty(resource, SETTING_UPDATE_TIMESTAMP_PROPERTY_ID, setting.getUpdateTimestamp(), requestedIds);
return resource;
}
private SettingEntity toEntity(final Map<String, Object> properties) throws AmbariException {
- for (String propertyName: requiredProperties) {
+ for (String propertyName: REQUIRED_PROPERTIES) {
if (properties.get(propertyName) == null) {
throw new AmbariException(String.format("Property %s should be provided", propertyName));
}
@@ -249,4 +257,8 @@ public class SettingResourceProvider extends AbstractAuthorizedResourceProvider
entity.setUpdateTimestamp(System.currentTimeMillis());
return entity;
}
+
+ private static SettingResponse toResponse(SettingEntity entity) {
+ return new SettingResponse(entity.getName(), entity.getSettingType(), entity.getContent(), entity.getUpdatedBy(), entity.getUpdateTimestamp());
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/51fc3cf7/ambari-server/src/test/java/org/apache/ambari/server/api/services/SettingServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/SettingServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/SettingServiceTest.java
index 1bc75ff..3af8751 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/SettingServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/SettingServiceTest.java
@@ -79,7 +79,7 @@ public class SettingServiceTest extends BaseServiceTest {
}
@Override
- ResourceInstance createSettingResource(String settingName) {
+ protected ResourceInstance createSettingResource(String settingName) {
assertEquals(this.settingName, settingName);
return getTestResource();
}