package at.ac.univie.mminf.qskos4j.issues;
import at.ac.univie.mminf.qskos4j.progress.IProgressMonitor;
import at.ac.univie.mminf.qskos4j.progress.StubProgressMonitor;
import at.ac.univie.mminf.qskos4j.result.Result;
import org.openrdf.OpenRDFException;
import org.openrdf.model.URI;
import org.openrdf.repository.RepositoryConnection;
public abstract class Issue<T extends Result<?>> {
public enum IssueType {STATISTICAL, ANALYTICAL}
protected RepositoryConnection repCon;
protected IProgressMonitor progressMonitor = new StubProgressMonitor();
private String id, name, description;
private IssueType type;
private T result;
private Issue dependentIssue;
private URI weblink;
private Issue(String name, String description, IssueType type) {
this.name = name;
this.description = description;
this.type = type;
}
public Issue(String id, String name, String description, IssueType type) {
this(name, description, type);
this.id = id;
}
public Issue(Issue dependentIssue, String id, String name, String description, IssueType type) {
this(id, name, description, type);
this.dependentIssue = dependentIssue;
}
public Issue(String id, String name, String description, IssueType type, URI weblink) {
this(id, name, description, type);
this.weblink = weblink;
}
public Issue(Issue dependentIssue, String id, String name, String description, IssueType type, URI weblink) {
this(dependentIssue, id, name, description, type);
this.weblink = weblink;
}
protected abstract T invoke() throws OpenRDFException;
public final T getResult() throws OpenRDFException {
if (result == null) {
result = invoke();
}
return result;
}
protected final void reset() {
result = null;
if (progressMonitor != null) {
progressMonitor.reset();
}
}
public void setProgressMonitor(IProgressMonitor progressMonitor) {
this.progressMonitor = progressMonitor;
}
public void setRepositoryConnection(RepositoryConnection repCon) {
if (dependentIssue != null) {
dependentIssue.setRepositoryConnection(repCon);
}
this.repCon = repCon;
reset();
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public final IssueType getType() {
return type;
}
public URI getWeblink() {
return weblink;
}
@Override
public String toString() {
return "Issue{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
", type=" + type +
'}';
}
}