X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdbcapi%2Fresources%2FTopicResource.java;h=4f442c91320e4ea453eddb4088fd44393ab118e1;hb=7fff84259b4f99298a117935e407561df9cf5878;hp=cab48caeb2fbb2649bf53a718644b3b92f8a2dad;hpb=15fefcd476f203ec37a01ee73230dabe9dffe150;p=dmaap%2Fdbcapi.git diff --git a/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java b/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java index cab48ca..4f442c9 100644 --- a/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java +++ b/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java @@ -35,6 +35,7 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -42,7 +43,6 @@ import javax.ws.rs.core.Response.Status; import org.onap.dmaap.dbcapi.logging.BaseLoggingClass; import org.onap.dmaap.dbcapi.model.ApiError; -import org.onap.dmaap.dbcapi.model.DR_Pub; import org.onap.dmaap.dbcapi.model.ReplicationType; import org.onap.dmaap.dbcapi.model.FqtnType; import org.onap.dmaap.dbcapi.model.Topic; @@ -50,6 +50,8 @@ import org.onap.dmaap.dbcapi.service.ApiService; import org.onap.dmaap.dbcapi.service.TopicService; import org.onap.dmaap.dbcapi.util.DmaapConfig; +import static javax.ws.rs.core.Response.Status.CREATED; + @Path("/topics") @Api( value= "topics", description = "Endpoint for retreiving MR Topics" ) @Consumes(MediaType.APPLICATION_JSON) @@ -57,11 +59,17 @@ import org.onap.dmaap.dbcapi.util.DmaapConfig; @Authorization public class TopicResource extends BaseLoggingClass { private static FqtnType defaultTopicStyle; - TopicService mr_topicService = new TopicService(); + private static String defaultPartitionCount; + private static String defaultReplicationCount; + private TopicService mr_topicService = new TopicService(); + private ResponseBuilder responseBuilder = new ResponseBuilder(); public TopicResource() { DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig(); - defaultTopicStyle = FqtnType.Validator( p.getProperty("MR.topicStyle", "FQTN_LEGACY_FORMAT")); + defaultTopicStyle = FqtnType.Validator( p.getProperty("MR.topicStyle", "FQTN_LEGACY_FORMAT")); + defaultPartitionCount = p.getProperty( "MR.partitionCount", "2"); + defaultReplicationCount = p.getProperty( "MR.replicationCount", "1"); + logger.info( "Setting defaultTopicStyle=" + defaultTopicStyle ); } @@ -70,33 +78,34 @@ public class TopicResource extends BaseLoggingClass { notes = "Returns array of `Topic` objects.", response = Topic.class) @ApiResponses( value = { - @ApiResponse( code = 200, message = "Success", response = DR_Pub.class), + @ApiResponse( code = 200, message = "Success", response = Topic.class), @ApiResponse( code = 400, message = "Error", response = ApiError.class ) }) public Response getTopics() { - - ApiService check = new ApiService(); - List allTopics = mr_topicService.getAllTopics(); GenericEntity> list = new GenericEntity>(allTopics) { }; - return check.success(list); + return responseBuilder.success(list); } @POST - @ApiOperation( value = "return Topic details", - notes = "Create `Topic` object.", + @ApiOperation( value = "Create a Topic object", + notes = "Create `Topic` object." + + "For convenience, the message body may populate the `clients` array, in which case each entry will be added as an `MR_Client`." + + " Beginning in ONAP Dublin Release, dbcapi will create two AAF Roles by default, one each for the publisher and subscriber per topic." + + " MR_Clients can then specify an AAF Identity to be added to the appropriate default Role, avoiding the need to create Role(s) in advance.", response = Topic.class) @ApiResponses( value = { - @ApiResponse( code = 200, message = "Success", response = DR_Pub.class), + @ApiResponse( code = 200, message = "Success", response = Topic.class), @ApiResponse( code = 400, message = "Error", response = ApiError.class ) }) public Response addTopic( - Topic topic + Topic topic, + @QueryParam("useExisting") String useExisting ) { - logger.info( "addTopic request: " + topic ); + logger.info( "addTopic request: " + topic + " useExisting=" + useExisting ); ApiService check = new ApiService(); try { @@ -105,7 +114,7 @@ public class TopicResource extends BaseLoggingClass { check.required( "owner", topic.getOwner(), "" ); } catch( RequiredFieldException rfe ) { logger.error("Error", rfe); - return check.error(); + return responseBuilder.error(check.getErr()); } ReplicationType t = topic.getReplicationCase(); @@ -117,13 +126,25 @@ public class TopicResource extends BaseLoggingClass { logger.info( "setting defaultTopicStyle=" + defaultTopicStyle + " for topic " + topic.getTopicName() ); topic.setFqtnStyle( defaultTopicStyle ); } + String pc = topic.getPartitionCount(); + if ( pc == null ) { + topic.setPartitionCount(defaultPartitionCount); + } + String rc = topic.getReplicationCount(); + if ( rc == null ) { + topic.setReplicationCount(defaultReplicationCount); + } topic.setLastMod(); + Boolean flag = false; + if (useExisting != null) { + flag = "true".compareToIgnoreCase( useExisting ) == 0; + } - Topic mrc = mr_topicService.addTopic(topic, check.getErr()); + Topic mrc = mr_topicService.addTopic(topic, check.getErr(), flag); if ( mrc != null && check.getErr().is2xx() ) { - return check.success(Status.CREATED.getStatusCode(), mrc); + return responseBuilder.success(CREATED.getStatusCode(), mrc); } - return check.error(); + return responseBuilder.error(check.getErr()); } @PUT @@ -131,7 +152,7 @@ public class TopicResource extends BaseLoggingClass { notes = "Update a `Topic` object, identified by topicId", response = Topic.class) @ApiResponses( value = { - @ApiResponse( code = 200, message = "Success", response = DR_Pub.class), + @ApiResponse( code = 200, message = "Success", response = Topic.class), @ApiResponse( code = 400, message = "Error", response = ApiError.class ) }) @Path("/{topicId}") @@ -143,7 +164,7 @@ public class TopicResource extends BaseLoggingClass { check.setCode(Status.BAD_REQUEST.getStatusCode()); check.setMessage( "Method /PUT not supported for /topics"); - return check.error(); + return responseBuilder.error(check.getErr()); } @DELETE @@ -151,7 +172,7 @@ public class TopicResource extends BaseLoggingClass { notes = "Delete a `Topic` object, identified by topicId", response = Topic.class) @ApiResponses( value = { - @ApiResponse( code = 204, message = "Success", response = DR_Pub.class), + @ApiResponse( code = 204, message = "Success", response = Topic.class), @ApiResponse( code = 400, message = "Error", response = ApiError.class ) }) @Path("/{topicId}") @@ -164,14 +185,14 @@ public class TopicResource extends BaseLoggingClass { check.required( "fqtn", id, "" ); } catch( RequiredFieldException rfe ) { logger.error("Error", rfe); - return check.error(); + return responseBuilder.error(check.getErr()); } mr_topicService.removeTopic(id, check.getErr()); if ( check.getErr().is2xx()) { - return check.success(Status.NO_CONTENT.getStatusCode(), null); + return responseBuilder.success(Status.NO_CONTENT.getStatusCode(), null); } - return check.error(); + return responseBuilder.error(check.getErr()); } @@ -180,7 +201,7 @@ public class TopicResource extends BaseLoggingClass { notes = "Retrieve a `Topic` object, identified by topicId", response = Topic.class) @ApiResponses( value = { - @ApiResponse( code = 200, message = "Success", response = DR_Pub.class), + @ApiResponse( code = 200, message = "Success", response = Topic.class), @ApiResponse( code = 400, message = "Error", response = ApiError.class ) }) @Path("/{topicId}") @@ -194,12 +215,12 @@ public class TopicResource extends BaseLoggingClass { check.required( "topicName", id, "^\\S+$" ); //no white space allowed in topicName } catch( RequiredFieldException rfe ) { logger.error("Error", rfe); - return check.error(); + return responseBuilder.error(check.getErr()); } Topic mrc = mr_topicService.getTopic( id, check.getErr() ); if ( mrc == null ) { - return check.error(); + return responseBuilder.error(check.getErr()); } - return check.success(mrc); + return responseBuilder.success(mrc); } }