org.apache.activemq.artemis.rest.topic.TopicResource Maven / Gradle / Ivy
/*
* 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.activemq.artemis.rest.topic;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HEAD;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.client.ClientSession;
import org.apache.activemq.artemis.rest.ActiveMQRestLogger;
import org.apache.activemq.artemis.rest.queue.DestinationResource;
import org.apache.activemq.artemis.rest.queue.PostMessage;
public class TopicResource extends DestinationResource {
protected SubscriptionsResource subscriptions;
protected PushSubscriptionsResource pushSubscriptions;
private TopicDestinationsResource topicDestinationsResource;
public void start() throws Exception {
}
public void stop() {
subscriptions.stop();
pushSubscriptions.stop();
sender.cleanup();
}
@GET
@Produces("application/xml")
public Response get(@Context UriInfo uriInfo) {
ActiveMQRestLogger.LOGGER.debug("Handling GET request for \"" + uriInfo.getPath() + "\"");
StringBuilder msg = new StringBuilder();
msg.append("").append("").append(destination).append(" ").append("").append("").append("").append("")
.append(" ");
Response.ResponseBuilder builder = Response.ok(msg.toString());
setSenderLink(builder, uriInfo);
setSenderWithIdLink(builder, uriInfo);
setSubscriptionsLink(builder, uriInfo);
setPushSubscriptionsLink(builder, uriInfo);
return builder.build();
}
@HEAD
@Produces("application/xml")
public Response head(@Context UriInfo uriInfo) {
ActiveMQRestLogger.LOGGER.debug("Handling HEAD request for \"" + uriInfo.getPath() + "\"");
Response.ResponseBuilder builder = Response.ok();
setSenderLink(builder, uriInfo);
setSenderWithIdLink(builder, uriInfo);
setSubscriptionsLink(builder, uriInfo);
setPushSubscriptionsLink(builder, uriInfo);
return builder.build();
}
protected void setSenderLink(Response.ResponseBuilder response, UriInfo info) {
String uri = createSenderLink(info);
serviceManager.getLinkStrategy().setLinkHeader(response, "create", "create", uri, null);
}
protected String createSenderLink(UriInfo info) {
UriBuilder builder = info.getRequestUriBuilder();
builder.path("create");
String uri = builder.build().toString();
return uri;
}
protected void setSenderWithIdLink(Response.ResponseBuilder response, UriInfo info) {
String uri = createSenderWithIdLink(info);
serviceManager.getLinkStrategy().setLinkHeader(response, "create-with-id", "create-with-id", uri, null);
}
protected String createSenderWithIdLink(UriInfo info) {
UriBuilder builder = info.getRequestUriBuilder();
builder.path("create");
String uri = builder.build().toString();
uri += "/{id}";
return uri;
}
protected void setSubscriptionsLink(Response.ResponseBuilder response, UriInfo info) {
String uri = createSubscriptionsLink(info);
serviceManager.getLinkStrategy().setLinkHeader(response, "pull-subscriptions", "pull-subscriptions", uri, null);
}
protected String createSubscriptionsLink(UriInfo info) {
UriBuilder builder = info.getRequestUriBuilder();
builder.path("pull-subscriptions");
String uri = builder.build().toString();
return uri;
}
protected void setPushSubscriptionsLink(Response.ResponseBuilder response, UriInfo info) {
String uri = createPushSubscriptionsLink(info);
serviceManager.getLinkStrategy().setLinkHeader(response, "push-subscriptions", "push-subscriptions", uri, null);
}
protected String createPushSubscriptionsLink(UriInfo info) {
UriBuilder builder = info.getRequestUriBuilder();
builder.path("push-subscriptions");
String uri = builder.build().toString();
return uri;
}
public void setSubscriptions(SubscriptionsResource subscriptions) {
this.subscriptions = subscriptions;
}
@Path("create")
public PostMessage post() throws Exception {
return sender;
}
@Path("pull-subscriptions")
public SubscriptionsResource getSubscriptions() {
return subscriptions;
}
@Path("push-subscriptions")
public PushSubscriptionsResource getPushSubscriptions() {
return pushSubscriptions;
}
public void setPushSubscriptions(PushSubscriptionsResource pushSubscriptions) {
this.pushSubscriptions = pushSubscriptions;
}
@DELETE
public void deleteTopic(@Context UriInfo uriInfo) throws Exception {
ActiveMQRestLogger.LOGGER.debug("Handling DELETE request for \"" + uriInfo.getPath() + "\"");
topicDestinationsResource.getTopics().remove(destination);
try {
stop();
} catch (Exception ignored) {
}
ClientSession session = serviceManager.getSessionFactory().createSession(false, false, false);
try {
SimpleString topicName = new SimpleString(destination);
session.deleteQueue(topicName);
} finally {
try {
session.close();
} catch (Exception ignored) {
}
}
}
public void setTopicDestinationsResource(TopicDestinationsResource topicDestinationsResource) {
this.topicDestinationsResource = topicDestinationsResource;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy