org.swisspush.gateleen.user.RoleProfileHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gateleen-user Show documentation
Show all versions of gateleen-user Show documentation
Middleware library based on Vert.x to build advanced JSON/REST communication servers
The newest version!
package org.swisspush.gateleen.user;
import org.swisspush.gateleen.core.json.JsonUtil;
import org.swisspush.gateleen.core.storage.ResourceStorage;
import org.swisspush.gateleen.core.util.StatusCode;
import io.vertx.core.Vertx;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.json.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.regex.Pattern;
/**
* @author https://github.com/lbovet [Laurent Bovet]
*/
public class RoleProfileHandler {
public static final String UPDATE_ADDRESS = "gateleen.roleprofiles-updated";
private ResourceStorage storage;
private Logger log = LoggerFactory.getLogger(RoleProfileHandler.class);
private Pattern uriPattern;
private Vertx vertx;
private EventBus eb;
public RoleProfileHandler(Vertx vertx, ResourceStorage storage, String roleProfileUriPattern) {
this.storage = storage;
this.vertx = vertx;
uriPattern = Pattern.compile(roleProfileUriPattern);
eb = vertx.eventBus();
}
public boolean isRoleProfileRequest(HttpServerRequest request) {
return uriPattern.matcher(request.path()).matches();
}
public void handle(final HttpServerRequest request) {
switch (request.method()) {
case GET:
storage.get(request.path(), buffer -> {
request.response().headers().set("Content-Type", "application/json");
if (buffer != null) {
request.response().setStatusCode(StatusCode.OK.getStatusCode());
request.response().end(buffer);
} else {
request.response().setStatusCode(StatusCode.NOT_FOUND.getStatusCode());
request.response().end();
}
});
break;
case PUT:
request.bodyHandler(newBuffer -> {
JsonObject roleProfileProperties = new JsonObject(newBuffer.toString("UTF-8"));
if (JsonUtil.containsNoNestedProperties(roleProfileProperties)) {
storage.put(request.uri() + "?merge=true", newBuffer, status -> {
if (status == StatusCode.OK.getStatusCode()) {
scheduleUpdate();
} else {
request.response().setStatusCode(status);
}
request.response().end();
});
} else {
request.response().setStatusCode(StatusCode.BAD_REQUEST.getStatusCode());
request.response().setStatusMessage(StatusCode.BAD_REQUEST.getStatusMessage());
request.response().end("role profiles can't take nested property values");
}
});
break;
case DELETE:
storage.delete(request.path(), status -> {
if (status == StatusCode.OK.getStatusCode()) {
eb.publish(UPDATE_ADDRESS, "*");
} else {
log.warn("Could not delete '" + (request.uri() == null ? "" : request.uri()) + "'. Error code is '" + (status == null ? "" : status) + "'.");
request.response().setStatusCode(status);
}
request.response().end();
});
break;
default:
request.response().setStatusCode(StatusCode.METHOD_NOT_ALLOWED.getStatusCode());
request.response().end(StatusCode.METHOD_NOT_ALLOWED.getStatusMessage());
}
}
private long updateTimerId = -1;
private void scheduleUpdate() {
vertx.cancelTimer(updateTimerId);
updateTimerId = vertx.setTimer(3000, id -> eb.publish(UPDATE_ADDRESS, "*"));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy