lp-collaborative-workspace/lp-cw-component/lp-cw-component-ui/src/main/resources/LPUI/RecommendationPanel.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
<xwikidoc version="1.2" reference="LPUI.RecommendationPanel" locale="">
<web>LPUI</web>
<name>RecommendationPanel</name>
<language/>
<defaultLanguage/>
<translation>0</translation>
<creator>xwiki:XWiki.Admin</creator>
<creationDate>1444825817000</creationDate>
<parent>LPUI.SimulationEnvironment</parent>
<author>xwiki:XWiki.Admin</author>
<contentAuthor>xwiki:XWiki.Admin</contentAuthor>
<date>1462201686000</date>
<contentUpdateDate>1462182608000</contentUpdateDate>
<version>1.1</version>
<title>RecommendationPanel</title>
<comment/>
<minorEdit>false</minorEdit>
<syntaxId>xwiki/2.1</syntaxId>
<hidden>true</hidden>
<content/>
<object>
<name>LPUI.RecommendationPanel</name>
<number>0</number>
<className>Panels.PanelClass</className>
<guid>48dc8c74-231a-4f26-8878-8cb758c8e4c5</guid>
<class>
<name>Panels.PanelClass</name>
<customClass/>
<customMapping/>
<defaultViewSheet/>
<defaultEditSheet/>
<defaultWeb/>
<nameField/>
<validationScript/>
<category>
<cache>0</cache>
<disabled>0</disabled>
<displayType>select</displayType>
<multiSelect>0</multiSelect>
<name>category</name>
<number>5</number>
<prettyName>Category</prettyName>
<relationalStorage>0</relationalStorage>
<separator> </separator>
<separators> ,|</separators>
<size>1</size>
<unmodifiable>0</unmodifiable>
<values>Information|Navigation|Tools|Administration|Other</values>
<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
</category>
<content>
<disabled>0</disabled>
<editor>Text</editor>
<name>content</name>
<number>4</number>
<prettyName>Content</prettyName>
<rows>25</rows>
<size>120</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
</content>
<description>
<disabled>0</disabled>
<editor>Text</editor>
<name>description</name>
<number>3</number>
<prettyName>Description</prettyName>
<rows>5</rows>
<size>40</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
</description>
<name>
<disabled>0</disabled>
<name>name</name>
<number>1</number>
<prettyName>Name</prettyName>
<size>40</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</name>
<type>
<cache>0</cache>
<disabled>0</disabled>
<displayType>select</displayType>
<multiSelect>0</multiSelect>
<name>type</name>
<number>2</number>
<prettyName>Panel type</prettyName>
<relationalStorage>0</relationalStorage>
<separator> </separator>
<separators> ,|</separators>
<size>1</size>
<unmodifiable>0</unmodifiable>
<values>view|edit</values>
<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
</type>
</class>
<property>
<category>Navigation</category>
</property>
<property>
<content>{{velocity}}
#set ($recommandationSimulationMode = $request.getParameter('recInSimMode'))
#set ($baseElementObject = $doc.getObject('LPCode.BaseElementClass'))
#set ($modelsetid = $baseElementObject.getProperty('modelsetid').value)
#set ($modelid = $baseElementObject.getProperty('modelid').value)
#if ("$!{baseElementObject}" == "")
#set ($modelObject = $doc.getObject('LPCode.ModelClass'))
#set ($modelsetid = $modelObject.getProperty('modelsetid').value)
#set ($modelid = $modelObject.getProperty('id').value)
#if ("$!{modelObject}" == "")
#set ($modelsetObject = $doc.getObject('LPCode.ModelSetClass'))
#set ($modelsetid = $modelsetObject.getProperty('id').value)
#end
#end
#if ("$!{modelsetid}" == "")
#set ($modelsetid = $request.getParameter('modelsetid'))
#end
#if ("$!{modelid}" == "")
#set ($modelid = $request.getParameterValue('modelid'))
#else
#set ($modelidNumber = $modelid.split("\.").get(1))
#set ($modelSetReference = $services.model.createDocumentReference($xcontext.database, 'CoreRepository', ${modelsetid}))
#set ($attachmentName = "${modelsetid}.ADOXX")
#set ($attachmentReference = $services.model.createAttachmentReference($modelSetReference, $attachmentName))
#set ($attachmentPath = "attach:${services.model.serialize($attachmentReference, 'default')}")
#set ($bpmnName = "${modelidNumber}.bpmn")
#set ($bpmnPath = "${attachmentPath}/${bpmnName}")
#end
#set ($artifactid = $baseElementObject.getProperty('id').value)
#set ($simulationReference = $services.model.createDocumentReference($xcontext.database, 'LPUI', 'SimulationEnvironment'))
#set ($querystring = "modelsetid=${modelsetid}&modelid=${modelid}")
#set ($simulationURL = $xwiki.getURL($simulationReference, 'view', $querystring))
#set ($currentUser = $xcontext.user)
##
#if ("$!{currentUser}" != "XWiki.superadmin" && "$!{currentUser}" != "XWiki.Admin" && "$!{currentUser}" != "XWiki.XWikiGuest")
#set ($userid = $currentUser)
{{html clean=false}}
<div id="panel-metadata" class="hidden" data-websocketurl="${services.websocket.getURL('recommendation')}" data-modelsetid="$!{modelsetid}" data-modelid="$!{modelid}" data-artifactid="$!{artifactid}" data-userid="$!{userid}"></div>
{{/html}}
#end
{{/velocity}}</content>
</property>
<property>
<description>View of the recommendation provided by the Ontology Recommendation Component.</description>
</property>
<property>
<name>Recommendation</name>
</property>
<property>
<type>view</type>
</property>
</object>
<object>
<name>LPUI.RecommendationPanel</name>
<number>0</number>
<className>XWiki.JavaScriptExtension</className>
<guid>f08cf1bd-d92e-49cf-b209-a6f33a0dccca</guid>
<class>
<name>XWiki.JavaScriptExtension</name>
<customClass/>
<customMapping/>
<defaultViewSheet/>
<defaultEditSheet/>
<defaultWeb/>
<nameField/>
<validationScript/>
<cache>
<cache>0</cache>
<disabled>0</disabled>
<displayType>select</displayType>
<multiSelect>0</multiSelect>
<name>cache</name>
<number>5</number>
<prettyName>Caching policy</prettyName>
<relationalStorage>0</relationalStorage>
<separator> </separator>
<separators>|, </separators>
<size>1</size>
<unmodifiable>0</unmodifiable>
<values>long|short|default|forbid</values>
<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
</cache>
<code>
<disabled>0</disabled>
<name>code</name>
<number>2</number>
<prettyName>Code</prettyName>
<rows>20</rows>
<size>50</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType>
</code>
<name>
<disabled>0</disabled>
<name>name</name>
<number>1</number>
<prettyName>Name</prettyName>
<size>30</size>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
</name>
<parse>
<disabled>0</disabled>
<displayFormType>select</displayFormType>
<displayType>yesno</displayType>
<name>parse</name>
<number>4</number>
<prettyName>Parse content</prettyName>
<unmodifiable>0</unmodifiable>
<classType>com.xpn.xwiki.objects.classes.BooleanClass</classType>
</parse>
<use>
<cache>0</cache>
<disabled>0</disabled>
<displayType>select</displayType>
<multiSelect>0</multiSelect>
<name>use</name>
<number>3</number>
<prettyName>Use this extension</prettyName>
<relationalStorage>0</relationalStorage>
<separator> </separator>
<separators>|, </separators>
<size>1</size>
<unmodifiable>0</unmodifiable>
<values>currentPage|onDemand|always</values>
<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType>
</use>
</class>
<property>
<cache>default</cache>
</property>
<property>
<code>require.config({
paths: {
"Q": "/xwiki/bin/jsx/LPCode/Q",
"mustache": "/xwiki/bin/jsx/LPCode/mustache"
}
});
require(["jquery", "Q", "mustache"], function ($, Q, Mustache) {
$(function(){
var $rightPanels = $("#rightPanels");
var $panelMetadata = $('#panel-metadata');
var websocketurl = $panelMetadata.data('websocketurl');
if (!websocketurl) { return; }
var modelsetid = $panelMetadata.data('modelsetid');
var modelid = $panelMetadata.data('modelid');
var artifactid = $panelMetadata.data('artifactid');
var userid = $panelMetadata.data('userid');
var keyList = ["applicationCity", "applicationATECOCategory", "applicationSubType", "applicationZone", "involvedThirdParties", "applicationPublicAdministration", "applicationBusinessActivity", "applicantName", "applicationSector"];
var getContent = function getContent(url) {
return Q.Promise(function(resolve, reject, notify) {
$.ajax({
"url": url + "?media=json",
"method": "GET",
"accept": "application/json"
}).done(function(data, status, xhr) {
resolve(data.content);
}).fail(function(xhr, status, err) {
reject(err);
});
});
};
var templatePromise = getContent("/xwiki/rest/wikis/xwiki/spaces/LPUI/pages/RecommendationTemplate");
var translationPromise = Q.Promise(function(resolve, reject, notify) {
getContent("/xwiki/rest/wikis/xwiki/spaces/LPCode/pages/Translations")
.then(function(content) {
var translation = {};
for(line of content.split('\n')) {//, function(index, item) {
line.replace(/^([a-zA-Z.]+)=(.*)$/, function(all, first, second) {
translation[first] = second;
});
}
resolve(translation);
});
});
var ws = new WebSocket(websocketurl);
var data = [modelsetid, artifactid, userid].join(',');
ws.onopen = function() {
ws.send(data);
};
ws.onmessage = function (msg) {
var data = msg.data;
if (data) {
// Inject data
Q.all([templatePromise, translationPromise]).then(function(promises) {
var template = promises[0];
var translation = promises[1];
var recommendations = $.parseJSON(data);
if (recommendations.similarCases) {
var similarCases = [];
for(sc of recommendations.similarCases.similarCases) {
var metadata = [];
for(key of keyList) {
if (sc.data.hasOwnProperty(key)) {
var values = sc.data[key].theList;
metadata.push({"key": key, "values": values});
}
}
sc.data = metadata;
}
}
var html = Mustache.to_html(template, recommendations);
$rightPanels
.find('.RecommendationPanel')
.remove()
.end()
.append(html)
.children(".panel")
.addClass("RecommendationPanel");
// Inject tooltips
var $items = $rightPanels.find(".similarcase-item");
$items.each(function(index) {
var $item = $(this);
var $tooltip = $item.find(".similarcase-tooltip");
$item.tooltip({
"title": $tooltip.html(),
"html": true
});
});
});
}
};
});
});</code>
</property>
<property>
<name>Recommendation panel</name>
</property>
<property>
<parse/>
</property>
<property>
<use>always</use>
</property>
</object>
</xwikidoc>