SiDIFTemplates
Jump to navigation
Jump to search
Overview
This page contains Simple Data Interchange Format (SiDIF) templates. These templates can be used as a template for a Template:Wikitask. For convenience there is a template Template:TopicWikitasks that creates a set of wikitasks for some of the templates below.
Templates
category
@include(wiki.SiDIFTemplates.defs)
@// macro to create pageschema from simela triples
@def pageschema(Topic topic) {
@escape("xml") {
<PageSchema>
<semanticforms_Form name="@topic.name">
<standardInputs freeTextLabel="Free text"/>
</semanticforms_Form>
<Template name="@topic.name" format="standard">
@for (Property property:topic.propertiesByIndex()) {
<Field name="@property.name">
<semanticforms_FormInput>
<InputType>text</InputType>
</semanticforms_FormInput>
<semanticmediawiki_Property name="@(topic.name) @(property.name)">
<Type>Text</Type>
</semanticmediawiki_Property>
</Field>
}
</Template>
</PageSchema>
}
}
@// generate the category for the given topic
@def category(Topic topic) {
__NOTOC__
@// show the wikiDocumentation for this category
{{#ask: [[Topic name::@(topic.name)]] | ?Topic wikiDocumentation= | mainlabel=-}}
@(topic.pluralName) may be added and edited with the form [[has default form::@(topic.name)]]
* [[List of @(topic.pluralName)]]
<div class="toccolours mw-collapsible mw-collapsed" style="width:1024px">
@topic.name @(i18n("description"))
<div class="mw-collapsible-content">
@uml("uml",topic)
* [[Help:@topic.name]]
* [[Concept:@topic.name]]
* [[:Template:@topic.name]]
* [[:Form:@topic.name]]
=== Properties ===
@for (Property property:topic.propertiesByIndex()) {
* [[Property:@(topic.name) @(property.name)]]
}
</div>
</div>
}
@category(contextSetting.getMaintopic())
listof
@include(wiki.SiDIFTemplates.defs)
@// generate the list of page for the given topic
@def listof(Topic topic) {
__NOCACHE__
@topicheader(topic)
== @topic.pluralName ==
@("{{")#ask: [[Concept:@topic.name]]
@for (Property property:topic.propertiesByIndex()) {
| ?@topic.name @(property.name) = @property.name
}
@("}}")
{{#forminput:form=@topic.name|button text=add @topic.name}}
<div class="toccolours mw-collapsible mw-collapsed" style="width:1024px">
=== SiDIF ===
<div class="mw-collapsible-content">
@("{{")#ask: [[Concept:@topic.name]]
| ?#=pageid
@for (Property property:topic.propertiesByIndex()) {
| ?@topic.name @property.name = @property.name
}
| mainlabel=-
| format=template
| named args=yes
| template=@topic.name
| userparam=sidif
| limit=300
@("}}")
</div>
</div>
[[:Category:@topic.name]]
}
@listof(contextSetting.getMaintopic())
concept
@include(wiki.SiDIFTemplates.defs)
@// generate the given topic as a concept
@def topic(Topic topic) {
__NOCACHE__
@("{{")Topic
|name=@topic.name
|pluralName=@if (topic.pluralName) {@(topic.pluralName)} else { @(topic.name)s }
|icon=@topic.icon
|iconUrl=@topic.iconUrl
|documentation=@topic.documentation
|wikiDocumentation=@topic.wikiDocumentation
|defaultstoremode=@topic.defaultstoremode
|cargo=@topic.cargo
|context=@topic.context
|storemode=property
@("}}")
{{Icon|name=edit|size=24}}{{Link|target=Special:FormEdit/Topic/{{FULLPAGENAME}}|title=edit @topic.name}}<br>
@("{{")Topic
|viewmode=masterdetail
|storemode=none
@("}}")
{{#forminput:form=Property|button text=add Property}}
=== Documentation ===
@topic.wikiDocumentation
@uml("uml",topic)
@("{{")#concept:
@if (topic.conceptProperty) {
[[@(topic.name) @(topic.conceptProperty.name)::+]]
} else {
[[Category:@topic.name]]
}
|@(topic.pluralName)
@seealso(topic)
@("}}")
[[Category:@topic.name]]
}
@topic(contextSetting.getMaintopic())
properties
@include(wiki.SiDIFTemplates.defs)
@// properties for a specific Topic
@def property(Topic topic, Property property) {
@("{{")Property
|name=@property.name
|documentation=@property.documentation
|type=Special:Types/@property.type
|label=@property.label
|primaryKey=@property.primaryKey
|mandatory=@property.mandatory
|uploadable=@property.uploadable
|size=@property.size
|index=@property.index
|sortPos=@property.sortPos
|defaultValue=@property.defaultValue
|inputType=@property.inputType
|allowedValues=@property.allowedValues
@{
String topicWithConcept=topic.pageid;
if (topicWithConcept.startsWith("Konzept:")) {
topicWithConcept=topicWithConcept.replace("Konzept:","Concept:");
}
if (!topicWithConcept.startsWith("Concept:")) {
topicWithConcept="Concept:"+topicWithConcept;
}
}
|topic=@(topicWithConcept)
|storemode=property
@("}}")
[[Has type::@property.type]]
This is a Property with type @("{{#show: {{FULLPAGENAMEE}} | ?Property type#- }}")
}
@// properties for the given topic
@def properties(Topic topic) {
== properties of @(topic.name) ==
@for (Property property:topic.getProperties()) {
=== [[Property:@(topic.name) @(property.name)]] ===
<pre>
@(property(topic,property))
</pre>
}
}
@properties(contextSetting.getMaintopic())
instances
@// This is a rythm template
@// the args are the standard wikiTask arguments
@import org.sidif.triple.TripleQuery
@import org.sidif.triple.Triple
@args() {
String title
String logo
org.sidif.wiki.WikiTask wikiTask
org.sidif.triple.TripleStore tripleStore
}
@// here some java code is declared and executed
@// the resulting variables can be used as template variables later
@{
TripleQuery query=tripleStore.query();
TripleQuery topics=query.query(null,"isA","Topic");
String maintopic=wikiTask.getParams();
}
@def wikison(TripleQuery query,String topicName, String name) {
@("{{")@topicName
@{ TripleQuery properties=query.query(name,null,null) }
|name=@name
@for (Triple property:properties.getTriples()) {
|@property.getPredicate()=@property.getObject()
}
|storeMode=subobject
@("}}")
}
@def wikison1toN(TripleQuery query,String topicName,String link,String linkTopicName) {
@{TripleQuery instances=query.query(null,"isA",topicName) }
@for (Triple instance:instances.getTriples()) {
@wikison(query,topicName,instance.getSubject().toString())
@{TripleQuery linstances=query.query(null,link,instance.getSubject().toString()) }
@for (Triple linstance:linstances.getTriples()) {
@wikison(query,linkTopicName,linstance.getSubject().toString())
}
}
}
@wikison1toN(query,maintopic,"answer","ZAnswer")
[[Category:@maintopic]]
form
@include(wiki.SiDIFTemplates.defs)
@// generate the form for the given topic
@def form(Topic topic) {
<noinclude>
This is the @("{{smartMediaWiki}}")-Form for "@topic.name".
Create a new @topic.name by entering a new pagename for a @topic.name
into the field below.
If you enter an existing @topic.name pagename - you will edit the @topic.name
with that pagename.
@{
String multiple="";
if ("subobject".equals(topic.defaultstoremode)) {
multiple="|multiple";
}
}
@("{{")#forminput:form=@topic.name|values from concept=@(topic.name)@("}}")
</noinclude><includeonly>
<div id="wikiPreview" style="display: none; padding-bottom: 25px; margin-bottom: 25px; border-bottom: 1px solid #AAAAAA;"></div>
@formtemplate(topic,multiple)
@("'''Freitext:'''")
@("{{{standard input|free text|rows=10}}}")
@("{{{standard input|summary}}}")
@("{{{standard input|minor edit}}} {{{standard input|watch}}}")
@("{{{standard input|save}}} {{{standard input|preview}}} {{{standard input|changes}}} {{{standard input|cancel}}}")
</includeonly>
}@// avoid newline
@form(contextSetting.getMaintopic())
template
@include(wiki.SiDIFTemplates.defs)
@// show the given property Label
@def String propertyLabel(Property property) {
if ((property.label!=null) && (!"".equals(property.label.trim()))) {return property.label;} else {return property.name;}
}
@// show the given Property
@def showProperty(Property property) {
@{
String linkPre="";
String linkPost="";
String namespace="";
if ((property.type!=null) && (property.type.endsWith("Page"))) { linkPre="[[";linkPost="]]";}
// do not do namespace handling at this time
// use map namespace from mediawik-japi!
// if (property.namespace!=null) { namespace=property.namespace+":";}
}@{{#if:{{{@(property.name)|}}}|@(linkPre)@(namespace)@("{{{")@(property.name)@("|}}}")@(linkPost)|}}
}
@// set the given Property
@def setProperty(Property property){
@(property.name)=@("{{{")@(property.name)|@("}}}")
}
@// sidif - newline relevant
@def sidif(Topic topic) {
@("{{#if:{{{?pageid|}}}|{{#replace:{{#replace:{{{?pageid}}}|#|}}|-|_}}") isA @(topic.name)<br>@("|}}")@for (Property property:topic.propertiesByIndex()){@// avoid newline
@("{{#if:{{{")?@(property.name)@("|}}}|")"@("{{{")?@(property.name)@("}}}")" is @property.name of it <br>|@("}}")}
}
@// includeonly part of wiki template
@def includeonly(Topic topic, boolean withComment) {
@("{{#switch:"){{{userparam|}}}|sidif=@sidif(topic)
|#default=@("{{#switch:"){{{storemode|}}}
|none=
@if ("subobject".equals(topic.defaultstoremode)) {
|subobject=@("{{#subobject:-")
|isA=@(topic.name)
@for (Property property:topic.propertiesByIndex()) {
|@(topic.name) @setProperty(property)
}
@("}}")@//#subobject
}
|@("{{#set:")
|isA=@(topic.name)
@for (Property property:topic.propertiesByIndex()) {
|@topic.name @setProperty(property)
}
@("}}")@//#set
@("}}")@//#switch
@("{{#switch:") {{{viewmode|}}}
|masterdetail=
@for (TopicLink topicLink:topic.sourceTopicLinks.mTopicLinks) {
@if (topicLink.targetTopic) {
=== @(topicLink.targetRole) ===
@("{{")#ask:[[Concept:@(topicLink.targetTopic.name)]][[@(topicLink.targetTopic.name) @(topicLink.sourceRole)::@("{{FULLPAGENAME}}")]]
@for (Property property:topicLink.targetTopic.propertiesByIndex()) {
| ?@(topicLink.targetTopic.name) @property.name = @property.name
}
@("}}")
}
}
|tableheader=@("{{{!}}") class='wikitable'
@{String delim="!";}
@for (Property property:topic.propertiesByIndex()) {@(delim)@(property.name)@{delim="!!";}}
@("\n{{!}}-")
|tablerow=
@{delim="{{!}}"}
@for (Property property:topic.propertiesByIndex()) {@(delim){{{@(property.name)|}}}@{delim="{{!}}{{!}}"}}
@("\n{{!}}-")
|tablefooter=@("{{!}}}")
|labelfield=
@for (Property property:topic.propertiesByIndex()) {@(property.name)=@(showProperty(property))<br>}
|#default=@("{{{!}}") class='wikitable'
! colspan='2' @("{{!}}")@(topic.name)
@("{{!}}-")
@for (Property property:topic.propertiesByIndex()) {@("!")@(propertyLabel(property))
@("{{!}}") @(showProperty(property))
@("{{!}}")-
}
@("{{!}}}")
@("}}")@//#switch
@("}}")@//#switch
@// do not add subobjects to category - this would make selecting the default form difficult
@if ("property".equals(topic.defaultstoremode)) {
[[Category:@topic.name]]
}
}
@// wikiSonUsage
@def wikiSonUsage(Topic topic,String modeLine) {
<pre>@("{{")@topic.name
@for (Property property:topic.propertiesByIndex()) {
|@property.name=
}
|@modeLine
@("}}")
</pre>
}@// avoid newline
@// noinclude part of wiki template
@def noinclude(Topic topic) {
This is the template {{Link|target=Template:@topic.name|title=@topic.name}}.
It belongs to the concept/topic {{Link|target=:Concept:@topic.name}}<br>
You may find examples for the use of this template via the {{Link|target=List of @(topic.pluralName)}}.
=== Usage ===
@{ String[] storeModes={"subobject","property","none"};}
@for (String storeMode:storeModes) {
==== storemode @storeMode ====
@wikiSonUsage(topic,"storemode="+storeMode)
}
@{ String[] viewModes={"tableheader","tablerow","tablefooter","labelfield"};}
@for (String viewMode:viewModes) {
==== viewmode @viewMode ====
@wikiSonUsage(topic,"viewmode="+viewMode)
}
=== Source ===
@("<source") lang='html4strict'>
@includeonly(topic,true)
@("<")@("/source>")
Click on "Edit" to edit the Source of this Template.
}@// avoid newline
@def template(Topic maintopic) {<noinclude>
@copyright()
@noinclude(maintopic)
</noinclude><includeonly>@includeonly(maintopic,false)</includeonly>}@// avoid newline
@template(contextSetting.getMaintopic())
javacodegen
@include(wiki.SiDIFTemplates.defs)
=== java code ===
@("<source lang='java' id='javacode'>")
@verbatim() {
@// This is a rythm template
@// the args are the standard wikiTask arguments
@import org.sidif.triple.TripleQuery
@import org.sidif.triple.Triple
@import com.alibaba.fastjson.JSON
@args() {
String title
String logo
org.sidif.wiki.WikiTask wikiTask
org.sidif.triple.TripleStore tripleStore
}
}
@// user code section
@// smartGenerator compatible like:
@// // >>>{User defined import section}{::com::bitplan::ooa::OOAAssociation}{S37C96C0C016C}
@def printUserCode(String codetype,String key,String modelID) {
// >>>@("{")@(codetype)@("}")@("{")@(key)@("}")@("{")@(modelID)@("}")
// <<<@("{")@(codetype)@("}")@("{")@(key)@("}")@("{")@(modelID)@("}")
}
@// first character to Upper
@def String firstToUpper(String string) {
StringBuffer sb = new StringBuffer(string);
sb.replace(0, 1, string.substring(0, 1).toUpperCase());
return sb.toString();
}
@// generate javacode for the given topic
@def javacode(Context context) {
@("@def static {")
/**
* Base class
*/
static abstract class TopicBase {
/**
* initialize
*/
public void init(TripleQuery query) {
}
} // TopicBase
@for(Topic topic:context.getTopics()) {
/**
* @topic.name
* @topic.documentation
*/
public static class @topic.name extends TopicBase @("{")
public String pageid;
@for(Property property:topic.getProperties()) {
public String @property.name;
}
@for(Property property:topic.getProperties()) {
public String get@(firstToUpper(property.name))() { return @property.name; }
public void set@(firstToUpper(property.name))(String p@(firstToUpper(property.name))) { @property.name=p@(firstToUpper(property.name)); }
}
/**
* convert this @topic.name to a JSON string
*/
public String toJson() { return JSON.toJSONString(this); }
/**
* get the pageid for this topic
*/
public String getPageid() { return pageid; };
/**
* default constructor for @topic.name
*/
public @(topic.name)() {}
/**
* construct a @topic.name from the given Triple
* @("@")param query - the TripleQuery to get the triples from
* @("@")param p@(topic.name)Triple - the triple to construct me from
*/
public @(topic.name)(TripleQuery query,Triple p@(topic.name)Triple) @("{")
this(query,p@(topic.name)Triple.getSubject().toString());
@("} // constructor")
/**
* construct a @topic.name from the given pageId
* @("@")param query - the TripleQuery to get the triples from
* @("@")param pageid - pageid
*/
public @(topic.name)(TripleQuery query,String pageid) @("{")
this.pageid=pageid;
@for(Property property:topic.getProperties()) {
Triple @(property.name)Triple=query.selectSingle(pageid,"@property.name",null);
if (@(property.name)Triple==null)
@(property.name)Triple=query.selectSingle(pageid,"Property:@(topic.name)_@property.name",null);
if (@(property.name)Triple!=null)
@(property.name)=@(property.name)Triple.getObject().toString();
}
init(query);
@("}") // constructor for @topic.name
@printUserCode("user defined topic code",topic.name,topic.name)
@("}") // class @topic.name
/**
* Manager for @topic.name
*/
public static class @(topic.name)Manager extends TopicBase @("{")
public String topicName="@(topic.name)";
public transient List<@topic.name> m@(topic.name)s=new ArrayList<@(topic.name)>();
public transient Map<String,@topic.name> m@(topic.name)Map=new LinkedHashMap<String,@(topic.name)>();
/**
* get my @(topic.pluralName)
*/
public List<@topic.name> get@(topic.pluralName)() {
List<@topic.name> result=this.m@(topic.name)s;
return result;
}
/**
* add a new @(topic.name)
*/
public @(topic.name) add(@(topic.name) p@(topic.name)) {
m@(topic.name)s.add(p@(topic.name));
m@(topic.name)Map.put(p@(topic.name).getPageid(),p@(topic.name));
return p@(topic.name);
}
/**
* add a new @(topic.name) from the given triple
*/
public @(topic.name) add(TripleQuery query,Triple p@(topic.name)Triple) {
@topic.name l@topic.name=new @(topic.name)(query,p@(topic.name)Triple);
add(l@(topic.name));
return l@(topic.name);
}
// reinitialize my m@(topic.name) map
public void reinit() {
m@(topic.name)Map.clear();
for (@(topic.name) l@(topic.name):m@(topic.name)s) {
m@(topic.name)Map.put(l@(topic.name).getPageid(),l@(topic.name));
}
}
// convert this manager to json format
public String toJson() { return JSON.toJSONString(this); }
// get a new manager from the given json string
public static @(topic.name)Manager fromJson(String json) {
@(topic.name)Manager result=JSON.parseObject(json, @(topic.name)Manager.class);
result.reinit();
return result;
}
// default constructor
public @(topic.name)Manager() {}
// construct me from the given triple Query query
public @(topic.name)Manager(TripleQuery query) @("{")
// first query the SiDIF bases triplestore
TripleQuery l@(topic.name)Query=query.query(null,"isA","@topic.name");
for (Triple l@(topic.name)Triple:l@(topic.name)Query.getTriples()) {
add(query,l@(topic.name)Triple);
}
// then the SMW triplestore
l@(topic.name)Query=query.query(null,"Property:IsA","@topic.name");
for (Triple l@(topic.name)Triple:l@(topic.name)Query.getTriples()) {
add(query,l@(topic.name)Triple);
}
init(query);
@("}") // constructor for @topic.name Manager
@printUserCode("user defined topicmanager code",topic.name,topic.name)
@("}") // class @topic.name Manager
}
@// end static
@("}")
}
@{
Context context=ContextFactory.getInstance().getContext(contextSetting);
}
@javacode(context)
help
@include(wiki.SiDIFTemplates.defs)
@def help(Topic topic) {
== Help for @(topic.name) ==
@topicheader(topic)
=== Documentation ===
@topic.wikiDocumentation
=== Example @(topic.pluralName) ===
{{#ask: [[Concept:@(topic.name)]]
}}
=== Properties ===
{{#ask: [[Concept:Property]][[Property topic::Concept:@(topic.name)]]
| ?Property documentation = documentation
| ?Property type = type
| ?Property name = name
| ?Property label = label
| ?Property allowedValues = allowedValues
| ?Property mandatory = mandatory
| ?Property uploadable = uploadable
|format=table
}}
@uml("uml",topic)
@seealso(topic)
[[Category:@topic.name]]
}
@help(contextSetting.getMaintopic())
debug
@include(wiki.SiDIFTemplates.java)
@for (Topic topic:mTopicManager.mTopics) {
== @(topic.pageid) ==
=== Concept property ===
@if (topic.conceptProperty) {
* @topic.conceptProperty.pageid name=@topic.conceptProperty.name
}
@for (TopicLink topicLink:topic.sourceTopicLinks.mTopicLinks) {
=== source TopicLink @(topicLink.name) ===
* @topicLink.sourceMultiple @topicLink.source @(topicLink.sourceRole)
* @topicLink.targetMultiple @topicLink.target @(topicLink.targetRole)
}
@for (TopicLink topicLink:topic.targetTopicLinks.mTopicLinks) {
=== target TopicLink @(topicLink.name) ===
* @topicLink.sourceMultiple @topicLink.source @(topicLink.sourceRole)
* @topicLink.targetMultiple @topicLink.target @(topicLink.targetRole)
}
@for (Property property:topic.getProperties()) {
=== Property @(property.name) ===
<pre>
[[Has type::@property.type]]
@("{{")Property
|name=@property.name
|documentation=@property.documentation
|type=Special:Types/@property.type
|label=@property.label
|primaryKey=@property.primaryKey
|mandatory=@property.mandatory
|uploadable=@property.uploadable
|size=@property.size
|defaultValue=@property.defaultValue
|inputType=@property.inputType
|allowedValues=@property.allowedValues
|topic=Concept:@topic.pageid
@("}}")
[[has default form::Property]]
This is a Property with type @("{{#show: {{FULLPAGENAMEE}} | ?Property type#- }}")
</pre>
}
}
tripletable
@include(wiki.SiDIFTemplates.java)
@// macro to show a table of triples
@def tripletable(String title,List<org.sidif.triple.Triple> triples) {
=== @title ===
{| class="wikitable sortable"
! subject !! predicate !! object
|-
@for (org.sidif.triple.Triple triple:triples) {
|@triple.getSubject() || @triple.getPredicate() || @triple.getObject()
|-
}
|}
}
@tripletable("all triples",query.getTriples())
@tripletable("topics",topics.getTriples())
defs
@include(wiki.SiDIFTemplates.java)
@// macro to show BITPlan copyright
@def copyright() {<!--
-- Copyright (C) 2015 BITPlan GmbH
--
-- Pater-Delp-Str. -- 1
-- D-47877 -- Willich-Schiefbahn
--
-- http://www.bitplan.com
--
--
-->@// avoid newline
}
@// error handling - get a stack trace
@def String getStackTrace (Throwable t) {
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
return sw.toString();
}
@// macro to to internationalize generator results
@def String i18n(String text) {
String targetLang=wikiTask.getWiki().getSiteInfo().getLang();
return text;
}
@// macro for the topic header of a topic
@def topicheader(Topic topic) {
{{#ask: [[Topic name::@(topic.name)]]
|mainlabel=-
|?Topic icon = icon
|? = Topic
|?Topic name = name
|?Topic pluralName = pluralName
|?Topic documentation = documentation
}}
}
@// macro for the form template of a topic
@def formtemplate(Topic topic,String multiple) {
<!-- @(topic.name) -->
@("{{{")for template|@(topic.name)@(multiple)@("}}}")
@("{|") class="wikitable"
! colspan='2'| @topic.name
|-
@for (Property property:topic.propertiesByIndex()) {
! @property.label:
<!-- @property.type @property.name -->
@{
String allowedValues=""; if (property.allowedValues!=null) { allowedValues="|values="+property.allowedValues; }
String mandatory=""; if ("true".equals(property.mandatory)) { mandatory="|mandatory"; }
String uploadable=""; if ("true".equals(property.uploadable)) { uploadable="|uploadable"; }
String values_from=""; if (property.values_from!=null) { values_from="|values from "+property.values_from; }
String defaultValue=""; if (property.defaultValue!=null) { defaultValue="|default="+property.defaultValue; }
}
| @("{{{")field|@property.name|input type=@property.inputType|property=@(topic.name) @(property.name)|size=@(property.size)@(mandatory)@(uploadable)@(values_from)@(allowedValues)@(defaultValue)@("}}}")
|-
}
@("|}")
@("{{{")field|storemode|default=@(topic.defaultstoremode)|hidden@("}}}")
@("{{{end template}}}")
<!-- @(topic.name) -->
}
@// macro to to show relevant links for a topic
@def seealso(Topic topic) {
see also
* [[List of @(topic.pluralName)]]
* [[Help:@topic.name]]
* [[Concept:@topic.name]]
* [[:Category:@topic.name]]
* [[:Template:@topic.name]]
* [[:Form:@topic.name]]
topic links:
@for (TopicLink topicLink:topic.sourceTopicLinks.mTopicLinks) {
@if (topicLink.targetTopic) {
* [[:Category:@(topicLink.targetTopic.name)]]
}
}
}
@// macro to create skin params for BITPlan corporate identity
@def bitplanumlci(int fontSize) {
' BITPlan Corporate identity skin params
' Copyright (c) 2015 BITPlan GmbH
' see http://wiki.bitplan.com/PlantUmlSkinParams#BITPlanCI
' skinparams generated by com.bitplan.restmodelmanager
@{ String skinparams[] = {"note", "component", "package", "usecase","activity","classAttribute","interface","class","object"}; }
@for (String skinparam:skinparams) {
skinparam @skinparam {
BackGroundColor #FFFFFF
FontSize @fontSize
ArrowColor #FF8000
BorderColor #FF8000
FontColor black
FontName Technical
}
}
hide Circle
' end of skinparams '
}
@// macro to create Relation
@def plantUmlRelation(TopicLink topicLink) {
@{
String sourceMany="1";
String targetMany="1";
if ("true".equals(topicLink.sourceMultiple)) sourceMany="*";
if ("true".equals(topicLink.targetMultiple)) targetMany="*";
}
@(topicLink.source) "@(topicLink.sourceRole) (@(sourceMany))" -- "@(topicLink.targetRole)(@(targetMany))" @(topicLink.target)
}
@// macro to create uml from simela triples
@def uml(String title,Topic topic) {
=== @title ===
<uml>
title @topic.name
note as @(topic.name)DiagramNote
Copyright (c) 2015 BITPlan GmbH
[[http://www.bitplan.com]]
end note
note as @(topic.name)Note
@(topic.documentation)
end note
class @topic.name @("{")
@for (Property property:topic.propertiesByIndex()) {
@(property.type) @(property.name)
}
@("}")
@(topic.name)Note .. @(topic.name)
@for (TopicLink topicLink:topic.sourceTopicLinks.mTopicLinks) {
@plantUmlRelation(topicLink)
}
@for (TopicLink topicLink:topic.targetTopicLinks.mTopicLinks) {
@plantUmlRelation(topicLink)
}
@bitplanumlci(12)
</uml>
}
dialogdefs
@import java.net.URLEncoder
@// JQuery imports
@def jquery(String indent) {
@(indent)<!-- JQuery Code for resthtmlview -->
@(indent)<script src="/resthtmlview/js/jquery-1.10.2.min.js" type="text/javascript"></script>
@(indent)<script src="/resthtmlview/js/jquery-ui-1.10.0.custom.js"></script>
@(indent)<script src="/resthtmlview/js/i18n/grid.locale-en.js" type="text/javascript"></script>
@(indent)<script src="/resthtmlview/js/ui.multiselect.js" type="text/javascript"></script>
@(indent)<script src="/resthtmlview/js/jquery.ui.message.js" type="text/javascript"></script>
@(indent)<script src="/resthtmlview/js/jquery.jqGrid.min.js" type="text/javascript"></script>
@(indent)<script src="/resthtmlview/js/redactor.min.js" type="text/javascript"></script>
@(indent)<!-- load jQuery and tablesorter scripts -->
@(indent)<script src="/resthtmlview/js/jquery.tablesorter.min.js"></script>
@(indent)<script src="/resthtmlview/js/jquery.tablesorter.widgets.js"></script>
@(indent)<script src="/resthtmlview/js/jquery.metadata.js"></script>
@(indent)<!-- JQuery Styles for resthtmlview -->
@(indent)<link href="/resthtmlview/css/form.css" type="text/css" media="screen" rel="stylesheet">
@(indent)<link href="/resthtmlview/css/messages.css" type="text/css" media="screen" rel="stylesheet">
@(indent)<link href="/resthtmlview/css/bitplanfadetogrey/jquery-ui-1.10.1.custom.css" type="text/css" media="screen" rel="stylesheet">
@(indent)<link href="/resthtmlview/css/ui.jqgrid.css" type="text/css" media="screen" rel="stylesheet" />
@(indent)<link href="/resthtmlview/css/ui.multiselect.css" type="text/css" media="screen" rel="stylesheet" />
@(indent)<!-- Tablesorter: required -->
@(indent)<link href="/resthtmlview/css/theme.blue.css" rel="stylesheet">
@(indent)<link href="/resthtmlview/css/searchFilter.css" type="text/css" media="screen" rel="stylesheet" />
@(indent)<link href="/resthtmlview/css/redactor.css" type="text/css" media="screen" rel="stylesheet" />
}
@// CSS Style definitions
@def style(String indent) {
@(indent)<style>
@(indent) body { height:100% }
@(indent) #container {
@(indent) background-color: #f0f0f0; /* lightblue background */
@(indent) width: 100%; /* Container has full width */
@(indent) margin: auto; /* center container */
@(indent) min-height: 100%; /* minimum height 100 % (for modern browsers) */
@(indent) height: auto !important; /* important Behel (for modern browsers */
@(indent) height: 100%; /* IE shall work as specified */
@(indent) overflow: hidden !important; /* firefox scrollbar */
@(indent) }
@(indent)</style>
}
@// dialog definition
@def dialog(String indent) {
@(indent)<script type="text/javascript">
@(indent) $(document).ready(function() {
@(indent) var wWidth = $(window).width();
@(indent) var wHeight = $(window).height();
@(indent) var dTopy = wHeight * 0.25; // top at 25% of window height
@(indent) var dTopx = wWidth * 0.25; // left at 25% of window width
@(indent) var dWidth = 'auto'; //this will make the dialog 98% of the window size
@(indent) var dHeight = 'auto';
@(indent) $( "#dialog" ).dialog({
@(indent) // position : [ dTopx, dTopy ],
@(indent) width : dWidth,
@(indent) height : dHeight,
@(indent) modal : true,
@(indent) // title: ""+wWidth+"x"+wHeight+" "+dTopx+":"+dTopy,
@(indent) my: "center",
@(indent) at: "center",
@(indent) of: window,
@(indent) show : {
@(indent) effect : "blind",
@(indent) duration : 500
@(indent) },
@(indent) hide : {
@(indent) effect : "fade",
@(indent) duration : 500
@(indent) }
@(indent) });
@(indent) // tabs
@(indent) $( "#tabs" ).tabs();
@(indent) // tablesorter
@(indent) $.extend( $.tablesorter.defaults, {
@(indent) theme: 'blue',
@(indent) widthFixed: false
@(indent) });
@(indent) $(".sortable").tablesorter();
@(indent) });
@(indent)</script>
}
@// display the given stockicon
@def String stockicon(String name,int size,String alt,String title) {
String iconhref="/stockicons/"+size+"x"+size+"/shadow/"+name+".png";
String img="<img src='"+iconhref+"' alt='"+alt+"' title='"+title+"' width='"+size+"px' height='"+size+"px' >";
return img;
}
@// url encode the given txt
@def String urlEncode(String txt) {
String result=URLEncoder.encode(txt, "UTF-8");
return result;
}
@def selectall() {
<script>
/**
* http://stackoverflow.com/questions/432493/how-do-you-access-the-matched-groups-in-a-javascript-regular-
* expression
* examples:
*
* var matches = getRegexMatches(/(dog)/, "dog boat, cat car dog");
* console.log(matches);
*
* var matches = getRegexMatches(/(dog|cat) (boat|car)/, "dog boat, cat car");
* console.log(matches);
*/
function getRegexMatches(regex, string) {
if(!(regex instanceof RegExp)) {
return "ERROR";
}
else {
if (!regex.global) {
// If global flag not set, create new one.
var flags = "g";
if (regex.ignoreCase) flags += "i";
if (regex.multiline) flags += "m";
if (regex.sticky) flags += "y";
regex = RegExp(regex.source, flags);
}
}
var matches = [];
var match = regex.exec(string);
while (match) {
if (match.length > 2) {
var group_matches = [];
for (var i = 1; i < match.length; i++) {
group_matches.push(match[i]);
}
matches.push(group_matches);
}
else {
matches.push(match[1]);
}
match = regex.exec(string);
}
return matches;
}
/**
* get the select_row or select_col checkboxes dependening on the selectType row/col
*/
function getSelectCheckboxes(selectType) {
var regex=new RegExp("select_"+selectType+"_");
var result= $('input').filter(function() {return this.id.match(regex);});
return result;
}
/**
* matrix selection logic
* the goal is to provide select all / select row x / select col x
* checkboxes that will allow to
* select all: select all grid elements
* select row: select the grid elements in the given row
* select col: select the grid elements in the given col
*
* There is a naming convention for the ids and css style classes of the the selectors and elements:
* select all -> id: selectall
* select row -> id: select_row_row e.g. select_row_2
* select col -> id: select_col_col e.g. select_col_3
* grid element -> class checkBoxClass col_col row_row e.g. checkBoxClass row_2 col_3
*/
function checkSelectStates() {
// get the list of grid checkbox elements
// all checkboxes
var all = $('.checkBoxClass');
// all select row check boxes
var rows = getSelectCheckboxes('row');
// all select columnn check boxes
var cols = getSelectCheckboxes('col');
// console.log("rows: "+rows.length+", cols:"+cols.length+" total: "+all.length);
// get the total number of checkboxes in the grid
var allLen=all.length;
// get the number of checkboxes in the checked state
var filterLen=all.filter(':checked').length;
// console.log(allLen+"-"+filterLen);
// if all checkboxes are in the checked state
// set the state of the selectAll checkbox to checked to be able
// to deselect all at once, otherwise set it to unchecked to be able to select all at once
if (allLen == filterLen) {
$("#selectall").prop("checked", true);
} else {
$("#selectall").prop("checked", false);
}
// now check the completeness of the rows
for (row = 0; row < rows.length; row++) {
var rowall=$('.row_'+row);
var rowchecked=rowall.filter(':checked');
if (rowall.length == rowchecked.length) {
$("#select_row_"+row).prop("checked", true);
} else {
$("#select_row_"+row).prop("checked", false);
}
}
// now check the completeness of the cols
for (col = 0; col < cols.length; col++) {
var colall=$('.col_'+col);
var colchecked=colall.filter(':checked');
if (colall.length == colchecked.length) {
$("#select_col_"+col).prop("checked", true);
} else {
$("#select_col_"+col).prop("checked", false);
}
}
}
$(document).ready(function () {
// handle click event for Select all check box
$("#selectall").click(function () {
// set the checked property of all grid elements to be the same as
// the state of the SelectAll check box
var state=$("#selectall").prop('checked');
$(".checkBoxClass").prop('checked', state);
getSelectCheckboxes('row').prop('checked', state);
getSelectCheckboxes('col').prop('checked', state);
});
// handle clicks within the grid
$(".checkBoxClass").on( "click", function() {
checkSelectStates();
});
$('.checkboxSelect').on( "click", function() {
var matchRowColArr=getRegexMatches(/select_(row|col)_([0-9]+)/,this.id);
var matchRowCol=matchRowColArr[0];
// console.log(matchRowCol);
if (matchRowCol.length==2) {
var selectType=matchRowCol[0]; // e.g. row
var selectIndex=matchRowCol[1]; // e.g. 2
// console.log(this.id+" clicked to select "+selectType+" "+selectIndex);
// e.g. .row_2
$("."+selectType+"_"+selectIndex)
.prop('checked', $("#select_"+selectType+"_"+selectIndex).prop('checked'));
checkSelectStates();
}
});
});
</script>
}
java
The debugging version of the SiDIF Templates
@// This is a rythm template
@// the args are the standard wikiTask arguments
@import org.sidif.triple.TripleQuery
@import org.sidif.triple.TripleStore
@import org.sidif.triple.Triple
@import org.sidif.wiki.SMW_Triples
@import com.alibaba.fastjson.JSON
@// import instead of src
@import com.bitplan.topic.TopicStatic.YT
@import com.bitplan.topic.TopicStatic.Context
@import com.bitplan.topic.TopicStatic.Topic
@import com.bitplan.topic.TopicStatic.Property
@import com.bitplan.topic.TopicStatic.SMW_Type
@import com.bitplan.topic.TopicStatic.TopicLink
@import com.bitplan.topic.TopicStatic.ContextManager
@import com.bitplan.topic.TopicStatic.TopicManager
@import com.bitplan.topic.TopicStatic.PropertyManager
@import com.bitplan.topic.TopicStatic.SMW_TypeManager
@import com.bitplan.topic.TopicStatic.TopicLinkManager
@import com.bitplan.topic.ContextFactory
@import com.bitplan.topic.ContextSetting
@args() {
String title
String logo
org.sidif.wiki.WikiTask wikiTask
org.sidif.triple.TripleStore tripleStore
}
@// contextSetting handling
@{
ContextSetting contextSetting=ContextSetting.fromWikiTask(wikiTask);
}
javasrc
@// This is a rythm template
@// the args are the standard wikiTask arguments
@import org.sidif.triple.TripleQuery
@import org.sidif.triple.TripleStore
@import org.sidif.triple.Triple
@import org.sidif.wiki.SMW_Triples
@import com.alibaba.fastjson.JSON
@args() {
String title
String logo
org.sidif.wiki.WikiTask wikiTask
org.sidif.triple.TripleStore tripleStore
com.bitplan.topic.TopicManager topicManager
}
@def static {
/**
* Base class
*/
static abstract class TopicBase {
/**
* initialize
*/
public void init(TripleQuery query) {
}
} // TopicBase
/**
* technical part of Y-Principle
*
* @author wf
*
*/
static class YT {
// Y-Principle technical parts
public static YT yts[] = {
new YT("Category", "Category", "category",
"/images/d/d6/Category_Icon.png"),
new YT("Concept", "Concept", "concept", "/images/2/25/Concept_Icon.png"),
new YT("Form", "Form", "form", "/images/e/e5/Form_icon.jpg"),
new YT("Help", "Help", "help", "/images/7/7a/Help_Icon.png"),
new YT("Listof", "List of", "listof", "/images/7/7f/List_Icon.png"),
new YT("Template", "Template", "template",
"/images/6/61/Icon_template.png"),
new YT("Properties", "Properties", "properties",
"/images/6/6a/Element_into_input.png"),
new YT("Java", "Java", "javacodegen",
"/images/3/38/Java_icon.png") };
/**
* get the YT with the given name
*
* @param ytname
*/
public static YT getYT(String ytname) {
for (YT yt : yts) {
if (yt.name.equals(ytname)) {
return yt;
}
}
return null;
}
String name;
String label;
String iconUrl;
String template;
/**
* construct me with name label and icon url
*
* @param name
* @param label
* @param iconUrl
*/
public YT(String name, String label,String template, String iconUrl) {
super();
this.name = name;
this.label = label;
this.template=template;
this.iconUrl = iconUrl;
}
/**
* a part where name and label is different
*
* @param name
* @param label
*/
public YT(String name, String label) {
this(name,label,name.toLowerCase(),"Datei:"+name+".png");
}
/**
* a part where name and label is the same
*
* @param name
*/
public YT(String name) {
this(name, name);
}
/**
* get the page Title for the given topic name
*
* @param topicname
* @return
*/
public String getPageTitle(Topic topic) {
String result = this.name + ":" + topic.name;
if ("Listof".equals(name)) {
result = "List_of_" + topic.pluralName.replace(" ","_");
}
if ("Properties".equals(name)) {
result = "Concept:" + topic.name.replace(" ","_")+"/Properties";
}
return result;
}
}
/**
* Context A Context groups some topics like a Namespace/Package
*/
static class Context extends TopicBase {
String pageid;
String name;
public String getName() {
return name;
}
public void setName(String pName) {
name = pName;
}
/**
* convert this Context to a JSON string
*/
public String toJson() {
return JSON.toJSONString(this);
}
/**
* get the pageid for this topic
*/
public String getPageid() {
return pageid;
};
/**
* default constructor for Context
*/
public Context() {
}
/**
* construct a Context from the given Triple
*
* @param query
* - the TripleQuery to get the triples from
* @param pContextTriple
* - the triple to construct me from
*/
public Context(TripleQuery query, Triple pContextTriple) {
this(query, pContextTriple.getSubject().toString());
} // constructor
/**
* construct a Context from the given pageId
*
* @param query
* - the TripleQuery to get the triples from
* @param pageid
* - pageid
*/
public Context(TripleQuery query, String pageid) {
this.pageid = pageid;
Triple nameTriple = query.selectSingle(pageid, "name", null);
if (nameTriple == null)
nameTriple = query.selectSingle(pageid, "Property:Context_name", null);
if (nameTriple != null)
name = nameTriple.getObject().toString();
init(query);
} // constructor for Context
// >>>{user defined topic code}{Context}{Context}
/**
* get the propertySidif of the given property
* @param name
* @param value
* @return
*/
public String propertySiDIF(String name,String value, String type) {
String result="";
String quote="";
if ("Text".equals(type)) {
quote="\"";
}
if (value!=null) {
result+=quote+value+quote+" is "+name+" of it\n";
}
return result;
}
/**
* get me as a String
* @param name
* @param value
* @return
*/
public String propertySiDIF(String name,String value) {
String result=propertySiDIF(name,value,"Text");
return result;
}
/**
* return me as a SiDIF string
* @return
*/
public String asSiDIF() {
String result="";
result+="#\n";
result+="# Context:"+getName()+"\n";
result+="#\n";
result+=getPageid()+" isA Context\n";
result+=this.propertySiDIF("name", name);
for (Topic topic:this.getTopics()) {
result+="#\n";
result+="#"+topic.getName()+"\n";
result+="#\n";
result+=topic.name+" isA Topic\n";
result+=this.propertySiDIF("name", topic.name);
result+=this.propertySiDIF("pluralName", topic.pluralName);
result+=this.propertySiDIF("documentation",topic.documentation);
result+=this.propertySiDIF("wikiDocumentation",topic.wikiDocumentation);
result+=this.propertySiDIF("icon",topic.icon);
result+=this.propertySiDIF("defaultstoremode", topic.defaultstoremode);
result+=this.propertySiDIF("context", this.getName());
for (Property property:topic.getProperties()) {
result+=topic.getName()+"_"+property.getName()+" addsTo it\n";
}
for (Property property:topic.getProperties()) {
result+=topic.getName()+"_"+property.getName()+" isA Property\n";
result+=propertySiDIF("name",property.name);
result+=propertySiDIF("allowedValues",property.allowedValues);
result+=propertySiDIF("defaultValue",property.defaultValue);
result+=propertySiDIF("documentation",property.documentation);
result+=propertySiDIF("inputType",property.inputType);
result+=propertySiDIF("label",property.label);
result+=propertySiDIF("mandatory", property.mandatory,"Boolean");
result+=propertySiDIF("namespace",property.namespace);
result+=propertySiDIF("primaryKey",property.primaryKey,"Boolean");
result+=propertySiDIF("pageid",property.pageid);
result+=propertySiDIF("size",property.size,"Number");
result+=propertySiDIF("topic",topic.getName());
}
}
return result;
}
// 1:n relation to topics
TopicManager topics = new TopicManager();
/**
* accessor for 1:n relation to topics
*
* @return
*/
public List<Topic> getTopics() {
return topics.mTopics;
}
/**
* recreate topics from a given list
* @param pTopics
*/
public void setTopics(List<Topic> pTopics) {
topics = new TopicManager();
topics.mTopics=pTopics;
for (Topic topic:pTopics) {
topics.mTopicMap.put(topic.getPageid(), topic);
}
}
// <<<{user defined topic code}{Context}{Context}
} // class Context
/**
* Manager for Context
*/
static class ContextManager extends TopicBase {
public String topicName = "Context";
public List<Context> mContexts = new ArrayList<Context>();
public Map<String, Context> mContextMap = new LinkedHashMap<String, Context>();
/**
* add a new Context
*/
public Context add(Context pContext) {
mContexts.add(pContext);
mContextMap.put(pContext.getPageid(), pContext);
return pContext;
}
/**
* add a new Context from the given triple
*/
public Context add(TripleQuery query, Triple pContextTriple) {
Context lContext = new Context(query, pContextTriple);
add(lContext);
return lContext;
}
// convert this manager to json format
public String toJson() {
return JSON.toJSONString(this);
}
// default constructor
public ContextManager() {
}
// construct me from the given triple Query query
public ContextManager(TripleQuery query) {
// first query the SiDIF bases triplestore
TripleQuery lContextQuery = query.query(null, "isA", "Context");
for (Triple lContextTriple : lContextQuery.getTriples()) {
add(query, lContextTriple);
}
// then the SMW triplestore
lContextQuery = query.query(null, "Property:IsA", "Context");
for (Triple lContextTriple : lContextQuery.getTriples()) {
add(query, lContextTriple);
}
init(query);
} // constructor for Context Manager
// >>>{user defined topicmanager code}{Context}{Context}
public TopicManager mTopicManager;
public PropertyManager mPropertyManager;
/**
* run pass 2 to link topics to context
*
* @return
*/
public List<String> pass2() {
List<String> result = new ArrayList<String>();
for (Topic topic : mTopicManager.mTopics) {
if (topic.context != null) {
Context context = this.mContextMap.get(topic.context);
if (context != null) {
context.topics.mTopics.add(topic);
} else {
result.add("Context '" + topic.context + "' not found");
}
}
}
for (Property property : mPropertyManager.mPropertys) {
if (property.topic != null) {
Topic topic = mTopicManager.mTopicMap.get(property.topic);
if (topic != null) {
// FIXME use an add function that also adds to the map
topic.properties.mPropertys.add(property);
} else {
result.add("Topic '" + property.topic + "' not found");
}
}
}
return result;
}
/**
* construct me from a tripleStore
*
* @param tripleStore
*/
public ContextManager(TripleStore tripleStore) {
this(tripleStore.query());
mTopicManager = new TopicManager(tripleStore.query());
mPropertyManager = new PropertyManager(tripleStore.query());
mTopicManager.configureTopics();
pass2();
}
// <<<{user defined topicmanager code}{Context}{Context}
} // class Context Manager
/**
* Topic A Topic is a Concept/Class/Thing/Entity
*/
static class Topic extends TopicBase {
String pageid;
String name;
String pluralName;
String icon;
String wikiDocumentation;
String documentation;
String defaultstoremode;
String context;
public String getName() {
return name;
}
public void setName(String pName) {
name = pName;
}
public String getPluralName() {
return pluralName;
}
public void setPluralName(String pPluralName) {
pluralName = pPluralName;
}
public String getIcon() {
return icon;
}
public void setIcon(String pIcon) {
icon = pIcon;
}
public String getWikiDocumentation() {
return wikiDocumentation;
}
public void setWikiDocumentation(String pWikiDocumentation) {
wikiDocumentation = pWikiDocumentation;
}
public String getDocumentation() {
return documentation;
}
public void setDocumentation(String pDocumentation) {
documentation = pDocumentation;
}
public String getDefaultstoremode() {
return defaultstoremode;
}
public void setDefaultstoremode(String pDefaultstoremode) {
defaultstoremode = pDefaultstoremode;
}
public String getContext() {
return context;
}
public void setContext(String pContext) {
context = pContext;
}
/**
* convert this Topic to a JSON string
*/
public String toJson() {
return JSON.toJSONString(this);
}
/**
* get the pageid for this topic
*/
public String getPageid() {
return pageid;
};
/**
* default constructor for Topic
*/
public Topic() {
}
/**
* construct a Topic from the given Triple
*
* @param query
* - the TripleQuery to get the triples from
* @param pTopicTriple
* - the triple to construct me from
*/
public Topic(TripleQuery query, Triple pTopicTriple) {
this(query, pTopicTriple.getSubject().toString());
} // constructor
/**
* construct a Topic from the given pageId
*
* @param query
* - the TripleQuery to get the triples from
* @param pageid
* - pageid
*/
public Topic(TripleQuery query, String pageid) {
this.pageid = pageid;
Triple nameTriple = query.selectSingle(pageid, "name", null);
if (nameTriple == null)
nameTriple = query.selectSingle(pageid, "Property:Topic_name", null);
if (nameTriple != null)
name = nameTriple.getObject().toString();
Triple pluralNameTriple = query.selectSingle(pageid, "pluralName", null);
if (pluralNameTriple == null)
pluralNameTriple = query.selectSingle(pageid,
"Property:Topic_pluralName", null);
if (pluralNameTriple != null)
pluralName = pluralNameTriple.getObject().toString();
Triple iconTriple = query.selectSingle(pageid, "icon", null);
if (iconTriple == null)
iconTriple = query.selectSingle(pageid, "Property:Topic_icon", null);
if (iconTriple != null)
icon = iconTriple.getObject().toString();
Triple wikiDocumentationTriple = query.selectSingle(pageid,
"wikiDocumentation", null);
if (wikiDocumentationTriple == null)
wikiDocumentationTriple = query.selectSingle(pageid,
"Property:Topic_wikiDocumentation", null);
if (wikiDocumentationTriple != null)
wikiDocumentation = wikiDocumentationTriple.getObject().toString();
Triple documentationTriple = query.selectSingle(pageid, "documentation",
null);
if (documentationTriple == null)
documentationTriple = query.selectSingle(pageid,
"Property:Topic_documentation", null);
if (documentationTriple != null)
documentation = documentationTriple.getObject().toString();
Triple defaultstoremodeTriple = query.selectSingle(pageid,
"defaultstoremode", null);
if (defaultstoremodeTriple == null)
defaultstoremodeTriple = query.selectSingle(pageid,
"Property:Topic_defaultstoremode", null);
if (defaultstoremodeTriple != null)
defaultstoremode = defaultstoremodeTriple.getObject().toString();
Triple contextTriple = query.selectSingle(pageid, "context", null);
if (contextTriple == null)
contextTriple = query.selectSingle(pageid, "Property:Topic_context",
null);
if (contextTriple != null)
context = contextTriple.getObject().toString();
init(query);
} // constructor for Topic
// >>>{user defined topic code}{Topic}{Topic}
PropertyManager properties = new PropertyManager();
TopicLinkManager sourceTopicLinks = new TopicLinkManager();
TopicLinkManager targetTopicLinks = new TopicLinkManager();
Property conceptProperty; // the Property to be used when selecting a
// Concept
/**
* get the Properties
*
* @return
*/
public List<Property> getProperties() {
return properties.mPropertys;
}
/**
* initialize me with the given query
*
* @Override
*/
public void init(TripleQuery query) {
TripleQuery propertyQuery = query.query(null, "addsTo", pageid);
if (propertyQuery != null) {
for (Triple property : propertyQuery.getTriples()) {
properties.add(query, property);
}
}
addTopicLinks(query, sourceTopicLinks, "source");
addTopicLinks(query, targetTopicLinks, "target");
if (name == null) {
name = pageid;
}
if (pluralName == null) {
pluralName = name + "s";
}
// add Properties for targetTopicLinks
// this is the referenced to the "neighbour" Topic
for (TopicLink topicLink : targetTopicLinks.mTopicLinks) {
Property property = new Property();
property.pageid = topicLink.sourceRole;
property.name = property.pageid;
property.label = property.name;
property.type = "Page";
// make sure the form shows the neighbour concept as an option
String sourceName = topicLink.source;
// remove "Concept:" prefix !!! FIXME - this is language dependent
// and a horrible work around for the time being
sourceName = sourceName.replace("Concept:", "");
sourceName = sourceName.replace("Konzept:", "");
property.values_from = "concept=" + sourceName;
property.inputType = "dropdown";
properties.mPropertys.add(property);
}
}
/**
* add the topicLinks
*
* @param query
* - the TripleQuery to get the triples from
* @param tm
* - the TopicLinkManager to add the topic links to
* @param predicate
* - the predicate to be used for linking
*/
public void addTopicLinks(TripleQuery query, TopicLinkManager tm,
String predicate) {
TripleQuery linkQuery = query.query(null, predicate, pageid);
if (linkQuery != null) {
for (Triple linkTriple : linkQuery.getTriples()) {
String link = linkTriple.getSubject().toString();
TopicLink topiclink = new TopicLink(query, link);
tm.mTopicLinks.add(topiclink);
}
}
}
/**
* check my source TopicLinks and set the targetTopic by looking it up
*/
public void linkTargetTopics(TopicManager tm) {
for (TopicLink sourceTopicLink : sourceTopicLinks.mTopicLinks) {
String topicTarget = sourceTopicLink.target; // e.g. Concept:Property;
topicTarget = topicTarget.replace("Concept:", ""); // remove Concept
// part
topicTarget = topicTarget.replace("Koncept:", ""); // remove Concept
// part
Topic targetTopic = tm.byName(topicTarget);
if (targetTopic != null) {
sourceTopicLink.targetTopic = targetTopic;
}
}
}
/**
* set the concept Property for the given target Property
*/
public void setConceptProperty() {
for (Property property : properties.mPropertys) {
if ("true".equals(property.mandatory)
|| "true".equals(property.primaryKey)) {
conceptProperty = property;
break;
}
}
}
// <<<{user defined topic code}{Topic}{Topic}
} // class Topic
/**
* Manager for Topic
*/
static class TopicManager extends TopicBase {
public String topicName = "Topic";
public List<Topic> mTopics = new ArrayList<Topic>();
public Map<String, Topic> mTopicMap = new LinkedHashMap<String, Topic>();
/**
* add a new Topic
*/
public Topic add(Topic pTopic) {
mTopics.add(pTopic);
mTopicMap.put(pTopic.getPageid(), pTopic);
return pTopic;
}
/**
* add a new Topic from the given triple
*/
public Topic add(TripleQuery query, Triple pTopicTriple) {
Topic lTopic = new Topic(query, pTopicTriple);
add(lTopic);
return lTopic;
}
// convert this manager to json format
public String toJson() {
return JSON.toJSONString(this);
}
// default constructor
public TopicManager() {
}
// construct me from the given triple Query query
public TopicManager(TripleQuery query) {
// first query the SiDIF bases triplestore
TripleQuery lTopicQuery = query.query(null, "isA", "Topic");
for (Triple lTopicTriple : lTopicQuery.getTriples()) {
add(query, lTopicTriple);
}
// then the SMW triplestore
lTopicQuery = query.query(null, "Property:IsA", "Topic");
for (Triple lTopicTriple : lTopicQuery.getTriples()) {
add(query, lTopicTriple);
}
init(query);
} // constructor for Topic Manager
// >>>{user defined topicmanager code}{Topic}{Topic}
/**
* get a topic by the given name
*
* @param topicName
* - the name of the topic to get FIXME - speedup?
*/
public Topic byName(String topicName) {
Topic result = null;
for (Topic topic : mTopics) {
if (topicName.equals(topic.name)) {
result = topic;
}
}
return result;
} // byName
/**
* configure Topics: link TargetTopics set Concept Properties
*/
public void configureTopics() {
for (Topic topic : mTopics) {
topic.setConceptProperty();
topic.linkTargetTopics(this);
}
}
// <<<{user defined topicmanager code}{Topic}{Topic}
} // class Topic Manager
/**
* SMW_Type an SMW_Type is a data type which determines the possible values
* for that type e.g. a Boolean can hold true/fals values while a Number can
* hold 3.1459 or 20. A Page can hold the name of a Wiki page see
* https://semantic-mediawiki.org/wiki/Help:List_of_datatypes
*/
static class SMW_Type extends TopicBase {
String pageid;
String documentation;
String type;
String typepage;
String helppage;
String javaType;
public String getDocumentation() {
return documentation;
}
public void setDocumentation(String pDocumentation) {
documentation = pDocumentation;
}
public String getType() {
return type;
}
public void setType(String pType) {
type = pType;
}
public String getTypepage() {
return typepage;
}
public void setTypepage(String pTypepage) {
typepage = pTypepage;
}
public String getHelppage() {
return helppage;
}
public void setHelppage(String pHelppage) {
helppage = pHelppage;
}
public String getJavaType() {
return javaType;
}
public void setJavaType(String pJavaType) {
javaType = pJavaType;
}
/**
* convert this SMW_Type to a JSON string
*/
public String toJson() {
return JSON.toJSONString(this);
}
/**
* get the pageid for this topic
*/
public String getPageid() {
return pageid;
};
/**
* default constructor for SMW_Type
*/
public SMW_Type() {
}
/**
* construct a SMW_Type from the given Triple
*
* @param query
* - the TripleQuery to get the triples from
* @param pSMW_TypeTriple
* - the triple to construct me from
*/
public SMW_Type(TripleQuery query, Triple pSMW_TypeTriple) {
this(query, pSMW_TypeTriple.getSubject().toString());
} // constructor
/**
* construct a SMW_Type from the given pageId
*
* @param query
* - the TripleQuery to get the triples from
* @param pageid
* - pageid
*/
public SMW_Type(TripleQuery query, String pageid) {
this.pageid = pageid;
Triple documentationTriple = query.selectSingle(pageid, "documentation",
null);
if (documentationTriple == null)
documentationTriple = query.selectSingle(pageid,
"Property:SMW_Type_documentation", null);
if (documentationTriple != null)
documentation = documentationTriple.getObject().toString();
Triple typeTriple = query.selectSingle(pageid, "type", null);
if (typeTriple == null)
typeTriple = query.selectSingle(pageid, "Property:SMW_Type_type", null);
if (typeTriple != null)
type = typeTriple.getObject().toString();
Triple typepageTriple = query.selectSingle(pageid, "typepage", null);
if (typepageTriple == null)
typepageTriple = query.selectSingle(pageid,
"Property:SMW_Type_typepage", null);
if (typepageTriple != null)
typepage = typepageTriple.getObject().toString();
Triple helppageTriple = query.selectSingle(pageid, "helppage", null);
if (helppageTriple == null)
helppageTriple = query.selectSingle(pageid,
"Property:SMW_Type_helppage", null);
if (helppageTriple != null)
helppage = helppageTriple.getObject().toString();
Triple javaTypeTriple = query.selectSingle(pageid, "javaType", null);
if (javaTypeTriple == null)
javaTypeTriple = query.selectSingle(pageid,
"Property:SMW_Type_javaType", null);
if (javaTypeTriple != null)
javaType = javaTypeTriple.getObject().toString();
init(query);
} // constructor for SMW_Type
// >>>{user defined topic code}{SMW_Type}{SMW_Type}
// <<<{user defined topic code}{SMW_Type}{SMW_Type}
} // class SMW_Type
/**
* Manager for SMW_Type
*/
static class SMW_TypeManager extends TopicBase {
public String topicName = "SMW_Type";
public List<SMW_Type> mSMW_Types = new ArrayList<SMW_Type>();
public Map<String, SMW_Type> mSMW_TypeMap = new LinkedHashMap<String, SMW_Type>();
/**
* add a new SMW_Type
*/
public SMW_Type add(SMW_Type pSMW_Type) {
mSMW_Types.add(pSMW_Type);
mSMW_TypeMap.put(pSMW_Type.getPageid(), pSMW_Type);
return pSMW_Type;
}
/**
* add a new SMW_Type from the given triple
*/
public SMW_Type add(TripleQuery query, Triple pSMW_TypeTriple) {
SMW_Type lSMW_Type = new SMW_Type(query, pSMW_TypeTriple);
add(lSMW_Type);
return lSMW_Type;
}
// convert this manager to json format
public String toJson() {
return JSON.toJSONString(this);
}
// default constructor
public SMW_TypeManager() {
}
// construct me from the given triple Query query
public SMW_TypeManager(TripleQuery query) {
// first query the SiDIF bases triplestore
TripleQuery lSMW_TypeQuery = query.query(null, "isA", "SMW_Type");
for (Triple lSMW_TypeTriple : lSMW_TypeQuery.getTriples()) {
add(query, lSMW_TypeTriple);
}
// then the SMW triplestore
lSMW_TypeQuery = query.query(null, "Property:IsA", "SMW_Type");
for (Triple lSMW_TypeTriple : lSMW_TypeQuery.getTriples()) {
add(query, lSMW_TypeTriple);
}
init(query);
} // constructor for SMW_Type Manager
// >>>{user defined topicmanager code}{SMW_Type}{SMW_Type}
// <<<{user defined topicmanager code}{SMW_Type}{SMW_Type}
} // class SMW_Type Manager
/**
* Property a Property is a Feature/Attribute
*/
static class Property extends TopicBase {
String pageid;
String documentation;
String name;
String type;
String label;
String primaryKey;
String mandatory;
String uploadable;
String size;
String defaultValue;
String inputType;
String namespace;
String values_from;
String allowedValues;
String topic;
public String getDocumentation() {
return documentation;
}
public void setDocumentation(String pDocumentation) {
documentation = pDocumentation;
}
public String getName() {
return name;
}
public void setName(String pName) {
name = pName;
}
public String getType() {
return type;
}
public void setType(String pType) {
type = pType;
}
public String getLabel() {
return label;
}
public void setLabel(String pLabel) {
label = pLabel;
}
public String getPrimaryKey() {
return primaryKey;
}
public void setPrimaryKey(String pPrimaryKey) {
primaryKey = pPrimaryKey;
}
public String getMandatory() {
return mandatory;
}
public void setMandatory(String pMandatory) {
mandatory = pMandatory;
}
public String getUploadable() {
return uploadable;
}
public void setUploadable(String pUploadable) {
uploadable = pUploadable;
}
public String getSize() {
return size;
}
public void setSize(String pSize) {
size = pSize;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String pDefaultValue) {
defaultValue = pDefaultValue;
}
public String getInputType() {
return inputType;
}
public void setInputType(String pInputType) {
inputType = pInputType;
}
public String getNamespace() {
return namespace;
}
public void setNamespace(String pNamespace) {
namespace = pNamespace;
}
public String getValues_from() {
return values_from;
}
public void setValues_from(String pValues_from) {
values_from = pValues_from;
}
public String getAllowedValues() {
return allowedValues;
}
public void setAllowedValues(String pAllowedValues) {
allowedValues = pAllowedValues;
}
public String getTopic() {
return topic;
}
public void setTopic(String pTopic) {
topic = pTopic;
}
/**
* convert this Property to a JSON string
*/
public String toJson() {
return JSON.toJSONString(this);
}
/**
* get the pageid for this topic
*/
public String getPageid() {
return pageid;
};
/**
* default constructor for Property
*/
public Property() {
}
/**
* construct a Property from the given Triple
*
* @param query
* - the TripleQuery to get the triples from
* @param pPropertyTriple
* - the triple to construct me from
*/
public Property(TripleQuery query, Triple pPropertyTriple) {
this(query, pPropertyTriple.getSubject().toString());
} // constructor
/**
* construct a Property from the given pageId
*
* @param query
* - the TripleQuery to get the triples from
* @param pageid
* - pageid
*/
public Property(TripleQuery query, String pageid) {
this.pageid = pageid;
Triple documentationTriple = query.selectSingle(pageid, "documentation",
null);
if (documentationTriple == null)
documentationTriple = query.selectSingle(pageid,
"Property:Property_documentation", null);
if (documentationTriple != null)
documentation = documentationTriple.getObject().toString();
Triple nameTriple = query.selectSingle(pageid, "name", null);
if (nameTriple == null)
nameTriple = query.selectSingle(pageid, "Property:Property_name", null);
if (nameTriple != null)
name = nameTriple.getObject().toString();
Triple typeTriple = query.selectSingle(pageid, "type", null);
if (typeTriple == null)
typeTriple = query.selectSingle(pageid, "Property:Property_type", null);
if (typeTriple != null)
type = typeTriple.getObject().toString();
Triple labelTriple = query.selectSingle(pageid, "label", null);
if (labelTriple == null)
labelTriple = query.selectSingle(pageid, "Property:Property_label",
null);
if (labelTriple != null)
label = labelTriple.getObject().toString();
Triple primaryKeyTriple = query.selectSingle(pageid, "primaryKey", null);
if (primaryKeyTriple == null)
primaryKeyTriple = query.selectSingle(pageid,
"Property:Property_primaryKey", null);
if (primaryKeyTriple != null)
primaryKey = primaryKeyTriple.getObject().toString();
Triple mandatoryTriple = query.selectSingle(pageid, "mandatory", null);
if (mandatoryTriple == null)
mandatoryTriple = query.selectSingle(pageid,
"Property:Property_mandatory", null);
if (mandatoryTriple != null)
mandatory = mandatoryTriple.getObject().toString();
Triple uploadableTriple = query.selectSingle(pageid, "uploadable", null);
if (uploadableTriple == null)
uploadableTriple = query.selectSingle(pageid,
"Property:Property_uploadable", null);
if (uploadableTriple != null)
uploadable = uploadableTriple.getObject().toString();
Triple sizeTriple = query.selectSingle(pageid, "size", null);
if (sizeTriple == null)
sizeTriple = query.selectSingle(pageid, "Property:Property_size", null);
if (sizeTriple != null)
size = sizeTriple.getObject().toString();
Triple defaultValueTriple = query.selectSingle(pageid, "defaultValue",
null);
if (defaultValueTriple == null)
defaultValueTriple = query.selectSingle(pageid,
"Property:Property_defaultValue", null);
if (defaultValueTriple != null)
defaultValue = defaultValueTriple.getObject().toString();
Triple inputTypeTriple = query.selectSingle(pageid, "inputType", null);
if (inputTypeTriple == null)
inputTypeTriple = query.selectSingle(pageid,
"Property:Property_inputType", null);
if (inputTypeTriple != null)
inputType = inputTypeTriple.getObject().toString();
Triple namespaceTriple = query.selectSingle(pageid, "namespace", null);
if (namespaceTriple == null)
namespaceTriple = query.selectSingle(pageid,
"Property:Property_namespace", null);
if (namespaceTriple != null)
namespace = namespaceTriple.getObject().toString();
Triple values_fromTriple = query
.selectSingle(pageid, "values_from", null);
if (values_fromTriple == null)
values_fromTriple = query.selectSingle(pageid,
"Property:Property_values_from", null);
if (values_fromTriple != null)
values_from = values_fromTriple.getObject().toString();
Triple allowedValuesTriple = query.selectSingle(pageid, "allowedValues",
null);
if (allowedValuesTriple == null)
allowedValuesTriple = query.selectSingle(pageid,
"Property:Property_allowedValues", null);
if (allowedValuesTriple != null)
allowedValues = allowedValuesTriple.getObject().toString();
Triple topicTriple = query.selectSingle(pageid, "topic", null);
if (topicTriple == null)
topicTriple = query.selectSingle(pageid, "Property:Property_topic",
null);
if (topicTriple != null)
topic = topicTriple.getObject().toString();
init(query);
} // constructor for Property
// >>>{user defined topic code}{Property}{Property}
@Override
public void init(TripleQuery query) {
if (name == null) {
name = pageid;
}
if (label == null) {
label = name;
}
if (type == null) {
type = "Text";
}
}
// <<<{user defined topic code}{Property}{Property}
} // class Property
/**
* Manager for Property
*/
static class PropertyManager extends TopicBase {
public String topicName = "Property";
public List<Property> mPropertys = new ArrayList<Property>();
public Map<String, Property> mPropertyMap = new LinkedHashMap<String, Property>();
/**
* add a new Property
*/
public Property add(Property pProperty) {
mPropertys.add(pProperty);
mPropertyMap.put(pProperty.getPageid(), pProperty);
return pProperty;
}
/**
* add a new Property from the given triple
*/
public Property add(TripleQuery query, Triple pPropertyTriple) {
Property lProperty = new Property(query, pPropertyTriple);
add(lProperty);
return lProperty;
}
// convert this manager to json format
public String toJson() {
return JSON.toJSONString(this);
}
// default constructor
public PropertyManager() {
}
// construct me from the given triple Query query
public PropertyManager(TripleQuery query) {
// first query the SiDIF bases triplestore
TripleQuery lPropertyQuery = query.query(null, "isA", "Property");
for (Triple lPropertyTriple : lPropertyQuery.getTriples()) {
add(query, lPropertyTriple);
}
// then the SMW triplestore
lPropertyQuery = query.query(null, "Property:IsA", "Property");
for (Triple lPropertyTriple : lPropertyQuery.getTriples()) {
add(query, lPropertyTriple);
}
init(query);
} // constructor for Property Manager
// >>>{user defined topicmanager code}{Property}{Property}
// <<<{user defined topicmanager code}{Property}{Property}
} // class Property Manager
/**
* TopicLink
*
*/
static class TopicLink extends TopicBase {
String pageid;
String name;
String sourceRole;
String sourceMultiple;
String source;
String sourceDocumentation;
String targetRole;
String targetMultiple;
String target;
String masterDetail;
String targetDocumentation;
public String getName() {
return name;
}
public void setName(String pName) {
name = pName;
}
public String getSourceRole() {
return sourceRole;
}
public void setSourceRole(String pSourceRole) {
sourceRole = pSourceRole;
}
public String getSourceMultiple() {
return sourceMultiple;
}
public void setSourceMultiple(String pSourceMultiple) {
sourceMultiple = pSourceMultiple;
}
public String getSource() {
return source;
}
public void setSource(String pSource) {
source = pSource;
}
public String getSourceDocumentation() {
return sourceDocumentation;
}
public void setSourceDocumentation(String pSourceDocumentation) {
sourceDocumentation = pSourceDocumentation;
}
public String getTargetRole() {
return targetRole;
}
public void setTargetRole(String pTargetRole) {
targetRole = pTargetRole;
}
public String getTargetMultiple() {
return targetMultiple;
}
public void setTargetMultiple(String pTargetMultiple) {
targetMultiple = pTargetMultiple;
}
public String getTarget() {
return target;
}
public void setTarget(String pTarget) {
target = pTarget;
}
public String getMasterDetail() {
return masterDetail;
}
public void setMasterDetail(String pMasterDetail) {
masterDetail = pMasterDetail;
}
public String getTargetDocumentation() {
return targetDocumentation;
}
public void setTargetDocumentation(String pTargetDocumentation) {
targetDocumentation = pTargetDocumentation;
}
/**
* convert this TopicLink to a JSON string
*/
public String toJson() {
return JSON.toJSONString(this);
}
/**
* get the pageid for this topic
*/
public String getPageid() {
return pageid;
};
/**
* default constructor for TopicLink
*/
public TopicLink() {
}
/**
* construct a TopicLink from the given Triple
*
* @param query
* - the TripleQuery to get the triples from
* @param pTopicLinkTriple
* - the triple to construct me from
*/
public TopicLink(TripleQuery query, Triple pTopicLinkTriple) {
this(query, pTopicLinkTriple.getSubject().toString());
} // constructor
/**
* construct a TopicLink from the given pageId
*
* @param query
* - the TripleQuery to get the triples from
* @param pageid
* - pageid
*/
public TopicLink(TripleQuery query, String pageid) {
this.pageid = pageid;
Triple nameTriple = query.selectSingle(pageid, "name", null);
if (nameTriple == null)
nameTriple = query
.selectSingle(pageid, "Property:TopicLink_name", null);
if (nameTriple != null)
name = nameTriple.getObject().toString();
Triple sourceRoleTriple = query.selectSingle(pageid, "sourceRole", null);
if (sourceRoleTriple == null)
sourceRoleTriple = query.selectSingle(pageid,
"Property:TopicLink_sourceRole", null);
if (sourceRoleTriple != null)
sourceRole = sourceRoleTriple.getObject().toString();
Triple sourceMultipleTriple = query.selectSingle(pageid,
"sourceMultiple", null);
if (sourceMultipleTriple == null)
sourceMultipleTriple = query.selectSingle(pageid,
"Property:TopicLink_sourceMultiple", null);
if (sourceMultipleTriple != null)
sourceMultiple = sourceMultipleTriple.getObject().toString();
Triple sourceTriple = query.selectSingle(pageid, "source", null);
if (sourceTriple == null)
sourceTriple = query.selectSingle(pageid, "Property:TopicLink_source",
null);
if (sourceTriple != null)
source = sourceTriple.getObject().toString();
Triple sourceDocumentationTriple = query.selectSingle(pageid,
"sourceDocumentation", null);
if (sourceDocumentationTriple == null)
sourceDocumentationTriple = query.selectSingle(pageid,
"Property:TopicLink_sourceDocumentation", null);
if (sourceDocumentationTriple != null)
sourceDocumentation = sourceDocumentationTriple.getObject().toString();
Triple targetRoleTriple = query.selectSingle(pageid, "targetRole", null);
if (targetRoleTriple == null)
targetRoleTriple = query.selectSingle(pageid,
"Property:TopicLink_targetRole", null);
if (targetRoleTriple != null)
targetRole = targetRoleTriple.getObject().toString();
Triple targetMultipleTriple = query.selectSingle(pageid,
"targetMultiple", null);
if (targetMultipleTriple == null)
targetMultipleTriple = query.selectSingle(pageid,
"Property:TopicLink_targetMultiple", null);
if (targetMultipleTriple != null)
targetMultiple = targetMultipleTriple.getObject().toString();
Triple targetTriple = query.selectSingle(pageid, "target", null);
if (targetTriple == null)
targetTriple = query.selectSingle(pageid, "Property:TopicLink_target",
null);
if (targetTriple != null)
target = targetTriple.getObject().toString();
Triple masterDetailTriple = query.selectSingle(pageid, "masterDetail",
null);
if (masterDetailTriple == null)
masterDetailTriple = query.selectSingle(pageid,
"Property:TopicLink_masterDetail", null);
if (masterDetailTriple != null)
masterDetail = masterDetailTriple.getObject().toString();
Triple targetDocumentationTriple = query.selectSingle(pageid,
"targetDocumentation", null);
if (targetDocumentationTriple == null)
targetDocumentationTriple = query.selectSingle(pageid,
"Property:TopicLink_targetDocumentation", null);
if (targetDocumentationTriple != null)
targetDocumentation = targetDocumentationTriple.getObject().toString();
init(query);
} // constructor for TopicLink
// >>>{user defined topic code}{TopicLink}{TopicLink}
Topic sourceTopic = null;
Topic targetTopic = null;
// <<<{user defined topic code}{TopicLink}{TopicLink}
} // class TopicLink
/**
* Manager for TopicLink
*/
static class TopicLinkManager extends TopicBase {
public String topicName = "TopicLink";
public List<TopicLink> mTopicLinks = new ArrayList<TopicLink>();
public Map<String, TopicLink> mTopicLinkMap = new LinkedHashMap<String, TopicLink>();
/**
* add a new TopicLink
*/
public TopicLink add(TopicLink pTopicLink) {
mTopicLinks.add(pTopicLink);
mTopicLinkMap.put(pTopicLink.getPageid(), pTopicLink);
return pTopicLink;
}
/**
* add a new TopicLink from the given triple
*/
public TopicLink add(TripleQuery query, Triple pTopicLinkTriple) {
TopicLink lTopicLink = new TopicLink(query, pTopicLinkTriple);
add(lTopicLink);
return lTopicLink;
}
// convert this manager to json format
public String toJson() {
return JSON.toJSONString(this);
}
// default constructor
public TopicLinkManager() {
}
// construct me from the given triple Query query
public TopicLinkManager(TripleQuery query) {
// first query the SiDIF bases triplestore
TripleQuery lTopicLinkQuery = query.query(null, "isA", "TopicLink");
for (Triple lTopicLinkTriple : lTopicLinkQuery.getTriples()) {
add(query, lTopicLinkTriple);
}
// then the SMW triplestore
lTopicLinkQuery = query.query(null, "Property:IsA", "TopicLink");
for (Triple lTopicLinkTriple : lTopicLinkQuery.getTriples()) {
add(query, lTopicLinkTriple);
}
init(query);
} // constructor for TopicLink Manager
// >>>{user defined topicmanager code}{TopicLink}{TopicLink}
// <<<{user defined topicmanager code}{TopicLink}{TopicLink}
} // class TopicLink Manager
}
@{
// global variables
// will only be set if tripleStore argument is available e.g. not for dialogs
Topic maintopic=null;
TripleQuery query=null;
TripleQuery topics=null;
ContextManager mContextManager=null;
TopicManager mTopicManager=null;
String maintopicName=null;
if (tripleStore!=null) {
query=tripleStore.query();
topics=query.query(null,"isA","Topic");
mContextManager=new ContextManager(tripleStore);
mTopicManager=new TopicManager(query);
// PropertyManager mPropertyManager=new PropertyManager(query);
// TopicLinkManager mTopicLinkManager=new TopicLinkManager(query);
// SMW_TypeManager mSMW_TypeManager=new SMW_TypeManager(query);
mTopicManager.configureTopics();
maintopicName=wikiTask.getParams();
if (maintopicName!=null) {
maintopic=mTopicManager.byName(maintopicName);
}
}
}