X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.common%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fcommon%2Fissue%2FAnonymousIssue.java;fp=bundles%2Forg.simantics.db.common%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fcommon%2Fissue%2FAnonymousIssue.java;h=0a98dc29ac20bc3c3ca25fd3164ebc8192517797;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.common/src/org/simantics/db/common/issue/AnonymousIssue.java b/bundles/org.simantics.db.common/src/org/simantics/db/common/issue/AnonymousIssue.java new file mode 100644 index 000000000..0a98dc29a --- /dev/null +++ b/bundles/org.simantics.db.common/src/org/simantics/db/common/issue/AnonymousIssue.java @@ -0,0 +1,101 @@ +package org.simantics.db.common.issue; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.simantics.databoard.Bindings; +import org.simantics.db.Issue; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.procedure.adapter.TransientCacheListener; +import org.simantics.db.common.request.IndexRoot; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.issues.ontology.IssueResource; +import org.simantics.layer0.Layer0; + +public class AnonymousIssue implements Issue { + + public final Resource type; + public final Resource[] contexts; + + public AnonymousIssue(Resource type, Resource ... contexts) { + this.type = type; + this.contexts = contexts; + } + + public AnonymousIssue(Resource type, Collection contexts) { + this.type = type; + this.contexts = contexts.toArray(new Resource[contexts.size()]); + } + + public void writeAdditionalContext(WriteGraph graph, Resource issue) throws DatabaseException { + + IssueResource IR = IssueResource.getInstance(graph); + + // The main context + graph.claim(issue, IR.Issue_HasContext, IR.Issue_HasContext_Inverse, contexts[0]); + // A possible parent + Layer0 L0 = Layer0.getInstance(graph); + Resource parent = graph.getPossibleObject(contexts[0], L0.PartOf); + if(parent != null) { + graph.claim(issue, IR.Issue_HasContext, IR.Issue_HasContext_Inverse, parent); + } + + } + + @Override + public Resource write(WriteGraph graph, Resource source) throws DatabaseException { + + Layer0 L0 = Layer0.getInstance(graph); + IssueResource IR = IssueResource.getInstance(graph); + + Resource model = graph.syncRequest(new IndexRoot(source), TransientCacheListener.instance()); + + Resource issue = graph.newResource(); + graph.claim(issue, L0.InstanceOf, null, type); + graph.addLiteral(issue, L0.HasName, L0.NameOf, L0.String, UUID.randomUUID().toString(), Bindings.STRING); + + graph.claim(issue, IR.Issue_HasContexts, IR.Issue_HasContexts_Inverse, ListUtils.create(graph, L0.List, contexts)); + + writeAdditionalContext(graph, issue); + + DateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + String created = format.format(Calendar.getInstance().getTime()); + graph.addLiteral(issue, IR.Issue_creationTime, IR.Issue_creationTime_Inverse, L0.String, created, Bindings.STRING); + graph.claim(source, IR.IssueSource_Manages, IR.IssueSource_Manages_Inverse, issue); + graph.claim(model, L0.ConsistsOf, L0.PartOf, issue); + + return issue; + + } + + @Override + public String toString() { + return Arrays.toString(contexts); + } + + @Override + public Resource getType() { + return type; + } + + @Override + public Object getMainContext() { + return contexts[0]; + } + + @Override + public Set getContexts() { + HashSet result = new HashSet(); + for(Resource context : contexts) result.add(context); + return result; + } + +}