private static Logger logger = Logger.getLogger(CachedContent.class.getName());
public final static String URL = "url";
public Result process(Map parameter, Context context) throws Exception {
URI uri = (URI)parameter.get(SimpleProcessor.INPUT);
String url = "";
if ( context instanceof HttpContext ) {
url = ((HttpContext)context).getContextPath()+"/"+ProcessorManager.getInstance().getURI(this)+"?input="+uri;
}
// check for cached result
Map resultEntries = new HashMap();
Value output = (Value)context.getStore(Store.CACHE).get(uri.toString());
if ( output == null ) {
output = Projector.getRepository().getResource(uri, context.getCredentials());
if ( output instanceof InputStreamValue ) {
output = new MultipleStreamableValue((StreamableValue)output);
}
// cache result...
context.getStore(Store.CACHE).put(uri.toString(), output);
// ...and add dispose condition
Map jobParameter = new HashMap();
jobParameter.put(Dispose.STORE, new StringValue(Store.stores[Store.CACHE]));
jobParameter.put(Dispose.KEY, new StringValue(uri.toString()));
EventExpression expression = new EventExpression("Update");
expression.addProperty(EventExpression.DEPTH, "0");
expression.addProperty(EventExpression.URI, uri.toString());
Scheduler.getInstance().registerJob(new Job(context.getProcessId()+":"+context.getStep(), new URIValue("dispose"), expression, expression, jobParameter, false, false));
Scheduler.getInstance().saveJobs();
}
resultEntries.put(SimpleProcessor.OUTPUT, output);
// build url to activate this processor on top level