LearnPAd/learnpad

View on GitHub
lp-collaborative-workspace/lp-cw-component/lp-cw-component-ui/src/main/resources/LPUI/RecommendationPanel.xml

Summary

Maintainability
Test Coverage
<?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}&amp;modelid=${modelid}")
#set ($simulationURL = $xwiki.getURL($simulationReference, 'view', $querystring))
#set ($currentUser = $xcontext.user)
##
#if ("$!{currentUser}" != "XWiki.superadmin" &amp;&amp; "$!{currentUser}" != "XWiki.Admin" &amp;&amp; "$!{currentUser}" != "XWiki.XWikiGuest")
    #set ($userid = $currentUser)
{{html clean=false}}
&lt;div id="panel-metadata" class="hidden" data-websocketurl="${services.websocket.getURL('recommendation')}" data-modelsetid="$!{modelsetid}" data-modelid="$!{modelid}" data-artifactid="$!{artifactid}" data-userid="$!{userid}"&gt;&lt;/div&gt;
{{/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>