Skip to content

Commit

Permalink
Refactor TemplateData out of Template class; improve template updating
Browse files Browse the repository at this point in the history
  • Loading branch information
tkuhn committed Mar 11, 2024
1 parent 021b028 commit c0f358a
Show file tree
Hide file tree
Showing 13 changed files with 225 additions and 182 deletions.
15 changes: 9 additions & 6 deletions src/main/java/com/knowledgepixels/nanodash/NanodashLink.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,23 @@ public NanodashLink(String id, String uri, Nanopub np, IRI templateClass, boolea
}
}
}

final TemplateData td = TemplateData.get();

if (Template.ASSERTION_TEMPLATE_CLASS.equals(templateClass)) {
IRI templateId = Template.getTemplateId(np);
IRI templateId = td.getTemplateId(np);
if (templateId != null) {
templates.add(Template.getTemplate(templateId.stringValue()));
templates.add(td.getTemplate(templateId.stringValue()));
}
} else if (Template.PROVENANCE_TEMPLATE_CLASS.equals(templateClass)) {
IRI templateId = Template.getProvenanceTemplateId(np);
IRI templateId = td.getProvenanceTemplateId(np);
if (templateId != null) {
templates.add(Template.getTemplate(templateId.stringValue()));
templates.add(td.getTemplate(templateId.stringValue()));
}
} else if (Template.PUBINFO_TEMPLATE_CLASS.equals(templateClass)) {
Set<IRI> templateIds = Template.getPubinfoTemplateIds(np);
Set<IRI> templateIds = td.getPubinfoTemplateIds(np);
for (IRI templateId : templateIds) {
templates.add(Template.getTemplate(templateId.stringValue()));
templates.add(td.getTemplate(templateId.stringValue()));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void run() {
System.err.println("Refreshing...");
User.refreshUsers();
Group.refreshGroups();
Template.refreshTemplates();
TemplateData.refreshTemplates();
System.err.println("Refreshing done.");
lastRefresh = System.currentTimeMillis();
}
Expand Down
14 changes: 8 additions & 6 deletions src/main/java/com/knowledgepixels/nanodash/NanopubItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -185,9 +185,11 @@ public void onClick(AjaxRequestTarget target) {
showLessLink.setVisible(!expanded);
assertionPart2.add(showLessLink);

Template assertionTemplate = Template.getTemplate(n.getNanopub());
if (tempalteId != null) assertionTemplate = Template.getTemplate(tempalteId);
if (assertionTemplate == null) assertionTemplate = Template.getTemplate("http://purl.org/np/RAFu2BNmgHrjOTJ8SKRnKaRp-VP8AOOb7xX88ob0DZRsU");
final TemplateData td = TemplateData.get();

Template assertionTemplate = td.getTemplate(n.getNanopub());
if (tempalteId != null) assertionTemplate = td.getTemplate(tempalteId);
if (assertionTemplate == null) assertionTemplate = td.getTemplate("http://purl.org/np/RAFu2BNmgHrjOTJ8SKRnKaRp-VP8AOOb7xX88ob0DZRsU");
List<StatementItem> assertionStatements = new ArrayList<>();
ValueFiller assertionFiller = new ValueFiller(n.getNanopub(), ContextType.ASSERTION, false);
TemplateContext context = new TemplateContext(ContextType.ASSERTION, assertionTemplate.getId(), "assertion-statement", n.getNanopub());
Expand Down Expand Up @@ -228,8 +230,8 @@ protected void populateItem(Item<Statement> item) {
if (hideProvenance) {
provenance.setVisible(false);
} else {
Template provenanceTemplate = Template.getProvenanceTemplate(n.getNanopub());
if (provenanceTemplate == null) provenanceTemplate = Template.getTemplate("http://purl.org/np/RA3Jxq5JJjluUNEpiMtxbiIHa7Yt-w8f9FiyexEstD5R4");
Template provenanceTemplate = td.getProvenanceTemplate(n.getNanopub());
if (provenanceTemplate == null) provenanceTemplate = td.getTemplate("http://purl.org/np/RA3Jxq5JJjluUNEpiMtxbiIHa7Yt-w8f9FiyexEstD5R4");
List<StatementItem> provenanceStatements = new ArrayList<>();
ValueFiller provenanceFiller = new ValueFiller(n.getNanopub(), ContextType.PROVENANCE, false);
TemplateContext prContext = new TemplateContext(ContextType.PROVENANCE, provenanceTemplate.getId(), "provenance-statement", n.getNanopub());
Expand All @@ -254,7 +256,7 @@ protected void populateItem(Item<Statement> item) {
} else {
ValueFiller pubinfoFiller = new ValueFiller(n.getNanopub(), ContextType.PUBINFO, false);
List<String> pubinfoTemplateIds = new ArrayList<>();
for (IRI iri : Template.getPubinfoTemplateIds(n.getNanopub())) pubinfoTemplateIds.add(iri.stringValue());
for (IRI iri : td.getPubinfoTemplateIds(n.getNanopub())) pubinfoTemplateIds.add(iri.stringValue());
pubinfoTemplateIds.add("https://w3id.org/np/RAXVsr624oEAJvCt1WZXoUJ90lFYC5LUMoYHgEUOwmrLw"); // user name
pubinfoTemplateIds.add("https://w3id.org/np/RARJj78P72NR5edKOnu_f4ePE9NYYuW2m2pM-fEoobMBk"); // nanopub label
pubinfoTemplateIds.add("https://w3id.org/np/RA8iXbwvOC7BwVHuvAhFV235j2582SyAYJ2sfov19ZOlg"); // nanopub type
Expand Down
20 changes: 11 additions & 9 deletions src/main/java/com/knowledgepixels/nanodash/PublishForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,10 @@ public PublishForm(String id, final PageParameters pageParams, final PublishPage
fillMode = null;
}

final TemplateData td = TemplateData.get();

String templateId = pageParams.get("template").toString();
targetNamespace = Template.getTemplate(templateId).getTargetNamespace();
targetNamespace = td.getTemplate(templateId).getTargetNamespace();
if (!pageParams.get("target-namespace").isNull()) {
// TODO: properly integrate this feature:
targetNamespace = pageParams.get("target-namespace").toString();
Expand All @@ -136,8 +138,8 @@ public PublishForm(String id, final PageParameters pageParams, final PublishPage
String prTemplateId = pageParams.get("prtemplate").toString();
if (prTemplateId == null) {
if (fillNp != null && !fillOnlyAssertion) {
if (Template.getProvenanceTemplateId(fillNp) != null) {
prTemplateId = Template.getProvenanceTemplateId(fillNp).stringValue();
if (td.getProvenanceTemplateId(fillNp) != null) {
prTemplateId = td.getProvenanceTemplateId(fillNp).stringValue();
} else {
prTemplateId = "http://purl.org/np/RAcm8OurwUk15WOgBM9wySo-T3a5h6as4K8YR5MBrrxUc";
}
Expand Down Expand Up @@ -187,7 +189,7 @@ public PublishForm(String id, final PageParameters pageParams, final PublishPage
if (!pubInfoContexts.contains(c)) pubInfoContexts.add(c);
}
if (fillNp != null && !fillOnlyAssertion) {
for (IRI piTemplateId : Template.getPubinfoTemplateIds(fillNp)) {
for (IRI piTemplateId : td.getPubinfoTemplateIds(fillNp)) {
if (piTemplateId.stringValue().equals(supersedesPubinfoTemplateId)) continue;
TemplateContext c = getPubinfoContext(piTemplateId.stringValue());
if (!pubInfoContexts.contains(c)) pubInfoContexts.add(c);
Expand Down Expand Up @@ -429,11 +431,11 @@ protected void populateItem(ListItem<StatementItem> item) {

final List<Template> provTemplateOptions;
if (pageParams.get("prtemplate-options").isNull()) {
provTemplateOptions = Template.getProvenanceTemplates();
provTemplateOptions = td.getProvenanceTemplates();
} else {
provTemplateOptions = new ArrayList<>();
for (String tid : pageParams.get("prtemplate-options").toString().split(" ")) {
provTemplateOptions.add(Template.getTemplate(tid));
provTemplateOptions.add(td.getTemplate(tid));
}
}

Expand All @@ -444,7 +446,7 @@ protected void populateItem(ListItem<StatementItem> item) {
@Override
public String getDisplayValue(String object) {
if (object == null || object.isEmpty()) return "";
Template t = Template.getTemplate(object);
Template t = td.getTemplate(object);
if (t != null) return t.getLabel();
return "";
}
Expand Down Expand Up @@ -503,7 +505,7 @@ protected void onUpdate(AjaxRequestTarget target) {
@Override
public String getDisplayValue(String object) {
if (object == null || object.isEmpty()) return "";
Template t = Template.getTemplate(object);
Template t = td.getTemplate(object);
if (t != null) return t.getLabel();
return "";
}
Expand All @@ -522,7 +524,7 @@ public void detach() {
public void query(String term, int page, Response<String> response) {
if (term == null) term = "";
term = term.toLowerCase();
for (Template t : Template.getPubInfoTemplates()) {
for (Template t : td.getPubInfoTemplates()) {
String s = t.getLabel();
boolean isAlreadyUsed = false;
for (TemplateContext c : pubInfoContexts) {
Expand Down
130 changes: 1 addition & 129 deletions src/main/java/com/knowledgepixels/nanodash/Template.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
Expand All @@ -29,105 +27,10 @@
import org.nanopub.extra.services.ApiResponse;
import org.nanopub.extra.services.ApiResponseEntry;

import com.opencsv.exceptions.CsvValidationException;

import net.trustyuri.TrustyUriUtils;

public class Template implements Serializable {

private static final long serialVersionUID = 1L;

private static List<Template> assertionTemplates, provenanceTemplates, pubInfoTemplates;
private static Map<String,Template> templateMap;

static void refreshTemplates() {
assertionTemplates = new ArrayList<>();
provenanceTemplates = new ArrayList<>();
pubInfoTemplates = new ArrayList<>();
templateMap = new HashMap<>();
refreshTemplates(assertionTemplates, ASSERTION_TEMPLATE_CLASS);
refreshTemplates(provenanceTemplates, PROVENANCE_TEMPLATE_CLASS);
refreshTemplates(pubInfoTemplates, PUBINFO_TEMPLATE_CLASS);
}

private static void refreshTemplates(List<Template> templates, IRI type) {
Map<String,String> params = new HashMap<>();
params.put("pred", RDF.TYPE.toString());
params.put("obj", type.toString());
params.put("graphpred", Nanopub.HAS_ASSERTION_URI.toString());
ApiResponse templateEntries;
try {
templateEntries = ApiAccess.getAll("find_signed_nanopubs_with_pattern", params);
for (ApiResponseEntry entry : templateEntries.getData()) {
if (entry.get("superseded").equals("1") || entry.get("superseded").equals("true")) continue;
if (entry.get("retracted").equals("1") || entry.get("retracted").equals("true")) continue;
try {
Template t = new Template(entry.get("np"));
if (!t.isUnlisted()) templates.add(t);
templateMap.put(t.getId(), t);
} catch (Exception ex) {
System.err.println("Exception: " + ex.getMessage());
}
}
} catch (IOException|CsvValidationException ex) {
// TODO Better handle this (re-try to get templates)
ex.printStackTrace();
}
}

public static List<Template> getAssertionTemplates() {
if (assertionTemplates == null) refreshTemplates();
return assertionTemplates;
}

public static List<Template> getProvenanceTemplates() {
if (provenanceTemplates == null) refreshTemplates();
return provenanceTemplates;
}

public static List<Template> getPubInfoTemplates() {
if (pubInfoTemplates == null) refreshTemplates();
return pubInfoTemplates;
}

public static Template getTemplate(String id) {
if (assertionTemplates == null) refreshTemplates();
Template template = templateMap.get(id);
if (template != null) return template;
if (TrustyUriUtils.isPotentialTrustyUri(id)) {
try {
Template t = new Template(id);
templateMap.put(id, t);
return t;
} catch (Exception ex) {
System.err.println("Exception: " + ex.getMessage());
return null;
}
}
return null;
}

public static Template getTemplate(Nanopub np) {
IRI templateId = getTemplateId(np);
if (templateId == null) return null;
return getTemplate(templateId.stringValue());
}

public static Template getProvenanceTemplate(Nanopub np) {
IRI templateId = getProvenanceTemplateId(np);
if (templateId == null) return null;
return getTemplate(templateId.stringValue());
}

public static Set<Template> getPubinfoTemplates(Nanopub np) {
Set<Template> templates = new HashSet<>();
for (IRI id : getPubinfoTemplateIds(np)) {
templates.add(getTemplate(id.stringValue()));
}
return templates;
}


private static ValueFactory vf = SimpleValueFactory.getInstance();
public static final IRI ASSERTION_TEMPLATE_CLASS = vf.createIRI("https://w3id.org/np/o/ntemplate/AssertionTemplate");
public static final IRI PROVENANCE_TEMPLATE_CLASS = vf.createIRI("https://w3id.org/np/o/ntemplate/ProvenanceTemplate");
Expand Down Expand Up @@ -199,7 +102,7 @@ public static Set<Template> getPubinfoTemplates(Nanopub np) {
private String nanopubLabelPattern;
private List<IRI> targetNanopubTypes = new ArrayList<>();

private Template(String templateId) throws RDF4JException, MalformedNanopubException, IOException, MalformedTemplateException {
Template(String templateId) throws RDF4JException, MalformedNanopubException, IOException, MalformedTemplateException {
nanopub = Utils.getNanopub(templateId);
processTemplate(nanopub);
}
Expand Down Expand Up @@ -611,35 +514,4 @@ public int compare(IRI arg0, IRI arg1) {

}

public static IRI getTemplateId(Nanopub nanopub) {
for (Statement st : nanopub.getPubinfo()) {
if (!st.getSubject().equals(nanopub.getUri())) continue;
if (!st.getPredicate().equals(WAS_CREATED_FROM_TEMPLATE_PREDICATE)) continue;
if (!(st.getObject() instanceof IRI)) continue;
return (IRI) st.getObject();
}
return null;
}

public static IRI getProvenanceTemplateId(Nanopub nanopub) {
for (Statement st : nanopub.getPubinfo()) {
if (!st.getSubject().equals(nanopub.getUri())) continue;
if (!st.getPredicate().equals(WAS_CREATED_FROM_PROVENANCE_TEMPLATE_PREDICATE)) continue;
if (!(st.getObject() instanceof IRI)) continue;
return (IRI) st.getObject();
}
return null;
}

public static Set<IRI> getPubinfoTemplateIds(Nanopub nanopub) {
Set<IRI> iriSet = new HashSet<>();
for (Statement st : nanopub.getPubinfo()) {
if (!st.getSubject().equals(nanopub.getUri())) continue;
if (!st.getPredicate().equals(WAS_CREATED_FROM_PUBINFO_TEMPLATE_PREDICATE)) continue;
if (!(st.getObject() instanceof IRI)) continue;
iriSet.add((IRI) st.getObject());
}
return iriSet;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public TemplateContext(ContextType contextType, String templateId, String compon
private TemplateContext(ContextType contextType, String templateId, String componentId, String targetNamespace, Nanopub existingNanopub) {
this.contextType = contextType;
// TODO: check whether template is of correct type:
this.template = Template.getTemplate(templateId);
this.template = TemplateData.get().getTemplate(templateId);
this.componentId = componentId;
if (targetNamespace != null) {
this.targetNamespace = targetNamespace;
Expand Down

0 comments on commit c0f358a

Please sign in to comment.