ActivityHandlerDelete.java
package org.linkedopenactors.rdfpub.store.rdf4j;
import java.util.Optional;
import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.RDF;
import org.linkedopenactors.rdfpub.domain.commonsrdf.ActivityPubObject;
import org.linkedopenactors.rdfpub.domain.commonsrdf.ActivityPubObjectFactory;
import org.linkedopenactors.rdfpub.domain.commonsrdf.ActivityPubStore;
import org.linkedopenactors.rdfpub.domain.commonsrdf.ActivityType;
import org.linkedopenactors.rdfpub.domain.commonsrdf.Tombstone;
import org.linkedopenactors.rdfpub.domain.commonsrdf.vocab.AS;
import org.linkedopenactors.rdfpub.domain.commonsrdf.vocab.PROV;
import org.springframework.stereotype.Component;
@Component
public class ActivityHandlerDelete implements ActivityHandler {
private RDF rdf;
private ActivityPubObjectFactory activityPubObjectFactory;
public ActivityHandlerDelete(RDF rdf, ActivityPubObjectFactory activityPubObjectFactory) {
this.rdf = rdf;
this.activityPubObjectFactory = activityPubObjectFactory;
}
@Override
public boolean isResponsibleFor(ActivityType activityType) {
return ActivityType.DELETE.equals(activityType);
}
@Override
public void addToCollection( ActionInfo actionInfo, IRI collection, ActivityPubStore activityPubStore) {
// public void addToOutbox(ActionInfo actionInfo, ActivityPubStore activityPubStore) {
addTo(actionInfo, collection, activityPubStore);
}
// @Override
// public void addToInbox(ActionInfo actionInfo, ActivityPubStore activityPubStore) {
// addTo(actionInfo, actionInfo.getStoreOwner().getInbox(), activityPubStore);
// }
private void addTo(ActionInfo actionInfo, IRI collection, ActivityPubStore activityPubStore) {
provPrepare(activityPubStore, actionInfo);
actionInfo.getActivity().getObject().stream()
.map(x->activityPubStore.find(x))
.filter(Optional::isPresent)
.map(Optional::get)
.map(this::toTombstone)
.forEach(ts->activityPubStore.add(ts, actionInfo.toString()));
actionInfo.addMessage("ActivityHandlerDelete#addCollectionItem");
activityPubStore.addCollectionItem(collection, actionInfo.getActivitySubject(), actionInfo.toString());
actionInfo.addMessage("ActivityHandlerDelete#add");
activityPubStore.add(actionInfo.getActivity().asConvertable().isolated(), actionInfo.toString());
// activityPubStore.removeCollectionItem TODO !! remove from in/outbox
}
private Tombstone toTombstone(ActivityPubObject object) {
Graph graph = rdf.createGraph();
ActivityPubObject ao = activityPubObjectFactory.create(object.getSubject(), graph);
ao.addType(rdf.createIRI(AS.Tombstone));
return ao.asConvertable().asTombstone();
}
/**
* Adds some http://www.w3.org/ns/prov# properties to the activity and the object(s).
* @param activity
*/
private void provPrepare(ActivityPubStore activityPubStore, ActionInfo actionInfo) {
actionInfo.getActivity().addType(rdf.createIRI(PROV.Activity));
actionInfo.getActivity().resolveObject().forEach(o->{
o.addType(rdf.createIRI(PROV.Entity));
o.setWasAttributedTo(activityPubStore.getOwner());
});
}
}