package won.protocol.service.impl;
import org.apache.jena.query.Dataset;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import won.cryptography.service.RandomNumberService;
import won.protocol.service.WonNodeInfo;
import won.protocol.service.WonNodeInformationService;
import won.protocol.util.WonRdfUtils;
import won.protocol.util.linkeddata.LinkedDataSource;
import won.protocol.util.linkeddata.WonLinkedDataUtils;
import java.net.URI;
/**
* User: fsalcher
* Date: 17.09.2014
*/
public class WonNodeInformationServiceImpl implements WonNodeInformationService
{
private static final int RANDOM_ID_STRING_LENGTH = 20;
@Autowired
private RandomNumberService randomNumberService;
@Autowired
private LinkedDataSource linkedDataSource;
@Value(value = "${uri.node.default}")
private URI defaultWonNodeUri;
@Override
public WonNodeInfo getWonNodeInformation(URI wonNodeURI) {
assert wonNodeURI != null;
Dataset nodeDataset = linkedDataSource.getDataForResource(wonNodeURI);
WonNodeInfo info = WonRdfUtils.WonNodeUtils.getWonNodeInfo(wonNodeURI, nodeDataset);
if (info == null) throw new IllegalStateException("Could not obtain WonNodeInformation for URI " + wonNodeURI);
return info;
}
@Override
public URI generateNeedURI() {
return generateNeedURI(getDefaultWonNodeURI());
}
@Override
public URI generateEventURI(URI wonNodeURI) {
WonNodeInfo wonNodeInformation = getWonNodeInformation(wonNodeURI);
return URI.create(wonNodeInformation.getEventURIPrefix() + "/"+
generateRandomID());
}
@Override
public URI generateConnectionURI() {
return generateConnectionURI(getDefaultWonNodeURI());
}
@Override
public URI generateConnectionURI(URI wonNodeURI) {
WonNodeInfo wonNodeInformation = getWonNodeInformation(wonNodeURI);
return URI.create(wonNodeInformation.getConnectionURIPrefix() +"/"+ generateRandomID());
}
@Override
public URI generateEventURI() {
return generateEventURI(getDefaultWonNodeURI());
}
@Override
public URI generateNeedURI(URI wonNodeURI) {
WonNodeInfo wonNodeInformation = getWonNodeInformation(wonNodeURI);
return URI.create(wonNodeInformation.getNeedURIPrefix() + "/"+
generateRandomID());
}
@Override
public URI getWonNodeUri(final URI resourceURI) {
URI wonNodeURI = WonLinkedDataUtils.getWonNodeURIForNeedOrConnectionURI(resourceURI, linkedDataSource);
if (wonNodeURI == null) throw new
IllegalStateException("Could not obtain WoN node URI for resource " + resourceURI);
return wonNodeURI;
}
@Override
public URI getDefaultWonNodeURI() {
return defaultWonNodeUri;
}
public void setDefaultWonNodeUri(final URI defaultWonNodeUri) {
this.defaultWonNodeUri = defaultWonNodeUri;
}
public void setLinkedDataSource(final LinkedDataSource linkedDataSource) {
this.linkedDataSource = linkedDataSource;
}
public void setRandomNumberService(RandomNumberService randomNumberService) { this.randomNumberService = randomNumberService; }
private String generateRandomID() {
return randomNumberService.generateRandomString(RANDOM_ID_STRING_LENGTH);
}
}