use of won.protocol.util.NeedModelWrapper in project webofneeds by researchstudio-sat.
the class CreateNeedWithFacetsAction method doRun.
@Override
protected void doRun(Event event, EventListener executingListener) throws Exception {
EventListenerContext ctx = getEventListenerContext();
if (ctx.getNeedProducer().isExhausted()) {
logger.info("the bot's need producer is exhausted.");
ctx.getEventBus().publish(new NeedProducerExhaustedEvent());
return;
}
final Dataset needDataset = ctx.getNeedProducer().create();
if (needDataset == null) {
logger.warn("needproducer failed to produce a need model, aborting need creation");
return;
}
URI needUriFromProducer = null;
Resource needResource = WonRdfUtils.NeedUtils.getNeedResource(needDataset);
if (needResource.isURIResource()) {
needUriFromProducer = URI.create(needResource.getURI().toString());
RdfUtils.replaceBaseURI(needDataset, needResource.getURI());
} else {
RdfUtils.replaceBaseResource(needDataset, needResource);
}
final URI needUriBeforeCreation = needUriFromProducer;
NeedModelWrapper needModelWrapper = new NeedModelWrapper(needDataset);
for (URI facetURI : facets) {
WonRdfUtils.FacetUtils.addFacet(needModelWrapper.getNeedModel(), facetURI);
}
final Dataset needDatasetWithFacets = needModelWrapper.copyDataset();
final URI wonNodeUri = ctx.getNodeURISource().getNodeURI();
logger.debug("creating need on won node {} with content {} ", wonNodeUri, StringUtils.abbreviate(RdfUtils.toString(needDatasetWithFacets), 150));
WonNodeInformationService wonNodeInformationService = ctx.getWonNodeInformationService();
final URI needURI = wonNodeInformationService.generateNeedURI(wonNodeUri);
WonMessage createNeedMessage = createWonMessage(wonNodeInformationService, needURI, wonNodeUri, needDatasetWithFacets);
// remember the need URI so we can react to success/failure responses
EventBotActionUtils.rememberInList(ctx, needURI, uriListName);
EventListener successCallback = new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
logger.debug("need creation successful, new need URI is {}", needURI);
ctx.getEventBus().publish(new NeedCreatedEvent(needURI, wonNodeUri, needDatasetWithFacets, null, needUriBeforeCreation));
}
};
EventListener failureCallback = new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
String textMessage = WonRdfUtils.MessageUtils.getTextMessage(((FailureResponseEvent) event).getFailureMessage());
logger.debug("need creation failed for need URI {}, original message URI {}: {}", new Object[] { needURI, ((FailureResponseEvent) event).getOriginalMessageURI(), textMessage });
EventBotActionUtils.removeFromList(ctx, needURI, uriListName);
ctx.getEventBus().publish(new NeedCreationFailedEvent(wonNodeUri, needUriBeforeCreation));
}
};
EventBotActionUtils.makeAndSubscribeResponseListener(createNeedMessage, successCallback, failureCallback, ctx);
logger.debug("registered listeners for response to message URI {}", createNeedMessage.getMessageURI());
ctx.getWonMessageSender().sendWonMessage(createNeedMessage);
logger.debug("need creation message sent with message URI {}", createNeedMessage.getMessageURI());
}
use of won.protocol.util.NeedModelWrapper in project webofneeds by researchstudio-sat.
the class TemplateBasedNeedProducer method wrapModel.
private Dataset wrapModel(final Dataset wrappedDataset) {
if (this.templateModel != null) {
// TODO: TEMPLATE BASED PRODUCER IS WEIRD NOW
NeedModelWrapper needModelWrapper = new NeedModelWrapper(wrappedDataset);
Model needModel = needModelWrapper.copyNeedModel(NeedGraphType.NEED);
Model wrappedModel = RdfUtils.mergeModelsCombiningBaseResource(needModel, this.templateModel);
}
return wrappedDataset;
}
use of won.protocol.util.NeedModelWrapper in project webofneeds by researchstudio-sat.
the class TrigFileNeedProducer method readNeedFromFile.
@Override
public synchronized Dataset readNeedFromFile(final File file) throws IOException {
logger.debug("processing as turtle file: {} ", file);
try (FileInputStream fis = new FileInputStream(file)) {
Dataset dataset = DatasetFactory.createGeneral();
RDFDataMgr.read(dataset, fis, RDFFormat.TRIG.getLang());
NeedModelWrapper needModelWrapper = new NeedModelWrapper(dataset);
return needModelWrapper.copyDataset();
} catch (Exception e) {
logger.error("could not parse trig from file {} ", file, e);
throw e;
}
}
use of won.protocol.util.NeedModelWrapper in project webofneeds by researchstudio-sat.
the class ExecuteCreateNeedCommandAction method doRun.
@Override
protected void doRun(Event event, EventListener executingListener) throws Exception {
if (!(event instanceof CreateNeedCommandEvent))
return;
CreateNeedCommandEvent createNeedCommandEvent = (CreateNeedCommandEvent) event;
Dataset needDataset = createNeedCommandEvent.getNeedDataset();
List<URI> facets = createNeedCommandEvent.getFacets();
if (needDataset == null) {
logger.warn("CreateNeedCommandEvent did not contain a need model, aborting need creation");
getEventListenerContext().getEventBus().publish(new NeedCreationAbortedEvent(null, null, createNeedCommandEvent, "CreateNeedCommandEvent did not contain a need model, aborting need creation"));
return;
}
URI needUriFromProducer = null;
Resource needResource = WonRdfUtils.NeedUtils.getNeedResource(needDataset);
if (needResource.isURIResource()) {
needUriFromProducer = URI.create(needResource.getURI().toString());
RdfUtils.replaceBaseURI(needDataset, needResource.getURI());
} else {
RdfUtils.replaceBaseResource(needDataset, needResource);
}
final URI needUriBeforeCreation = needUriFromProducer;
NeedModelWrapper needModelWrapper = new NeedModelWrapper(needDataset);
for (URI facetURI : facets) {
WonRdfUtils.FacetUtils.addFacet(needModelWrapper.getNeedModel(), facetURI);
}
final Dataset needDatasetWithFacets = needModelWrapper.copyDataset();
final URI wonNodeUri = getEventListenerContext().getNodeURISource().getNodeURI();
logger.debug("creating need on won node {} with content {} ", wonNodeUri, StringUtils.abbreviate(RdfUtils.toString(needDatasetWithFacets), 150));
WonNodeInformationService wonNodeInformationService = getEventListenerContext().getWonNodeInformationService();
final URI needURI = wonNodeInformationService.generateNeedURI(wonNodeUri);
WonMessage createNeedMessage = createWonMessage(wonNodeInformationService, needURI, wonNodeUri, needDatasetWithFacets, createNeedCommandEvent.isUsedForTesting(), createNeedCommandEvent.isDoNotMatch());
// remember the need URI so we can react to success/failure responses
EventBotActionUtils.rememberInList(getEventListenerContext(), needURI, createNeedCommandEvent.getUriListName());
EventListener successCallback = new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
logger.debug("need creation successful, new need URI is {}", needURI);
getEventListenerContext().getEventBus().publish(new CreateNeedCommandSuccessEvent(needURI, needUriBeforeCreation, createNeedCommandEvent));
}
};
EventListener failureCallback = new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
String textMessage = WonRdfUtils.MessageUtils.getTextMessage(((FailureResponseEvent) event).getFailureMessage());
logger.debug("need creation failed for need URI {}, original message URI {}: {}", new Object[] { needURI, ((FailureResponseEvent) event).getOriginalMessageURI(), textMessage });
getEventListenerContext().getEventBus().publish(new CreateNeedCommandFailureEvent(needURI, needUriBeforeCreation, createNeedCommandEvent, textMessage));
EventBotActionUtils.removeFromList(getEventListenerContext(), needURI, createNeedCommandEvent.getUriListName());
}
};
EventBotActionUtils.makeAndSubscribeResponseListener(createNeedMessage, successCallback, failureCallback, getEventListenerContext());
logger.debug("registered listeners for response to message URI {}", createNeedMessage.getMessageURI());
getEventListenerContext().getWonMessageSender().sendWonMessage(createNeedMessage);
logger.debug("need creation message sent with message URI {}", createNeedMessage.getMessageURI());
}
use of won.protocol.util.NeedModelWrapper in project webofneeds by researchstudio-sat.
the class AnalyzeBehaviour method getUniqueGoalId.
private static String getUniqueGoalId(Resource goal, Dataset needDataset, URI connectionURI) {
// TODO: GOAL STATE RETRIEVAL IS NOT BASED ON THE CORRECT URI SO FAR
if (goal.getURI() != null) {
return goal.getURI();
} else {
NeedModelWrapper needWrapper = new NeedModelWrapper(needDataset);
StringWriter writer = new StringWriter();
Model shapesModel = needWrapper.getShapesGraph(goal);
if (shapesModel != null) {
shapesModel.write(writer, "TRIG");
}
Model dataModel = needWrapper.getDataGraph(goal);
if (dataModel != null) {
dataModel.write(writer, "TRIG");
}
return connectionURI + "#" + writer.toString().replaceAll("\\R", " ");
}
}
Aggregations