use of org.apache.sling.distribution.DistributionRequest in project sling by apache.
the class SimpleDistributionPackage method fromIdString.
public static SimpleDistributionPackage fromIdString(String id, String type) {
if (!id.startsWith(PACKAGE_START)) {
return null;
}
id = id.substring(PACKAGE_START.length());
String[] parts = id.split(Pattern.quote(DELIM));
if (parts.length < 1 || parts.length > 2) {
return null;
}
String actionString = parts[0];
String pathsString = parts.length < 2 ? null : parts[1];
DistributionRequestType distributionRequestType = DistributionRequestType.fromName(actionString);
SimpleDistributionPackage distributionPackage = null;
if (distributionRequestType != null) {
String[] paths = pathsString == null ? new String[0] : pathsString.split(PATH_DELIM);
DistributionRequest request = new SimpleDistributionRequest(distributionRequestType, paths);
distributionPackage = new SimpleDistributionPackage(request, type);
}
return distributionPackage;
}
use of org.apache.sling.distribution.DistributionRequest in project sling by apache.
the class PersistedJcrEventDistributionTrigger method processEvent.
@Override
protected DistributionRequest processEvent(Event event) throws RepositoryException {
log.debug("processing event {}", event);
DistributionRequest distributionRequest = null;
Session session = getSession();
if (!session.nodeExists(nuggetsPath)) {
initializeNuggetsPath(session);
}
if (session.hasPermission(nuggetsPath, Session.ACTION_ADD_NODE)) {
log.debug("persisting event under {}", nuggetsPath);
Node nuggetsNode = session.getNode(nuggetsPath);
if (nuggetsNode != null) {
String nodeName = String.valueOf(System.nanoTime());
Node createdNode = nuggetsNode.addNode(nodeName, "nt:unstructured");
if (createdNode != null) {
String path = createdNode.getPath();
createdNode.setProperty("identifier", event.getIdentifier());
createdNode.setProperty("path", event.getPath());
createdNode.setProperty("date", event.getDate());
createdNode.setProperty("type", event.getType());
createdNode.setProperty("userData", event.getUserData());
createdNode.setProperty("userID", event.getUserID());
@SuppressWarnings({ "unchecked", "rawtypes" }) Set<Map.Entry> set = event.getInfo().entrySet();
Collection<String> values = new ArrayList<String>();
for (@SuppressWarnings("rawtypes") Map.Entry entry : set) {
values.add(String.valueOf(entry.getKey()) + ":" + String.valueOf(entry.getValue()));
}
createdNode.setProperty("info", values.toArray(new String[values.size()]));
session.save();
log.info("event {} persisted at {}", event, path);
distributionRequest = new SimpleDistributionRequest(DistributionRequestType.ADD, path);
} else {
log.warn("could not create node {}", nuggetsPath + "/" + nodeName);
}
} else {
log.warn("could not get node {} to persist event", nuggetsPath);
}
} else {
log.warn("not enough privileges to persist the event {} under {}", event, nuggetsPath);
}
return distributionRequest;
}
use of org.apache.sling.distribution.DistributionRequest in project sling by apache.
the class DistributionAgentServlet method doPost.
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
DistributionRequest distributionRequest = RequestUtils.fromServletRequest(request);
log.debug("distribution request : {}", distributionRequest);
DistributionAgent agent = request.getResource().adaptTo(DistributionAgent.class);
ResourceResolver resourceResolver = request.getResourceResolver();
if (agent != null) {
try {
DistributionResponse distributionResponse = agent.execute(resourceResolver, distributionRequest);
ServletJsonUtils.writeJson(response, distributionResponse);
log.debug("distribution response : {}", distributionResponse);
} catch (Throwable e) {
log.error("an unexpected error has occurred", e);
ServletJsonUtils.writeJson(response, 503, "an unexpected error has occurred", null);
}
} else {
ServletJsonUtils.writeJson(response, 404, "agent not found", null);
}
}
use of org.apache.sling.distribution.DistributionRequest in project sling by apache.
the class DistributionTriggerServlet method doGet.
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
String secondsParameter = request.getParameter("sec");
int seconds = secondsParameter != null && secondsParameter.length() > 0 ? Integer.parseInt(secondsParameter) : DEFAULT_NUMBER_OF_SECONDS;
if (seconds > MAX_NUMBER_OF_SECONDS) {
seconds = MAX_NUMBER_OF_SECONDS;
} else if (seconds < 0) {
seconds = DEFAULT_NUMBER_OF_SECONDS;
}
DistributionTrigger distributionTrigger = request.getResource().adaptTo(DistributionTrigger.class);
// setup SSE headers
response.setContentType("text/event-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
// needed to allow e.g. the JavaScript EventSource API to make a call from author to this server and listen for the events
// response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); // allowed origins should be explicitly configured
// response.setHeader("Access-Control-Allow-Credentials", "true");
final PrintWriter writer = response.getWriter();
DistributionRequestHandler distributionRequestHandler = new DistributionRequestHandler() {
public void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request) {
writeEvent(writer, request);
}
};
try {
distributionTrigger.register(distributionRequestHandler);
try {
Thread.sleep(seconds * 1000);
} catch (InterruptedException e) {
log.error("thread interrupted", e);
}
distributionTrigger.unregister(distributionRequestHandler);
} catch (DistributionException e) {
response.setStatus(400);
response.getWriter().write("error while (un)registering trigger " + e.toString());
}
}
use of org.apache.sling.distribution.DistributionRequest in project sling by apache.
the class KryoContentSerializerTest method testBuildAndInstallOnSingleShallowPath.
@Test
public void testBuildAndInstallOnSingleShallowPath() throws Exception {
String type = "kryo";
DistributionContentSerializer contentSerializer = new KryoContentSerializer(type);
String tempFilesFolder = "target";
String[] nodeFilters = new String[0];
String[] propertyFilters = new String[0];
DistributionPackageBuilder packageBuilder = new FileDistributionPackageBuilder(type, contentSerializer, tempFilesFolder, null, nodeFilters, propertyFilters);
DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/libs/sub");
DistributionPackage distributionPackage = packageBuilder.createPackage(resourceResolver, request);
Resource resource = resourceResolver.getResource("/libs/sub");
resourceResolver.delete(resource);
resourceResolver.commit();
assertTrue(packageBuilder.installPackage(resourceResolver, distributionPackage));
assertNotNull(resourceResolver.getResource("/libs"));
assertNotNull(resourceResolver.getResource("/libs/sub"));
assertNotNull(resourceResolver.getResource("/libs/sameLevel"));
}
Aggregations