OrderedCollectionPageDefault.java

package org.linkedopenactors.rdfpub.domain.commonsrdf;

import java.util.Set;

import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.Literal;
import org.apache.commons.rdf.api.RDF;
import org.apache.commons.rdf.api.Triple;
import org.linkedopenactors.rdfpub.domain.commonsrdf.vocab.AS;
import org.linkedopenactors.rdfpub.domain.commonsrdf.vocab.Vocabularies;

public class OrderedCollectionPageDefault extends ActivityPubObjectDefault implements OrderedCollectionPage {

	private AS as;

	public OrderedCollectionPageDefault(RDF rdf, IRI subject, Graph graph, GraphToStringConverter graphToStringConverter, SubjectProvider subjectProvider, 
	Vocabularies vocabularies, InstanceProperties instanceProperties) {
		super(rdf, subject, graph, graphToStringConverter, subjectProvider, vocabularies, instanceProperties);
		as = vocabularies.getActivityStreams();
	}
	
	@Override
	public IRI partOf() {
		return getIri(as.partOf()).orElseThrow();
	}

	@Override
	public long totalItems() {
		return  asGraph().stream(getSubject(), as.totalItems(), null)
				.findFirst()
				.map(Triple::getObject)
				.map(Literal.class::cast)
				.map(l -> l.getLexicalForm())
				.map(Long::valueOf)
				.orElse(0L);
	}

	@Override
	public void setPartOf(IRI partOf) {
		set(as.partOf(), partOf);
	}

	@Override
	public void setTotalItems(int size) {
		set(as.totalItems(), rdf.createLiteral(Integer.toString(size), rdf.createIRI("http://www.w3.org/2001/XMLSchema#nonNegativeInteger")));
		
	}

	@Override
	public void addActivity(Activity activity) {
		add(as.items(), activity.getSubject());
		this.add(activity.asGraph());
	}

	@Override
	public void setItems(Set<IRI> items) {
		set(as.items(), items);
	}
}