We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Présentation et Utilisation du Bureau Virtuel

1. Présentation

L'objectif du bureau virtuel est de proposer aux utilisateurs un portail personnalisé ou ils peuvent choisir et assembler à leur guise les services qu'ils souhaitent utiliser.

Le webmaster est libre de proposer les services qu'il souhaite :

  • des informations internes : les nouveautés, les projets en cours, les utilisateurs connectés, ...
  • des informations externes : des flux RSS préconfigurés, des flux RSS libres (l'utilisateur peut saisir l'URL des flux RSS qu'il souhaite lire)
  • des outils personnalisés : agenda, favoris, workflow, gestion des documents, ...
  • des portlets métiers
  • des widgets : via la Portlet Widget il est possible d'utiliser la plupart des widgets proposés par Google (cours de la bourse, météo, cartes et plans, trafic routier, ...). Il est aussi possible de laisser l'utilisateur choisir les widgets qu'il souhaite utiliser

L'ergonomie du bureau virtuel est très proche de celle des outils tels que Netvibes ou iGoogle.

Les utilisateurs peuvent personnaliser leur bureau en plaçant les services dans des onglets, en choisissant le nombre et la taille des colonnes pour chaque onglet et en sélectionnant un habillage pour leur bureau.

Fig. 1. Exemple de bureau virtuel

Chaque service peut être déplacé par un simple glisser/déposer. Un utilisateur peut choisir le titre et la couleur de la boîte du service. Certains services proposent plus d'options (p. ex. le service RSS permet de choisir le nombre d'articles à afficher).

Fig. 2. Edition de service

2. Principes

Le bureau virtuel s'intègre dans un portail en utilisant une Portlet Bureau Virtuel.

Les services : Les services proposés à l'utilisateur sont des portlets dont le paramétrage est stocké dans le bureau virtuel. Toute Portlet Skinnable peut être proposée comme service grâce à l'aptitude Bureau Virtuel > Service.

Les flux RSS : Une Portlet RSS avec l'aptitude Bureau Virtuel > Service est automatiquement créée lors de l'installation du module. Ce service n'est pas visible par les utilisateurs, mais c'est lui qui est utilisé lors de l'ajout de flux RSS dans le bureau virtuel. Il est possible de positionner des droits de consultation sur cette portlet pour restreindre l'ajout de flux RSS dans le bureau. Il est également possible de créer d'autre Portlet RSS pour proposer des services RSS déjà paramétrés.

Les widgets : Des Gadgets Google peuvent être proposés en tant que service grâce à la Portlet Widget.

Les bureaux par défaut :

Lorsqu'un utilisateur accède à son bureau virtuel pour la première fois, son bureau est automatiquement créé à partir d'un "bureau par défaut".

Il existe systématiquement un bureau par défaut global qui est configurable depuis l'interface d'administration du site. Il est également possible de configurer d'autres bureaux par défaut par espaces de travail.

Lors de sa première connexion, s'il existe plusieurs bureaux par défaut disponibles pour l'utilisateur, il pourra choisir son bureau initial parmi ceux-ci.

Le stockage : Le paramétrage du bureau virtuel d'un utilisateur est stocké dans la base de données JcmsDB, via une ExtraDBData du membre, sous un format XML. Le paramétrage comprend les options du bureau virtuel (thème), les services présents et leur agencement (onglet, colonne, etc.) et la personnalisation des services (couleurs, champs personnalisés, etc.)

3. Installation et Configuration

3.1 Configuration initiale

  1. Ajoutez le module Bureau Virtuel et redémarrez JCMS.
  2. Activez le type Portlet Bureau Virtuel dans votre espace de travail,
  3. Créez une Catégorie de navigation dédiée, p. ex. "Mon bureau",
  4. Créez un Portail rattaché à cette catégorie,
  5. Créez une Portlet Sélection dans ce portail,
  6. Créez une Portlet Bureau Virtuel dans la Portlet Sélection,
  7. Editez la Portlet Bureau Virtuel et cochez la catégorie de navigation
    (ceci est nécessaire pour l'édition des bureaux virtuels par défaut des espaces de travail)

Si vous souhaitez restreindre l'accès au bureau virtuel, ajoutez des droits de consultation sur la Portlet Bureau Virtuel et sur la catégorie.

3.2 Configurer une portlet en tant que Service

Les services sont des portlets standards qui peuvent être personnalisées par l'utilisateur dans leur bureau virtuel.

Editez la portlet que vous souhaitez voir figurer dans la liste des Services des Bureaux Virtuels :

  1. Activation de l'aptitude Service (requis)
    Dans l'onglet Personnalisation des paramètres de la portlet, sélectionnez l'aptitude Bureau Virtuel > Service
  2. Saisi du titre du service (recommandé)
    Dans l'onglet Apparence , saisissez le titre du service qui sera présenté à l'utilisateur (à différencier du titre de la portlet principalement utilisé dans les interface de JCMS).
  3. Sélection d'une image de prévisualisation (recommandé)
    Dans l'onglet Description , sélectionnez/déposez une image pour l'aperçu du service (dimensions : 200x150).
    En l'absence d'image de portlet, c'est la prévisualisation du gabarit de la portlet qui sera utilisée.

Exemple : Ajout d'un service Météo via la Portlet Widget

  1. Récupération du code du widget
    • Accédez au site des Google Gadgets
    • Sélectionnez le gadget météo de votre choix.
    • Cliquez sur le bouton "Ajouter à votre page Web", une interface de configuration du gadget s'affiche.
      Si vous n'obtenez pas d'interface de configuration vous avez probablement cliqué sur l'aperçu du gadget au lieu du bouton.
    • Saisissez les paramètres du widget, puis cliquez sur le bouton "Obtenir le code".

      Fig. 3. Configuration du Google Gadget

  2. Configuration de la Portlet Widget
    • Créez une nouvelle Portlet Widget
    • Code du widget : Coller le code du gadget dans le champ "Code" du formulaire d'édition de la Portlet Widget

      Fig. 4. Code de la Portlet Widget

    • Titre du service : Dans l'onglet Apparence, saisissez le titre du Service qui sera présenté à l'utilisateur (à différencier du titre de la portlet principalement utilisé dans les interfaces de JCMS)

      Fig. 5. Edition du titre du service

    • Aptitude : Dans l'onglet Personnalisation, sélectionnez l'aptitude Service

      Fig. 6. Sélection de l'aptitude Bureau Virtuel > Service

    • Image de Prévisualisation : Dans l'onglet Description, sélectionnez une image pour l'aperçu du Service Météo (par exemple une capture d'écran de la portlet)

      Fig. 7. Sélection de l'image de prévisualisation du service

Votre service est maintenant disponible dans l'interface du bureau virtuel, prêt à être ajouté par les utilisateurs.

Fig. 8. Service Météo dans le bureau virtuel

3.3 Configurer les bureaux par défaut

3.3.1 Bureau par défaut global

Le bureau par défaut global est configurable par l'administrateur technique depuis la zone d'administration du site, via le lien "Edition du bureau virtuel par défaut".

Le bureau par défaut global ne peut pas être supprimé.

Note technique : ce bureau par défaut global est créer initialement à partir d'un fichier interne au plugin, WEB-INF/plugins/VirtualDesktopPlugin/default-desktop.xml, puis il est rattaché à la catégorie racine du site via l'ExtraDBData jcmsplugin.virtualdesktop.desktop.

3.3.2 Bureau par défaut d'un espace de travail

Ouvrez la zone d'administration de l'espace de travail et cliquez sur le lien "Edition du bureau virtuel par défaut".

Pour ne plus proposer le bureau d'un espace de travail aux utilisateurs de cet espace, éditez le et supprimez le.

4. Configuration avancée

4.1 Classification des services

Les services proposés aux utilisateurs dans la gestion de leur bureau virtuel peuvent être organisés dans des catégories. Pour cela, il faut

  • configurez l'identifiant de la catégorie racine accessible dans l'administration du module, (correspondant à la propriété $jcmsplugin.virtualdesktop.services.root-category)
  • catégorisez chaque portlet ayant l'aptitude service

L'interface d'ajout de service proposer alors une navigation par catégorie.

bureau virtual classification de servic

Fig. 8. Classification lors de l'ajout de services

4.2 Recherche enregistrée

Le bureau virtuel propose aux utilisateurs la capacité d'enregistrer des recherches qu'ils effectuent dans le portail, en tant que service de leur bureau virtuel pour consultation des résultats à tout moment.
Pour cela, coté administration :

  1. configurez une portlet requête/itération avec l'aptitude service de bureau virtuel
    Lors du rendu en tant que service, tous les règlages de cette portlet s'appliqueront, à l'exception de la requête sur les contenus qui sera surchargée par la requête effectuée par l'utilisateur. 
  2. spécifiez l'identifiant de cette portlet dans la propriété $jcmsplugin.virtualdesktop.saved-search.pqf-idou via l'administration du module

A l'utilisation  :

  1. effectuez une recherche quelconque dans le portail
  2. cliquez sur le lien Enregistrer cette recherche dans mon bureau virtuel bureau virtuel recherche enregistré
    Fig 9 : lien d'ajout de rechercher enregistré dans le portail
  3. un nouveau service est ajouté dans votre bureau virtuel avec la recherche que vous venez d'effectuer 
    La recherche est effectuée à chaque consultation du bureau virtuel, ainsi les résultats sont toujours à jour et disponibles pour consultation depuis votre bureau.

4.3 Ajout de thèmes (styles de bureau virtuel)

Il est possible d'ajouter des thèmes de bureau virtuel, à la fois pour permettre à l'utilisateur de choisir parmi de nouveaux styles graphiques mais également pour pouvoir utiliser un autre thème dans le bureau par défaut si vous le personnalisez.

Les thèmes sont gérés sous forme de fichiers CSS qui viennent surcharger les styles par défaut. Pour ajouter un thème, on le déclare dans les propriétés du plugin puis on modifie les styles standards dans le fichier CSS du thème.

4.3.1 Déclaration des propriétés

Déclarez les propriétés ci-dessous.
{theme-name} est un nom unique de votre choix (qui sera repris dans l'attribut css de la balise desktop dans le XML du bureau virtuel)

Déclaration du thème dans le fichier plugin.prop de votre module

2 propriétés :

  1. la première pointant vers le chemin du fichier css contenant vos styles de bureau virtuel,
  2. la seconde pointant vers le chemin de l'image de prévisualisation (jpeg de 200x150).
jcmsplugin.virtualdesktop.themes.{theme-name}.css-path: path/to/theme.css
jcmsplugin.virtualdesktop.themes.{theme-name}.preview-path: path/to/theme.jpg
Propriétés de traduction dans en.prop et fr.prop de votre module
# en.prop
jcmsplugin.virtualdesktop.i18n.themes.{theme-name}: My theme
# fr.prop
jcmsplugin.virtualdesktop.i18n.themes.{theme-name}: Mon theme

4.3.2 Déclaration des CSS

Dans votre fichier CSS surchargez les styles du bureau virtuel à votre guise en utilisant le style .dsk-{theme-name}.

Principaux sélecteur CSS :

.desktop bureau (div comprenant tout le bureau)
.dsk-header entête (div comprenant les onglets et les actions)
.dsk-tabs conteneur des onglets (ul)
.dsk-tabs li onglet
.dsk-tabs li.selected onglet sélectionné
.dsk-content conteneur des colonnes (div)
.dsk-service service (div)
.dsk-service-header entête de service (div)

 

Sélecteurs CSS

Fig. 10. Sélecteurs CSS

Voici le contenu du fichier CSS utilisé pour afficher une bordure sur les différents éléments du bureau dans la capture ci-dessus (à déclarer avec un thème debug).

.desktop.dsk-debug               { border: 3px solid #F76541; }
.dsk-debug .dsk-header { border: 3px solid orange; margin : 3px;}
.dsk-debug .dsk-tabs { border: 3px solid green; }
.dsk-debug .dsk-tabs li { border: 3px solid red; }
.dsk-debug .dsk-tabs li.selected { border: 3px solid gold; }
.dsk-debug .dsk-content { border: 3px solid purple; margin : 3px; }
.dsk-debug .dsk-service { border: 3px solid #C25283; }
.dsk-debug .dsk-service-header { border: 3px solid darkblue; }

4.3.3 Exemple

Voici l'exemple d'un thème "Noël" (identifiant christmas) pour afficher dans l'entête une image de paysage enneigé en fond :

WEB-INF/plugins/MyPlugin/properties/plugin.prop

jcmsplugin.virtualdesktop.themes.christmas.css-path: plugins/MyPlugin/img/desktop-themes/christmas/christmas.css
jcmsplugin.virtualdesktop.themes.christmas.preview-path: plugins/MyPlugin/img/desktop-themes/christmas/christmas.jpg

WEB-INF/plugins/MyPlugin/properties/languages/en.prop

jcmsplugin.virtualdesktop.i18n.themes.christmas: Christmas

WEB-INF/plugins/MyPlugin/properties/languages/fr.prop

jcmsplugin.virtualdesktop.i18n.themes.christmas: Noël

plugins/MyPlugin/css/desktop-themes/christmas/christmas.css

 .dsk-christmas .dsk-header {  
padding-top:80px;
background: white url("../../img/desktop-themes/christmas/snow.gif") top left no-repeat;
}

Après redémarrage du site, le thème est proposé dans la liste des thèmes de bureau virtuel.

4.4 Ajout d'icônes pour les onglets

Chaque onglet dispose d'une icône que l'utilisateur peut choisir parmi une liste prédéfinie d'icônes afin de différencier visuellement les onglets les uns des autres.

Les icônes sont gérées en utilisant des classes CSS qui viennent s'appliquer sur une balise <img> existante (utilisation du background-image). Pour ajouter une icône, on la déclare dans les propriétés du plugin et si besoin on déclare les styles CSS correspondant.

4.4.1 Déclaration des propriétés

Ajoutez une propriété jcmsplugin.virtualdesktop.icons.{icon-name}.
{icon-name} est un identifiant unique de votre choix (qui sera repris dans l'attribut icon de la balise service dans le xml du bureau virtuel). La valeur de cette propriété est la liste des styles css qui seront positionnés sur l'image. Il faut également déclarer les propriétés de traduction correspondante pour les labels des icônes.

4.4.2 Déclaration des CSS

JCMS 6 fourni en standard l'ensemble des icônes Famfamfam silk sous forme de Sprites CSS.
Vous pouvez utiliser ces icônes dans le bureau virtuel en utilisant les classes CSS adéquats. Pour connaitre les classes à utiliser, installez le module Dev Tools et accédez à la page Liste des icônes dans l'espace d'administration.

Il est également possible de déclarer des icônes en ajoutant des classes dans le fichier CSS de votre portail de bureau virtuel.

plugins/MyPlugin/css/portal/mydesktopportal.css

IMG.my_tab_icon {
height:18px; width:18px;
background-repeat: no-repeat;
background-image:url("../../images/mytabicon.png");
}

4.4.3 Exemple

On souhaite ajouter une icone "Soleil" en utilisant les icônes Famfamfam silk.

Voici les propriétés à mettre dans le fichier plugin.prop de votre module de site

jcmsplugin.virtualdesktop.icons.fff-weather_sun: ss_sprite ss_weather_sun

Ainsi que les propriétés de traduction dans en.prop et fr.prop de votre module.

# en.prop
jcmsplugin.virtualdesktop.i18n.icons.fff-weather_sun: Sun
# fr.prop
jcmsplugin.virtualdesktop.i18n.icons.fff-weather_sun: Soleil

Après redémarrage du site l'icône est proposée dans la liste des icônes d'onglet.

4.5 Liste des styles de couleurs de services

Les couleurs qui peuvent être choisies par l'utilisateur pour chacun des services sont configurables dans les propriétés.
On les configure en modifiant une propriété qui contient la liste des classes CSS qui peuvent être utilisés dans l'habillage du service.

4.5.1 Déclaration des propriétés

Modifiez la propriété jcmsplugin.virtualdesktop.services.colors.
Exemple pour ajouter le style dark :

jcmsplugin.virtualdesktop.services.colors: default red orange yellow green blue dark

4.5.2 Déclaration des CSS

Ajoutez les styles correspondants dans les feuilles de style de vos themes:
Pour cela il faut définir le style dsk-service-{color-theme-name} dans 2 usages :

Le style pour la prévisualisation lors de l'édition d'un service :

.dsk-service-color-field .dsk-service-dark { background: #FFC177; }

Le style pour l'habillage du service (la skin) :

.dsk-service-dark.dsk-service-header {
background: #CCCCCC url('custom/service-header-dark.png') repeat-x scroll
center;
}

5. Développement de Service

Pour créer un nouveau service, il faut développer une portlet standard avec son gabarit de présentation. Il faut cependant respecter quelques recommandations afin de garantir le bon fonctionnement de cette portlet dans le bureau virtuel.

Il est également possible de fournir un gabarit d'édition pour permettre aux utilisateurs de personnaliser certains champs de la portlet.

5.1 Recommandations

5.1.1 Identifiant HTML unique

Un service peut être inséré en plusieurs exemplaire dans un bureau virtuel, mais il s'agit toujours de la même portlet, il ne faut donc plus utiliser l'identifiant de la portlet comme id d'élément HTML.
A la place, utilisez un autre identifiant unique, par exemple la PorletRSS utilise la source, le module Gestion de Tâches l'identifiant du service (cf. section API ci-dessous).

5.1.2 Inclusion de fichiers CSS ou JS

Depuis vos JSP, utilisez les méthodes addJavaScript() et addCSSHeader() de la classe JcmsJspContext, elles garantissent le chargement des CSS et des JS même lors d'une requête AJAX.

jcmsContext.addJavaScript("plugins/MyPlugin/css/styles.css");
jcmsContext.addCSSHeader("plugins/MyPlugin/js/script.js");

5.1.3 Initialisation du code javacript

Pour être compatible avec le chargement AJAX, invoquez vos méthodes d'initialisation et de nettoyage comme ceci :

Event.observe(window,   "load",           JCMS.plugin.MyPlugin.init);
Event.observe(document, "refresh:after", JCMS.plugin.MyPlugin.init);
Event.observe(document, "refresh:before", JCMS.plugin.MyPlugin._dispose);

5.2 Créer un gabarit d'édition spécifique

Cette étape est optionnelle. Par défaut l'édition d'un service (pour les champs titre et couleur) est prise en charge par plugins/VirtualDesktopPlugin/jsp/serviceEdit.jsp
Développez un gabarit d'édition uniquement si vous devez fournir une édition de champ(s) spécifique(s).

Pour cela, créez un gabarit d'édition inline edit{PortletType}Service.jsp en respectant les étapes suivantes :

5.2.1 Développement du gabarit d'édition

1.1 Inclusion du jsp d'initialisation :
<%@ include file='/plugins/VirtualDesktopPlugin/jsp/doServiceEditInit.jspf' %>
1.2. Déclaration du JavaBean + appel à la méthode validate()
%><jsp:useBean id='formHandler' scope='page' class='generated.EditPortletRSSHandler'><%
%><jsp:setProperty name='formHandler' property='request' value='<%= request %>'/><%
%><jsp:setProperty name='formHandler' property='response' value='<%= response %>'/><%
%><jsp:setProperty name='formHandler' property='*' /><%
%><jsp:setProperty name='formHandler' property='id' value='<%= portlet.getId() %>' /><%
%><jsp:setProperty name='formHandler' property='loggedMember' value='<%= serviceEditMember %>' /><%
%></jsp:useBean><%

!! IMPORTANT : Forcer les propriétés id et loggedMember (utilisés par la mécanique interne du bureau virtuel)

1.3. Inclusion du jsp d'en-tête d'édition de service
<%@ include file='/plugins/VirtualDesktopPlugin/jsp/doServiceEditHeader.jspf' %>
1.4. Liste des champs à éditer

Pour chaque champ :

  • 1 balise <input> avec l'attribut name contenant la chaîne virtualdesktop.serviceFields et l'attribut value contenant le nom du champ personnalisé de la portlet (e.g : fieldName)
  • 1 balise <input> avec l'attribut name contenant le nom du champ personnalisé (e.g : fieldName) et l'attribut value contenant la valeur actuelle du champ (récupérez cette valeur en faisant appel à portlet.getFieldValue(jcmsContext, "fieldName"})

Exemple pour le champ pageSize

<input value="pageSize" name="virtualdesktop.serviceFields" type="hidden"/>
<input id="<%= service.getId() %>pageSize"
name="pageSize" type="text"
value="<%= portlet.getIntFieldValue(jcmsContext, "pageSize") %>"
maxlength="4" size="4"/>
1.5. Inclusion du jsp de pied de page d'édition de service
<%@ include file='/plugins/VirtualDesktopPlugin/jsp/doServiceEditFooter.jspf' %>

5.2.2 Déclaration du fichier dans plugin.xml

Exemple avec la Portlet RSS :

  <templates type="PortletRSS">
<template name="default" file="editPortletRSSService.jsp" usage="jcmsplugin.virtualdesktop.editInline">
<label xml:lang="en">Template used in Virtual Desktop when editing a RSS service.</label>
<label xml:lang="fr">Gabarit utilisé dans le bureau virtuel pour l'édition d'un service RSS</label>
</template>
</templates>

5.2.3 Utilisation des champs personnalisés dans le gabarit de présentation

Pour que les champs personnalisés par l'utilisateur soient utilisés dans le gabarit de présentation de la portlet, remplacez les appels portlet.getMonChamp() par

portlet.getFieldValue(jcmsContext, "monChamp");

ou pour les int

portlet.getIntFieldValue(jcmsContext, "monChampInt");

Consultez le gabartit de la PortletRSS (doPortletRSSFullDisplay.jsp) pour un exemple d'utilisation de ces méthodes.

5.2.4 Exemple

Cet exemple illustre l'édition du champ pageSize de la PortletDirectory

<%--
@Summary : Inline edition of Portlet Directory service
@Requires : Virtual Desktop plugin
--%><%
%><%@ include file='/plugins/VirtualDesktopPlugin/jsp/doServiceEditInit.jspf' %><%

%><jsp:useBean id='formHandler' scope='page' class='generated.EditPortletDirectoryHandler'><%
%><jsp:setProperty name='formHandler' property='request' value='<%= request %>'/><%
%><jsp:setProperty name='formHandler' property='response' value='<%= response %>'/><%
%><jsp:setProperty name='formHandler' property='*' /><%
%><jsp:setProperty name='formHandler' property='id' value='<%= portlet.getId() %>' /><%
%><jsp:setProperty name='formHandler' property='loggedMember' value='<%= serviceEditMember %>' /><%
%></jsp:useBean><%

if (formHandler.validate()) {
return;
}

%><%@ include file='/plugins/VirtualDesktopPlugin/jsp/doServiceEditHeader.jspf' %>

<%-- allow source edition only when using the default portlet --%>
<li class="dsk-service-field">
<% String maxItemsLabel = channel.getTypeFieldEntry(PortletDirectory.class, "pageSize", true).getLabel(userLang); %>
<label for="<%= service.getId() %>pageSize"><%= maxItemsLabel %></label>
<input value="pageSize" name="virtualdesktop.serviceFields" type="hidden"/>
<input id="<%= service.getId() %>pageSize"
name="pageSize" type="text"
value="<%= portlet.getIntFieldValue(jcmsContext, "pageSize") %>"
maxlength="4" size="4"/>
</li>

<%@ include file='/plugins/VirtualDesktopPlugin/jsp/doServiceEditFooter.jspf' %>

6. Développements avancés

6.1 Les principales classes de l'API

Important : Consultez la JavaDoc fourni dans le Module Bureau Virtuel (répertoire plugins/VirtualDesktopPlugin/docs/javadoc/) pour plus d'informations sur les classes et méthodes évoquées ci-dessous

6.1.1 Desktop

C'est l'objet principal du bureau virtuel, c'est lui qui permet d'accéder à la liste des onglets, au thème choisi par l'utilisateur ainsi qu'à d'autres informations annexes automatiquement remplis par l'API (date de dernier accès, version du bureau, ...)

  • Thème : Desktop#getCss()
  • Liste des onglets : Desktop#getTabList()

C'est également depuis cette classe que l'on peut récupérer ou enregistrer le bureau virtuel d'un membre (ou de tout autre donnée telle que les Workspace pour gérer les bureaux par défaut).

  • Récupérer un bureau : Desktop.getDesktop(Data)
  • Enregistrer un bureau : Desktop#save(Data)

6.1.2 Tab et Column

Ces 2 objets permettent d'agencer les services dans le bureau virtuel.
L'objet Tab (onglet) contient la liste des colonnes et des informations supplémentaires comme le titre ou l'icône de l'onglet. L'objet Column contient la liste des services, la largeur de la colonne.

  • Titre de l'onglet : Tab#getTitle()
  • Icône de l'onglet (classes CSS): Tab#getIcon()
  • Manipulation des colonnes : Tab#getColumnList(), Tab#addColumn(Column), ...
  • Manipulation de services : Column#getServiceList(), Column#addService(Service), ...

6.1.3 Service

C'est l'objet qui stocke la personnalisation d'une Portlet et les informations du service.

  • La portlet utilisé par ce service : Service#getPortlet()
  • Le titre : Service#getTitle()
  • La couleur : Service#getColor()
  • Valeurs personnalisées des champs de la portlet : Service#getFieldValue(String), Service#setFieldValue(String,String)

6.1.4 DesktopUtil

Cet objet regroupe une série de méthodes statiques utilitaires pour travailler avec les objets du bureau virtuel.

  • Récupérer une nouvelle instance de bureau (avec un onglet vide, sans colonne ni service) : DesktopUtil.getNewEmptyDesktop(String)
  • Récupérer une nouvelle instance d'onglet (sans colonne ni service) : DesktopUtil.getNewEmptyTab(String)

6.2 DesktopPolicyFilter

6.2.1 Principe

Le développement d'une classe DesktopPolicyFilter permet de modifier le comportement nominal du bureau virtuel, notamment sur :

  • la gestion des bureaux par défaut proposés à l'utilisateur lors de sa première connexion
  • la gestion des droits d'accès aux bureaux (consultation et édition)

6.2.2 Développement

Implémentez l'interface com.jalios.jcmsplugin.virtualdesktop.DesktopPolicyFilter dans une classe de votre module,

Dans custom.prop (ou programmatiquement avant le chargement du plugin VirtualDesktop) ajoutez la propriété jcmsplugin.virtualdesktop.desktop-policy-filter-class pour référencer le nom de votre classe.

6.2.3 Exemple

Dans l'exemple suivant :

  • le(s) bureau(x) par défaut proposé(s) à l'utilisateur recoivent un onglet supplémentaire au nom de l'utilisateur,
  • les droits de consultation ne sont pas modifiés,
  • les droits d'édition sont restreints aux administrateurs techniques (par défaut les administrateurs fonctionnels peuvent également éditer les bureaux des membres).

Dans les propriétés (plugin.prop) :

jcmsplugin.virtualdesktop.desktop-policy-filter-class: com.company.jcmsplugin.myplugin.MyDesktopPolicyFilter

Dans le code Java :

package com.company.jcmsplugin.myplugin;

import java.util.List;
import com.jalios.jcms.Data;
import com.jalios.jcms.Member;
import com.jalios.jcms.context.JcmsContext;
import com.jalios.jcmsplugin.virtualdesktop.*;

public class MyDesktopPolicyFilter implements DesktopPolicyFilter {

// Default Desktop --------------------------------------------------------

public List<Desktop> getDefaultDesktopList(JcmsContext context, List<Desktop> desktopList) {
DesktopManager dskMgr = DesktopManager.getDesktopManager();
if (context == null || dskMgr == null) {
return desktopList;
}

// Add new empty tab at end with user friendlyname as the title
for (Desktop desktop : desktopList) {
Tab tab = new Tab();
tab.setTitle(context.getLoggedMember().getFriendlyName() + "'tab");
desktop.addTab(tab);
}


return desktopList;
}

// Read Rights ------------------------------------------------------------

public boolean canReadDesktop(Member mbr, Data dataOwner, boolean canRead) {
return canRead; // Do not change read right
}

// Edit Rights ------------------------------------------------------------

public boolean canEditDesktop(Member mbr, Data dataOwner, boolean canEdit) {

// Do not allow workspace administrator to edit other Member's Desktop
boolean isWorkspaceAdminOnly = (mbr != null && mbr.isWorkAdmin() && !mbr.isAdmin());
boolean isMemberDesktop = (dataOwner instanceof Member);
boolean isOwnDesktop = (dataOwner == mbr);
if (isWorkspaceAdminOnly && isMemberDesktop && !isOwnDesktop) {
return false;
}

return canEdit;
}

}

6.3 DesktopListener

6.3.1 Principe

Le développement d'un DesktopListener permet d'écouter les opérations effectuées sur les bureaux virtuels.
Par exemple, ceci peut s'avérer utile pour supprimer des données suite à la suppression d'un Service. On peut également imaginer le développement d'un DesktopListener pour des usages statistiques.

6.3.2 Développement

  1. Créez une classe dérivant de com.jalios.jcmsplugin.virtualdesktop.DesktopListener
  2. Déclarez cette classe via une propriété jcmsplugin.virtualdesktop.desktop-listener.{identifiant-unique}

6.3.3 Exemple

Dans l'exemple ci-dessous on affiche un message d'information dès qu'une opération a lieu sur un bureau (ses onglets et ses services).
On affiche un message spécial dans le cas de la création d'un nouveau bureau.

Dans les propriétés (plugin.prop) :

jcmsplugin.virtualdesktop.desktop-listener.myplugin: com.company.jcmsplugin.myplugin.MyDesktopListener

Dans le code Java :

package com.company.jcmsplugin.myplugin;

import org.apache.log4j.Logger;

import com.jalios.jcmsplugin.virtualdesktop.Desktop;
import com.jalios.jcmsplugin.virtualdesktop.DesktopListener;
import com.jalios.jcmsplugin.virtualdesktop.Service;
import com.jalios.jcmsplugin.virtualdesktop.Tab;

public class MyDesktopListener extends DesktopListener {

private static final Logger logger = Logger.getLogger(MyDesktopListener.class);

@Override
public void desktopChange(Desktop desktop, DesktopOperation op) {
switch (op) {
case CREATE:
logger.info("New desktop '" + desktop + "'created for " + desktop.getDataOwner());
break;
default:
logger.info(op + " performed on Desktop " + desktop);
break;
}
}

@Override
public void tabChange(Tab tab, TabOperation op) {
logger.info(op + " performed on Tab " + tab);
}

@Override
public void serviceChange(Service service, ServiceOperation op) {
logger.info(op + " performed on Service " + service);
}
}