<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//UR1//DTD docbookAllegeEsup//FR"
"http://www.esup-portail.org/consortium/espace/docbook/xxe/dtd/docbook_allege_esup.dtd">
<article lang="FR">
  <title>Canal stockage 4.1</title>

  <subtitle>Installation</subtitle>

  <section>
    <title>Pré-requis</title>

    <para>Dans la mise en place de la gestion des droits, le <ulink
    url="http://www.esup-portail.org/consortium/espace/Comm_2D/annuaire/fichierConfAnnu.html">Canal
    Annuaire</ulink> est utilisé pour sélectionner les utilisateurs. Il est
    donc nécessaire d'installer ce canal avant d'installer le Canal
    Stockage.</para>

    <para>Le canal permet l'accès à une base de données pour le partage de
    documents, il est nécessaire de déployer le <ulink
    url="http://www.esup-portail.org/consortium/espace/Socle_1A/esup-utils-mag">MAG</ulink>,
    car le Canal Stockage utilise le système d'accès à des bases de données de
    celui-ci.</para>

    <para>Une propriété du canal permet de passer en mode HTTPS lors de la
    saisie du mot de passe. Si vous utilisez cette option, vous devez vous
    assurer que votre version du portail possède la servlet <ulink
    url="http://www.esup-portail.org/consortium/espace/Socle_1A/utilitaires/httpsCalls.html">HTTPSGateway</ulink>
    utilisée. Elle est incluse dans les distributions esup-portail issues
    d'uportal 2.4 à partir de février 2005.</para>
  </section>

  <section>
    <title>Installation</title>

    <para>L'installation du Canal Stockage se repose sur les actions
    suivantes:</para>

    <itemizedlist>
      <listitem>
        <para>Recopie des libraires utilisées</para>
      </listitem>

      <listitem>
        <para>Configuration du Canal</para>
      </listitem>

      <listitem>
        <para>Déploiement du Canal</para>
      </listitem>
    </itemizedlist>

    <section>
      <title>Recopie des librairies utilisées</title>

      <para>Ce canal utilise les librairies :</para>

      <itemizedlist>
        <listitem>
          <para><filename>commons-httpclient.jar</filename> <remark>(pour ceux
          qui utilisent un accès DAV)</remark></para>
        </listitem>

        <listitem>
          <para><filename>jakarta-slide-webdavlib-2.4.1.jar</filename>
          <remark>(pour ceux qui utilisent un accès DAV)</remark></para>
        </listitem>

        <listitem>
          <para><filename>jdom-1.0.jar</filename> <remark>(pour ceux qui
          utilisent un accès DAV)</remark></para>
        </listitem>

        <listitem>
          <para><filename>esup-acl-manager-1.0.4.jar</filename> <remark>(pour
          ceux qui utilisent un accès DAV)</remark></para>
        </listitem>

        <listitem>
          <para><filename>jcifs-1.1.7.jar</filename> <remark>(pour ceux qui
          utilisent un accès CIFS)</remark></para>
        </listitem>

        <listitem>
          <para><filename>db-ojb-1.0.1.jar</filename></para>
        </listitem>
      </itemizedlist>

      <para>Ces librairies ne sont pas fournies par défaut avec le package
      uPortal esup. Il est donc nécessaire d'ajouter manuellement celles dont
      vous avez besoin, suivant l'utilisation du canal, à la librairie de
      votre portail. Celles-ci se trouve dans le répertoire
      <filename>lib</filename> du package CStockage.</para>

      <para>Pour l'accès à la base de données pour le partage de documents,
      nous verrons par la suite qu'il est possible d'utiliser un pool de
      connexions <acronym>JNDI</acronym> ou une connexion
      <acronym>JDBC</acronym> classique. Le répertoire
      <filename>lib</filename> du package CStockage contient donc 3 drivers
      <acronym>JDBC</acronym> nécessaires:</para>

      <itemizedlist>
        <listitem>
          <para><filename>mysql-connector-java-3.0.15-ga-bin.jar</filename>
          <remark>(MySQL)</remark></para>
        </listitem>

        <listitem>
          <para><filename>pg74.1jdbc3.jar</filename>
          <remark>(Postgresql)</remark></para>
        </listitem>

        <listitem>
          <para><filename>oracle_jdbc_classes12.jar</filename>
          <remark>(Oracle)</remark></para>
        </listitem>
      </itemizedlist>

      <para>Suivant le <acronym>SGBD</acronym> que vous utilisez, il vous faut
      recopier le bon driver dans la librairie de votre Tomcat.</para>
    </section>

    <section>
      <title>Configuration du canal</title>

      <section>
        <title>Configuration générale du canal</title>

        <para>La configuration générale du Canal Stockage se fait via le
        fichier <filename>properties/CStockage.xml</filename></para>

        <section>
          <title>Structure générale</title>

          <para>La structure générale du fichier de configuration du canal est
          la suivante:</para>

          <programlisting><emphasis>&lt;CHANNEL_CONFIGURATION&gt;			&lt;!-- Racine du fichier de configuration --&gt;
	
	&lt;SERVER_ACCESS_CLASS&gt;		&lt;!-- Définition des classes permettant l'accès à différents types de serveurs --&gt;
		&lt;ACCESS/&gt;				
	&lt;/SERVER_ACCESS_CLASS&gt;	
		
	&lt;CHANNEL_ACTION_CLASS&gt;		&lt;!-- Les actions possibles du Canal liées à chaque espace --&gt;
		&lt;ACTION/&gt;				
	&lt;/CHANNEL_ACTION_CLASS&gt;		
	
	&lt;SPACE_ATTRIBUTES_CHECKED&gt;	&lt;!-- Liste des attributs de la balise SPACE dont on vérifie si la valeur est de la forme {...} --&gt;
		&lt;ATTRIBUTE/&gt;		
	&lt;/SPACE_ATTRIBUTES_CHECKED&gt;</emphasis>

<emphasis role="bold">	&lt;SPACES&gt;			&lt;!-- Les espaces accessibles via le Canal --&gt;
		&lt;SERVER&gt;			
			&lt;SPACE/&gt;			
		&lt;/SERVER&gt;			
	&lt;/SPACES&gt;
		
	&lt;LDAP_ACCESS/&gt;			&lt;!-- Paramètres d'accès au LDAP --&gt;
	
	&lt;DATABASE_ACCESS/&gt;		&lt;!-- Paramètres d'accès à la base de données --&gt;
	
	&lt;DIRECTORIES/&gt;		&lt;!-- Liste des annuaires accessibles dans le canal annuaire --&gt;
	
	&lt;AUTHENTICATION/&gt;		&lt;!-- Paramètres liés à l'authentification --&gt;
		
	&lt;DEFAULT_OPTIONS_INTERFACE/&gt; 	&lt;!-- Paramètres divers de suppression --&gt;
				
	&lt;INVISIBLE_FILES&gt;		&lt;!-- Définition des fichiers invisibles dans le Canal --&gt;
		&lt;REG_EXP/&gt;
	&lt;/INVISIBLE_FILES&gt;</emphasis>
	
	<emphasis>&lt;ALLOWED_DOCUMENTS/&gt; 		&lt;!-- Format que les documents doivent respecter --&gt;
	
&lt;/CHANNEL_CONFIGURATION&gt;</emphasis> </programlisting>

          <para>Nous pouvons voir apparaître en italique les balises destinées
          aux développeurs du canal et qui ne doivent en aucun cas être
          modifiées. Les autres balises sont les options de configuration qui
          doivent être éditées par l'administrateur du portail.</para>

          <para>Voyons en détail ces différentes parties:</para>
        </section>

        <section>
          <title>Définition des espaces &lt;SPACES&gt;</title>

          <para>Chaque espace de stockage accessible dans le Canal Stockage se
          configure au sein de la balise
          <varname>&lt;SPACES&gt;</varname></para>

          <variablelist>
            <varlistentry>
              <term>personalization</term>

              <listitem>
                <para>Cet attribut permet de dire si on utilise la fonction de
                personnalisation des espaces dans le Canal. Nous verrons que,
                dans un espace classique, nous pouvons utiliser la fonction de
                partage de dossiers. Cet attribut permet alors de dire si on
                utilisera ce mode dans le canal. Pour l'utiliser, la valeur
                doit être à <varname>true</varname>, sinon à
                <varname>false</varname>. Si la valeur est
                <varname>true</varname>, il faut absolument avoir configuré
                l'accès à la base de données via la balise
                <varname>&lt;DATABASE_ACCESS&gt;</varname>.</para>

                <para>Pour chaque espace à définir, il faut tout d'abord
                définir une balise <varname>&lt;SERVER&gt;</varname>. Ensuite,
                au sein d'un serveur, on peut définir plusieurs balises
                <varname>&lt;SPACE&gt;</varname>. Voyons sa structure
                :<programlisting>&lt;SPACES personalization="true"&gt;
	&lt;SERVER
		url="http://URL:PORT/CONTEXT/"	
		
		serverType="webdav | cifs"
		
		authenticationMode="trusted | asked"
		login="admin"
		password="trusted"
		
		manageAcl="true | false"
		aclNamespace="DAV:"
		aclUserPrefix="/slide/users/"
		aclGroupPrefix="/slide/roles/"
		aclUportalGroup="uPortal"
		
		cifsDomain=""
		cifsResolveOrder="DNS,BCAST"
		cifsDisablePlainTextPassword="false"
	
		&gt;
		&lt;SPACE
			label="Espace à définir"
			
			path="chemin/vers/le/répertoire"
			pathRegexp="^(/slide/files)/.*:^(.).*:^/slide/files/(.).*:^(.).*:^/slide/files/(..).*:^(.).*:^/slide/files/(.*)"
			pathRegexpSeparator=":"
			
			actionType="classic | injac"
		
			sharing="true | false"
			
			&gt;
				&lt;ALLOWED 
					attribute="attribut_uportal" 
					value="valeur_de_l_attribut"
				/&gt;
		&lt;/SPACE&gt;	
	&lt;/SERVER&gt;
&lt;/SPACES&gt;</programlisting></para>
              </listitem>
            </varlistentry>
          </variablelist>

          <section>
            <title>Balise &lt;SERVER&gt;</title>

            <para>Il est possible de définir plusieurs balises
            <varname>&lt;SERVER&gt;</varname>. Pour chacune de ces balises, il
            faut définir au minimum une balise
            <varname>&lt;SPACE&gt;</varname>.</para>

            <para>La balise <varname>&lt;SERVER&gt;</varname> correspond aux
            paramètres généraux du serveur comme l'<varname>url</varname>, le
            <varname>login</varname> et le <varname>password</varname> de
            connexion, etc. Les balises <varname>&lt;SPACE&gt;</varname>
            correspondent quant à elles aux différents espaces accessibles sur
            ce serveur.</para>

            <para>Les paramètres de connexion étant défini au niveau du
            serveur et non de l'espace, pour chaque espace défini, le mode de
            connexion ainsi que les paramètres seront les mêmes. Par exemple,
            si on défini un serveur accessible avec une saisie de mot de
            passe, et qu'il existe plusieurs espaces, le login et le mot de
            passe seront identiques pour tous les espaces et l'utilisateur
            n'aura pas besoin de saisir plusieurs fois ses paramètres.</para>

            <variablelist>
              <varlistentry>
                <term>url</term>

                <listitem>
                  <para>URL d'accès au serveur. Par exemple:
                  <varname>http://localhost:8080/slide/</varname> dans le cas
                  d'un serveur <acronym>DAV</acronym>. Pour l'utilisation en
                  mode <acronym>CIFS</acronym>, sur un serveur Samba par
                  exemple, le type d'URL est de la forme
                  <varname>smb://votre_serveur</varname> ou
                  <varname>smb://192.192.192.192</varname>.</para>

                  <para>Dans les versions précédentes du canal, lors de
                  l'utilisation d'un serveur avec contexte, comme le serveur
                  Slide par exemple, il était possible de définir ce contexte
                  dans l'<varname>url</varname> ou dans le
                  <varname>path</varname>. Nous pouvions avoir les 2 syntaxes
                  qui suivent:<itemizedlist>
                      <listitem>
                        <para><userinput>url="http://localhost:8080/slide"</userinput>
                        et <userinput>path="/files/"</userinput></para>
                      </listitem>

                      <listitem>
                        <para><userinput>url="http://localhost:8080"</userinput>
                        et <userinput>path="/slide/files"</userinput></para>
                      </listitem>
                    </itemizedlist></para>

                  <para>Dorénavant, le contexte devra absolument être défini
                  dans le <varname>path</varname>. En reprenant l'exemple
                  précédent, la syntaxe doit donc être:<itemizedlist>
                      <listitem>
                        <para><userinput>url="http://localhost:8080"</userinput>
                        et <userinput>path="/slide/files"</userinput></para>
                      </listitem>
                    </itemizedlist></para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>serverType</term>

                <listitem>
                  <para>Cette version du canal peut prendre en compte d'autres
                  systèmes de stockage que <acronym>DAV</acronym>, comme par
                  exemple <acronym>CIFS</acronym>. Pour cela, il faut
                  renseigner l'attribut <varname>serverType</varname> avec la
                  valeur définie dans les balises
                  <varname>&lt;SERVER_ACCESS_CLASS&gt;</varname>. Dans cette
                  version, les valeurs possibles sont:<itemizedlist>
                      <listitem>
                        <para><varname>webdav</varname></para>
                      </listitem>

                      <listitem>
                        <para><varname>cifs</varname></para>
                      </listitem>
                    </itemizedlist></para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>authenticationMode</term>

                <listitem>
                  <para>Dans cette version du Canal, il existe deux modes
                  d'authentification:<itemizedlist>
                      <listitem>
                        <para><varname>trusted</varname></para>
                      </listitem>

                      <listitem>
                        <para><varname>asked</varname></para>
                      </listitem>
                    </itemizedlist></para>

                  <para><varname>trusted</varname> est un mode
                  d'authentification via un mot de passe partagé par tous les
                  utilisateurs et renseigné dans le fichier de configuration.
                  Pour ce mode, il est <emphasis
                  role="bold">OBLIGATOIRE</emphasis> de renseigner l'attribut
                  <varname>password</varname>. L'attribut
                  <varname>login</varname> permet de forcer le cas échéant le
                  login utilisé pour la connexion au serveur.</para>

                  <para>Le mode <varname>asked</varname> permet de demander
                  les paramètres d'authentification de l'utilisateur à chaque
                  connection au portail. Si ce mode est choisi pour un espace,
                  l'utilisateur devra saisir manuellement le mot de passe pour
                  y accéder. Il est cependant possible de forcer le login
                  défaut via l'attribut <varname>login</varname>. Si une
                  valeur est donnée à cet attribut, l'utilisateur ne pourra
                  pas modifier le champ "login" du formulaire. Si l'attribut
                  <varname>login</varname> du fichier de configuration n'est
                  pas saisi, le champ "login" du formulaire de saisie aura
                  comme valeur son login de connexion au portail, sachant
                  qu'il aura alors la possibilité de le modifier.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>login</term>

                <listitem>
                  <para>Il est possible en mode d'authentification
                  <varname>trusted</varname> de forcer le login de connexion
                  au serveur de fichiers. Si l'attribut
                  <varname>login</varname> est renseigné, ce login sera
                  utilisé pour toutes les connexions quelquesoit l'utilisateur
                  qui se connecte au portail.</para>

                  <para>S'il n'est pas renseigné, le login utilisé sera celui
                  de la connexion au portail.</para>

                  <para>Tout comme pour l'attribut <varname>path</varname>,
                  l'attribut <varname>login</varname> peut être basé sur un
                  attribut uPortal autre que celui défini dans la balise
                  <varname>AUTHENTICATION/usernameAttribute</varname>. Pour
                  cela, il suffit de mettre entre accolades le nom de
                  l'attribut uPortal. Par exemple,
                  <varname>login="{mail}"</varname> si pour un espace en
                  particulier le login de connexion est l'adresse mail de
                  l'utilisateur.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>password</term>

                <listitem>
                  <para>En mode <varname>trusted</varname>, c'est le mot de
                  passe utilisé par tous les utilisateurs qui accèdent à cet
                  espace.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>manageAcl</term>

                <listitem>
                  <para>Cet attribut est utilisé pour préciser si l'espace
                  sait gérer ou pas les <acronym>ACL</acronym>, et si elle
                  sait les gérer, ça nous permettra de dire si on veut
                  utiliser cette gestion ou pas. <varname>true</varname> veut
                  dire que l'espace gère les <acronym>ACL</acronym> et que
                  l'on souhaite utiliser cette gestion.
                  <varname>false</varname> est utilisé pour dire que l'espace
                  ne gère pas les <acronym>ACL</acronym> et/ou que l'on ne
                  souhaite pas en profiter.</para>

                  <para>Cet attribut est utile lorsque l'on partage des
                  dossiers dans un espace <varname>classic</varname> ou
                  lorsqu'on utilise le mode <varname>injac</varname>. Dans ce
                  dernier mode, sa valeur devra toujours être à
                  <varname>true</varname>. Lorsque l'on est dans le mode
                  classique, si on utilise un serveur Slide, la valeur devra
                  être à <varname>true</varname> pour le partage de document,
                  afin de pouvoir placer les droits nécessaires.</para>

                  <para>Pour le cas de l'utilisation d'un serveur
                  <acronym>CIFS</acronym>, étant donné que celui-ci ne gère
                  pas dynamiquement les droits d'accès, le mode de partage
                  fonctionne quelque peu différement. En effet, en mettant
                  <varname>manageAcl="false"</varname>, il est tout de même
                  possible de partager des espaces avec d'autres utilisateurs:
                  les informations de partages sont recopiées dans la base de
                  données, mais le canal est incapable d'ajouter des droits
                  d'accès aux personnes visées. Les droits devront alors
                  <emphasis role="bold">OBLIGATOIREMENT</emphasis> être fixées
                  en dehors du canal, par l'administrateur du serveur
                  <acronym>CIFS</acronym>. Ce type d'utilisation ne peut donc
                  pas être utilisé en production pour tous les utilisateurs
                  sur un serveur <acronym>CIFS</acronym>. Mais son utilisation
                  devient intéressante pour l'administrateur du canal qui
                  voudrait donner accès à certains utilisateurs, ou groupes
                  d'utilisateurs, à un ou plusieurs espaces. L'ajout dans le
                  canal se faisant via l'interface de partage, et l'ajout des
                  droits se faisant en dehors du canal.</para>

                  <para><important>
                      <para><userinput>manageAcl="true"</userinput> ne peut
                      être utilisé, pour le moment, que pour un serveur Slide.
                      Dans ce cas, il est <emphasis
                      role="bold">IMPERATIF</emphasis> de fixer des valeurs
                      pour les attributs:<itemizedlist>
                          <listitem>
                            <para><varname>aclNamespace</varname></para>
                          </listitem>

                          <listitem>
                            <para><varname>aclUserPrefix</varname></para>
                          </listitem>

                          <listitem>
                            <para><varname>aclGroupPrefix</varname></para>
                          </listitem>

                          <listitem>
                            <para><varname>aclUportalGroup</varname></para>
                          </listitem>
                        </itemizedlist></para>
                    </important></para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>aclNamespace</term>

                <listitem>
                  <para>Pour chaque espace, il est possible de dire si le
                  serveur supporte les <acronym>ACL</acronym>, c'est-à-dire
                  les droits donnés aux utilisateurs et groupes d'utilisateurs
                  sur les ressources au sein du serveur. Par exemple, un
                  serveur <emphasis role="bold">mod_dav</emphasis> ne supporte
                  pas cette possibilité, tandis qu'un serveur <emphasis
                  role="bold">slide</emphasis> l'implémente. Dans cette
                  version, il est possible de gérer les partages de documents
                  et droits associés au sein d'un espace de type
                  <varname>classic</varname>. Dans le cas où l'on souhaite
                  profiter de cette fonctionnalité, les attributs
                  <varname>aclNamespace</varname>,
                  <varname>aclUserPrefix</varname>,
                  <varname>aclGroupPrefix</varname> et
                  <varname>aclUportalGroup</varname> devront <emphasis
                  role="bold">OBLIGATOIREMENT</emphasis> être
                  renseignés.</para>

                  <para>Par exemple, pour un serveur Slide,
                  <userinput>aclNamespace="DAV:"</userinput>. Notons que dans
                  le cas d'un espace de type injac, il est obligatoire de
                  prendre un serveur qui supporte les <acronym>ACL</acronym>,
                  et de définir ces attributs en fichier de
                  configuration.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>aclUserPrefix</term>

                <listitem>
                  <para>Lors de l'utilisation des <acronym>ACL</acronym> dans
                  un espace donné, il est nécessaire de donner le préfixe
                  utilisé pour la gestion des utilisateurs sur le serveur.
                  Pour être plus clair, ce préfixe est nécessaire dans le
                  chemin d'accès au serveur pour que celui-ci sache où placer
                  le droit. Dans le cas d'un serveur slide, ce préfixe vaut
                  par défaut <varname>/slide/users/</varname>. Attention,
                  cette valeur pouvant être modifiée lors de l'installation de
                  slide, vérifier auprès de la configuration du serveur
                  avant.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>aclGroupPrefix</term>

                <listitem>
                  <para>Comme pour les utilisateurs, nous donnons ici le
                  préfixe de gestion des groupes pour les
                  <acronym>ACL</acronym> au sein du serveur. Dans le cas de
                  slide, le préfixe vaut
                  <varname>/slide/roles/</varname>.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>aclUportalGroup</term>

                <listitem>
                  <para>Lorsque l'on écrit un droit sur le serveur Slide, on
                  le met dans la branche correspondant aux groupes uPortal. Il
                  faut donc renseigner ici le noeud dans l'arborescence. Par
                  défaut, cet attribut vaut <varname>uPortal</varname>.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>cifsDomain</term>

                <listitem>
                  <para>Ceci n'est utilisé que lorsque
                  <userinput>serverType="cifs"</userinput>. Cet attribut
                  correspond au domaine du serveur
                  <acronym>CIFS</acronym>.</para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>cifsResolveOrder</term>

                <listitem>
                  <para>Une liste <remark>(chaines de caractères séparées par
                  des virgules)</remark> de noms de méthodes de résolution de
                  noms spécifiant quelles méthodes doivent être utilisées et
                  dans quel ordre pour résoudre les noms d'hôtes. Les noms de
                  méthodes possibles sont <varname>LMHOSTS</varname>,
                  <varname>WINS</varname>, <varname>BCAST</varname> et
                  <varname>DNS</varname>. Exemple:<itemizedlist>
                      <listitem>
                        <para><userinput>cifsResolveOrder="DNS,BCAST"</userinput></para>
                      </listitem>
                    </itemizedlist></para>
                </listitem>
              </varlistentry>

              <varlistentry>
                <term>cifsDisablePlainTextPassword</term>

                <listitem>
                  <para>Désactivée par défaut. Pour permettre à la
                  bibliothèque d'accès <acronym>CIFS</acronym> d'utiliser des
                  mots de passe en clair, cette propriété doit être
                  initialisée à:<itemizedlist>
                      <listitem>
                        <para><userinput>cifsDisablePlainTextPassword="false"</userinput></para>
                      </listitem>
                    </itemizedlist></para>
                </listitem>
              </varlistentry>
            </variablelist>

            <section>
              <title>Balise &lt;SPACE&gt;</title>

              <variablelist>
                <varlistentry>
                  <term>label</term>

                  <listitem>
                    <para>Intitulé de l'espace qui sera affiché à
                    l'utilisateur dans sa liste déroulante de choix</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>path</term>

                  <listitem>
                    <para>Chemin d'accès au répertoire visé dans cet espace.
                    Un exemple de chemin peut être
                    <varname>"/files/mon_espace/"</varname>.</para>

                    <para>La gestion des espaces peut se faire à travers des
                    attributs uPortal mis entre accolades. Mis entre
                    accolades, l'attribut est remplacé automatiquement par sa
                    valeur.</para>

                    <para>Par exemple, nous pouvons utiliser l'attribut
                    <varname>username</varname> correspondant au login de la
                    personne afin de définir un espace de travail personnel.
                    Le <varname>path</varname> de cet espace personnel serait
                    alors <varname>"/{username}"</varname>. Il est également
                    possible de cette manière d'accéder à des espaces de
                    travail partagés par tous les étudiants d'une même
                    promotion, il suffit pour cela d'utiliser l'attribut
                    stockant le code étape de l'étudiant.</para>

                    <para>Pour un accès absolu à un répertoire, dans le cas
                    d'un serveur slide par exemple, le <varname>path</varname>
                    est de la forme:
                    <userinput>path="/files/y/yc/ycolmant"</userinput> ou
                    <userinput>path="/files/t/tn/ycolmant"</userinput> suivant
                    le hachage qui a été défini sur le serveur au moment de la
                    création des "home dir".</para>

                    <para>Lors de l'utilisation du mode d'authentification
                    <varname>asked</varname>, il est possible de changer le
                    <varname>path</varname> en fonction du login saisi par
                    l'utilisateur. En effet, dans ce mode, on peut laisser le
                    choix à l'utilisateur de saisir un login en plus du mot de
                    passe requis. Dans ce cas, en utilisant la chaine
                    <varname>"{storageFormLogin}"</varname> dans le
                    <varname>path</varname>, ce qui est entre accolade sera
                    automatiquement replacé par le login saisi par
                    l'utilisateur. Ceci peut être utile dans le cas d'un accès
                    <acronym>CIFS</acronym> où le chemin d'accès sur le
                    serveur <acronym>CIFS</acronym> est différent du login
                    uPortal. Dans ce cas, on pourra mettre, par exemple,
                    <userinput>path="/home/{storageFormLogin}"</userinput>
                    dans le fichier de config, et si l'utilisateur saisi le
                    login <varname>yohan</varname> dans le formulaire de
                    connexion, le <varname>path</varname> sera automatiquement
                    transformé en <varname>"/home/yohan"</varname>.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>pathRegexp</term>

                  <listitem>
                    <para>Il est possible d'utiliser une expression régulière
                    pour la transformation du <varname>path</varname>. Par
                    exemple, si nous voulons reproduire un système de hachage
                    depuis le canal.</para>

                    <para>Prenons l'exemple d'un serveur Slide où les espaces
                    personnels des utilisateurs sont accessibles à
                    <varname>"/slide/files/y/yc/ycolmant"</varname>. Dans le
                    canal, nous ne connaissons que
                    <varname>"/slide/files"</varname> et
                    <varname>"ycolmant"</varname>, et pour ne pas implémenter
                    "en dur" la logique de redirection, ceci peut être fait
                    par une expression régulière. Voyons la logique pour
                    l'exemple donné.</para>

                    <para>Puisque nous ne connaissons que
                    <varname>"/slide/files"</varname> et
                    <varname>"ycolmant"</varname>, fixons le
                    <varname>path</varname> à
                    <varname>"/slide/files/ycolmant"</varname>. Le traitement
                    de ce chemin va être fait en 7 étapes par 7 expressions
                    régulières différentes, chacune appliquée sur le
                    <varname>path</varname>. Chaque traitement se fait
                    indépendement des autres, et chaque nouveau résultat est
                    concaténé au résultat précédent.<itemizedlist>
                        <listitem>
                          <para>Expression 1:
                          <userinput>"^(/slide/files)/.*"</userinput> Le
                          traitement de cette expressions nous donne le
                          résultat
                          <userinput>"/slide/files"</userinput></para>
                        </listitem>

                        <listitem>
                          <para>Expression 2: <userinput>"^(.).*"</userinput>
                          Le traitement de cette expressions nous donne le
                          résultat <userinput>"/"</userinput></para>
                        </listitem>

                        <listitem>
                          <para>Expression 3:
                          <userinput>"^/slide/files/(.).*"</userinput> Le
                          traitement de cette expressions nous donne le
                          résultat <userinput>"y"</userinput></para>
                        </listitem>

                        <listitem>
                          <para>Expression 4: <userinput>"^(.).*"</userinput>
                          Le traitement de cette expressions nous donne le
                          résultat <userinput>"/"</userinput></para>
                        </listitem>

                        <listitem>
                          <para>Expression 5:
                          <userinput>"^/slide/files/(..).*"</userinput> Le
                          traitement de cette expressions nous donne le
                          résultat <userinput>"yc"</userinput></para>
                        </listitem>

                        <listitem>
                          <para>Expression 6: <userinput>"^(.).*"</userinput>
                          Le traitement de cette expressions nous donne le
                          résultat <userinput>"/"</userinput></para>
                        </listitem>

                        <listitem>
                          <para>Expression 7:
                          <userinput>"^/slide/files/(.*)"</userinput> Le
                          traitement de cette expressions nous donne le
                          résultat <userinput>"ycolmant"</userinput></para>
                        </listitem>
                      </itemizedlist></para>

                    <para>La concaténation de tous ces résultats nous donne
                    bien ce que l'on attendait:
                    <varname>"/slide/files/y/yc/ycolmant"</varname>.</para>

                    <para>Toutes ces expressions régulières peuvent être
                    assemblées en utilisant un caractère de séparation,
                    prenons pour notre exemple le
                    <userinput>":"</userinput>.</para>

                    <para>Pour reproduire la description précédente, il suffit
                    alors de donner à l'attribut <varname>pathRegexp</varname>
                    comme valeur la concaténation de toutes les expressions
                    régulières séparées par un caractère choisi. Ce caractère
                    étant précisé par l'attribut
                    <varname>pathRegexpSeparator</varname>: </para>

                    <para><userinput>pathRegexp="^(/slide/files)/.*:^(.).*:^/slide/files/(.).*:^(.).*:^/slide/files/(..).*:^(.).*:^/slide/files/(.*)"</userinput></para>

                    <para>Pour que tous les utilisateurs puissent être
                    associés à cette expression régulière, il ne faut donc pas
                    mettre <varname>"/slide/files/ycolmant"</varname>, mais
                    <varname>"/slide/files/{username}"</varname> dans le champ
                    <varname>path</varname>. Ainsi, cette transformation sera
                    effectuée pour la valeur de <varname>username</varname> de
                    chaque utilisateur.</para>

                    <para>Pour le hachage inversé
                    (<varname>/slide/files/t/tn/ycolmant</varname>), le champ
                    <varname>pathRegexp</varname> doit être formé comme suit:
                    </para>

                    <para><userinput>pathRegexp="^(/slide/files)/.*:^(.).*:^/slide/files/.*(.):^(.).*:^/slide/files/.*(.):^/slide/files/.*(.).:^(.).*:^/slide/files/(.*)"</userinput></para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>pathRegexpSeparator</term>

                  <listitem>
                    <para>Comme expliqué dans la description de l'attribut
                    <varname>pathRegexp</varname>,
                    <varname>pathRegexpSeparator</varname> est utilisé pour
                    séparer chaque expression régulière.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>actionType</term>

                  <listitem>
                    <para>Le canal a été enrichi avec différents modes
                    d'utilisation. Il existe le mode par défaut qui est le
                    mode <varname>classic</varname>, mais aussi le mode
                    <varname>injac</varname>. Le mode <varname>injac</varname>
                    positionné sur un espace permet l'apparition des actions
                    particulières liées à la publication de documents dans le
                    <acronym>CMS</acronym> inJAC. Le mode
                    <varname>classic</varname> ne demande aucune configuration
                    particulière supplémentaire dans le canal, en revanche, si
                    le mode <varname>injac</varname> est choisi pour un
                    espace, nous verrons dans la suite du document les
                    configurations particulières à faire en plus.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>sharing</term>

                  <listitem>
                    <para>Comme nous l'avons vu pour l'attribut
                    <varname>personalization</varname>, il est possible de
                    permettre à des utilisateurs de partager des dossiers à
                    d'autres usagers ou groupes d'usagers (uniquement si
                    <varname>actionType="classic"</varname>). Ceci ne peut se
                    faire, pour le moment, que pour des accès à des espaces de
                    type <acronym>WEBDAV</acronym>. Pour utiliser le partage
                    dans un espace, il faut dont mettre
                    <varname>sharing="true"</varname>.</para>

                    <para>L'utilisation du partage nécessite tout de même la
                    saisie des balises et attributs suivants:<itemizedlist>
                        <listitem>
                          <para><varname>aclNamespace</varname></para>
                        </listitem>

                        <listitem>
                          <para><varname>aclUserPrefix</varname></para>
                        </listitem>

                        <listitem>
                          <para><varname>aclGroupPrefix</varname></para>
                        </listitem>

                        <listitem>
                          <para><varname>aclUportalGroup</varname></para>
                        </listitem>

                        <listitem>
                          <para><varname>&lt;DATABASE_ACCESS&gt;</varname></para>
                        </listitem>
                      </itemizedlist></para>
                  </listitem>
                </varlistentry>
              </variablelist>

              <section>
                <title>Balise &lt;ALLOWED&gt;</title>

                <para>L'accès au Canal se définissant de façon globale dans le
                gestionnaire de canaux d'uPortal, il est possible d'affiner
                ceci en fixant des contraintes pour chaque espace. Pour cela,
                il faut définir la balse <varname>&lt;ALLOWED&gt;</varname>.
                Cette balise comporte les attributs
                <varname>attribute</varname> et <varname>value</varname>. Si
                la personne qui se connecte a, dans ses attributs uPortal,
                l'attribut cité avec la valeur donnée, elle verra cet espace,
                sinon, il lui sera masqué.</para>

                <para>Toutes les balises doivent être considérées entre elle
                avec l'opérateur "<emphasis role="bold">OU</emphasis>". En
                effet, l'accès sera donné à une personne si une des
                contraintes est respectée.</para>

                <variablelist>
                  <varlistentry>
                    <term>attribute</term>

                    <listitem>
                      <para>Le nom de l'attribut que l'utilisateur doit
                      avoir.</para>
                    </listitem>
                  </varlistentry>

                  <varlistentry>
                    <term>value</term>

                    <listitem>
                      <para>Ceci représente la valeur que doit avoir
                      l'attribut <varname>attribute</varname> de l'utilisateur
                      pour que celui-ci puisse voir l'espace.</para>
                    </listitem>
                  </varlistentry>
                </variablelist>
              </section>
            </section>
          </section>

          <section>
            <title>Exemple de configuration pour un espace WEBDAV</title>

            <programlisting>&lt;SERVER
	url="http://mon_serveur:8080/"
 	
	serverType="webdav"
	
	authenticationMode="trusted"
	password="trusted"
	
	manageAcl="true"
	aclNamespace="DAV:"
	aclUserPrefix="/slide/users/"
	aclGroupPrefix="/slide/roles/"
	aclUportalGroup="uPortal"
/&gt;
	&lt;SPACE
		label="Mes documents WEBDAV"
		
		path="/slide/files/{username}"
		pathRegexp="^(/slide/files)/.*:^(.).*:^/slide/files/(.).*:^(.).*:^/slide/files/(..).*:^(.).*:^/slide/files/(.*)"
		pathRegexpSeparator=":"
	
		actionType="classic"
	
		sharing="true"
	/&gt;
&lt;/SERVER&gt;</programlisting>
          </section>

          <section>
            <title>Exemple de configuration pour un espace CIFS</title>

            <programlisting>&lt;SERVER
	url="smb://192.192.192.192"
 	
	serverType="cifs"
	
	authenticationMode="asked"
	
	cifsDomain="univ.fr"
	cifsResolveOrder="DNS,BCAST"
	cifsDisablePlainTextPassword="false"
/&gt;
	&lt;SPACE
		label="Mes documents CIFS"
		
		path="/{storageFormLogin}"
		
		actionType="classic"
	/&gt;
&lt;/SERVER&gt;</programlisting>
          </section>
        </section>

        <section>
          <title>Accès au LDAP</title>

          <para>Lors de l'accès aux <acronym>ACL</acronym> via le canal, il
          est possible de visualiser celles qui ont déja été placées
          précédemment. Le mode de gestion des <acronym>ACL</acronym> fait que
          nous ne pouvons récupérer que l'identifiant de la personne ou le
          groupe visé par cette <acronym>ACL</acronym>. Pour avoir une
          meilleur visibilité, il est donc nécessaire de définir les
          paramètres d'accès au serveur <acronym>LDAP</acronym> pour récupérer
          le véritable nom de l'utilisateur.</para>

          <para>La structure de cette balise est la suivante:</para>

          <programlisting>&lt;LDAP_ACCESS 
	serverUrl="ldap://ldap.univ.fr:389"		
	people="ou=people,dc=univ,dc=fr"
	userKeyAttribute="uid"
	userDisplayNameAttribute="displayName"
/&gt;</programlisting>

          <variablelist>
            <varlistentry>
              <term>serverUrl</term>

              <listitem>
                <para>L'url du serveur <acronym>LDAP</acronym>. Typiquement
                cet attribut est de la forme
                <varname>ldap://ldap.univ.fr:389</varname>.</para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>people</term>

              <listitem>
                <para>Ceci représente le <varname>dn</varname> de la branche
                people du <acronym>LDAP</acronym>.</para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>userKeyAttribute</term>

              <listitem>
                <para>Attribut <acronym>LDAP</acronym> contenant le login de
                la personne connectée.</para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>userDisplayNameAttribute</term>

              <listitem>
                <para>Attribut <acronym>LDAP</acronym> contenant le nom
                complet de la personne connectée à afficher.</para>

                <para><emphasis role="bold">ATTENTION</emphasis>: le nom de
                cet attribut doit <emphasis
                role="bold">OBLIGATOIREMENT</emphasis> être défini dans le
                canal annuaire afin que la valeur de celui-ci puisse être
                passée entre les deux canaux.</para>
              </listitem>
            </varlistentry>
          </variablelist>
        </section>

        <section>
          <title>Accès à la base de donées</title>

          <para>Nous avons vu qu'il est possible d'utiliser le partage de
          documents dans un espace <varname>classic</varname>. Pour cela, les
          informations de partage sont stockées dans une base de
          données.</para>

          <formalpara>
            <title>Création de la base</title>

            <para>La première étape consiste à créer une base de données. Il
            existe 3 fichiers de création des tables dans le dossier db du
            package:<itemizedlist>
                <listitem>
                  <para><filename>MySQL.sql</filename></para>
                </listitem>

                <listitem>
                  <para><filename>Postgres.sql</filename></para>
                </listitem>

                <listitem>
                  <para><filename>Oracle.sql</filename></para>
                </listitem>
              </itemizedlist>Utilisez celui qui concerne le
            <acronym>SGBD</acronym> que vous utilisez. Il existe également un
            fichier <filename>drop_tables.sql</filename> permettant de
            supprimer les tables.</para>
          </formalpara>

          <formalpara>
            <title>Définition du pool de connexions JNDI</title>

            <para>Il existe 2 possibilités de connexions à la base de données
            depuis le canal:<itemizedlist>
                <listitem>
                  <para>connexion <acronym>JDBC</acronym> classique</para>
                </listitem>

                <listitem>
                  <para>utilisation d'un pool de connexions
                  <acronym>JNDI</acronym></para>
                </listitem>
              </itemizedlist>Pour l'utilisation du pool, il faut précédemment
            le définir dans le fichier <filename>server.xml</filename> de
            votre Tomcat. Il faut définir les balises
            <varname>&lt;Resource&gt;</varname> et
            <varname>&lt;ResourceParams&gt;</varname> dans le contexte
            <varname>uPortal</varname>. Voyez un exemple de définition du pool
            <varname>CStockageDb</varname> dans le fichier <ulink
            url="exemple_server.xml">exemple_server.xml</ulink>.Pour finir, il
            faut s'assurer que le driver correspondant à votre
            <acronym>SGBD</acronym> est bien dans la librairie de
            Tomcat.</para>
          </formalpara>

          <formalpara>
            <title>Définition dans le canal</title>

            <para>La structure de la balise de configuration de l'accès à la
            base de données est la suivante:<programlisting>&lt;DATABASE_ACCESS 
	type="JNDI | JDBC"
	url="jdbc:mysql://localhost:3306/CStockage"
	driverClassName="com.mysql.jdbc.Driver"
	username="login"
	password="password"
/&gt;</programlisting><variablelist>
                <varlistentry>
                  <term>type</term>

                  <listitem>
                    <para>Le type de connexion que l'on veut pour l'accès à la
                    base de données. La valeur est <varname>JNDI</varname>
                    pour l'utilisation d'un pool de connexion, ou
                    <varname>JDBC</varname> pour un accès classique.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>url</term>

                  <listitem>
                    <para>Dans le cas d'un <varname>type="JNDI"</varname>,
                    <varname>url</varname> représente le nom du pool. Dans
                    l'exemple fournir, <varname>url="CStockageDb"</varname>.
                    Pour <varname>type="JDBC"</varname>, il faut donner l'URL
                    d'accès à la base de données. Exemples:<itemizedlist>
                        <listitem>
                          <para><varname>jdbc:mysql://localhost:3306/cstockage</varname>
                          <remark>(MySQL)</remark></para>
                        </listitem>

                        <listitem>
                          <para><varname>jdbc:postgresql://localhost:5432/cstockage</varname>
                          <remark>(Postgresql)</remark></para>
                        </listitem>

                        <listitem>
                          <para><varname>jdbc:oracle:thin:@enee:1521:ISTV</varname>
                          <remark>(Oracle)</remark></para>
                        </listitem>
                      </itemizedlist></para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>driverClassName</term>

                  <listitem>
                    <para>Utilisé uniquement si
                    <varname>type="JDBC"</varname>. Ceci représente le nom du
                    driver à utiliser. Suivant votre <acronym>SGBD</acronym>,
                    la valeur est:<itemizedlist>
                        <listitem>
                          <para><varname>com.mysql.jdbc.Driver</varname>
                          <remark>(MySQL)</remark></para>
                        </listitem>

                        <listitem>
                          <para><varname>org.postgresql.Driver</varname>
                          <remark>(Postgresql)</remark></para>
                        </listitem>

                        <listitem>
                          <para><varname>oracle.jdbc.driver.OracleDriver</varname>
                          <remark>(Oracle)</remark></para>
                        </listitem>
                      </itemizedlist></para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>username</term>

                  <listitem>
                    <para>Utilisé uniquement si
                    <varname>type="JDBC"</varname>. Le login de connexion à la
                    base de données.</para>
                  </listitem>
                </varlistentry>

                <varlistentry>
                  <term>password</term>

                  <listitem>
                    <para>Utilisé uniquement si
                    <varname>type="JDBC"</varname>. Le mot de passe de
                    connexion à la base de données.</para>
                  </listitem>
                </varlistentry>
              </variablelist></para>
          </formalpara>
        </section>

        <section>
          <title>Liste des annuaires</title>

          <para>Nous avons vu qu'il est possible d'utiliser le partage de
          documents dans un espace <varname>classic</varname> ou de configurer
          un espace en mode <varname>injac</varname>. Il existe aussi un canal
          administration qui permet de saisir en ligne les espaces accessibles
          aux utilisateurs comme on le fait dans le fichier de configuration.
          Ces modes permettent la saisie d'utilisateurs via le canal
          annuaire.</para>

          <para>Pour l'appel du canal annuaire depuis le canal stockage, nous
          devons préciser le nom de l'annuaire à appeler. Nous devons donc
          répérencer ici le(s) nom(s) d'annuaire(s) dans lequel(s) nous
          pouvons faire la recherche d'utilisateurs.</para>

          <para>Le(s) nom(s) à présicer ici correspond(ent) au(x) nom(s)
          donné(s) dans le fichier de configuration du canal annuaire.</para>

          <para>La structure de la balise est la suivante:</para>

          <programlisting>&lt;DIRECTORIES 
	list="etudPriv,persPriv"
/&gt;</programlisting>

          <variablelist>
            <varlistentry>
              <term>list</term>

              <listitem>
                <para>Contient la liste des noms d'annuaires accessibles dans
                l'interface de partage, d'injac, ou d'administration du canal.
                Tous les noms doivent être séparés par une virgule.</para>
              </listitem>
            </varlistentry>
          </variablelist>
        </section>

        <section>
          <title>Paramètres généraux d'authentification</title>

          <programlisting>&lt;AUTHENTICATION 
	usernameAttribute="username"
	httpsRedirection="true | false" 
/&gt; </programlisting>

          <variablelist>
            <varlistentry>
              <term>usernameAttribute</term>

              <listitem>
                <para>Attribut uPortal contenant le login de la personne qui
                cherche à se connecter.</para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>httpsRedirection</term>

              <listitem>
                <para>Lors de l'utilisation d'espaces en mode
                <varname>asked</varname>, le mot de passe est demandé à
                l'utilisateur. Pour que le mot de passe ne circule pas "en
                clair" sur le réseau, on peut faire passer le portail en
                <acronym>HTTPS</acronym> au moment de l'envoi de
                celui-ci.</para>

                <para>Si <userinput>httpsRedirection="true"</userinput>, le
                portail passera automatiquement en <acronym>HTTPS</acronym>
                pour la saisie du formulaire de connexion. Une fois connecté,
                ou si vous basculez vers un espace où on ne demande pas de mot
                de passe, le portail repassera automatiquement en
                <acronym>HTTP</acronym>. Pour ce mode, vous devez <emphasis
                role="bold">IMPERATIVEMENT</emphasis> avoir un accès possible
                à votre portail à la fois en <acronym>HTTP</acronym> et en
                <acronym>HTTPS</acronym>. Votre portail doit aussi contenir la
                servlet HTTPSGateway.</para>

                <para>Si <userinput>httpsRedirection="false"</userinput>,
                l'envoi du mot de passe ne sera pas crypté et le portail ne
                passera jamais de <acronym>HTTP</acronym> vers
                <acronym>HTTPS</acronym> et vice-versa.</para>
              </listitem>
            </varlistentry>
          </variablelist>
        </section>

        <section>
          <title>Paramètres divers de suppression</title>

          <para>Dans le cas d'un accès à un espace en mode
          <varname>classic</varname>, il est possible de définir des options
          de suppression de ressources sur le serveur.</para>

          <programlisting>&lt;DEFAULT_OPTIONS_INTERFACE
	confirmDel="true"
	allowDelNonEmptyFolder="true"
/&gt;</programlisting>

          <variablelist>
            <varlistentry>
              <term>confirmDel</term>

              <listitem>
                <para>Vaut <varname>true</varname> si on demande confirmation
                avant de supprimer une ressource. Si <varname>false</varname>,
                on supprime sans demander confirmation.</para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>allowDelNonEmptyFolder</term>

              <listitem>
                <para>Permet de dire si on peut supprimer des répertoires non
                vides. Si <varname>true</varname>, on a le droit de supprimer
                des répertoires non vides, si <varname>false</varname>, il est
                impossible de supprimer un répertoire non vide.</para>
              </listitem>
            </varlistentry>
          </variablelist>
        </section>

        <section>
          <title>Fichiers invisibles</title>

          <para>Afin de ne pas pouvoir accéder à certains fichiers propres au
          serveur (comme <filename>.htaccess</filename> dans Apache pour un
          mod_dav), nous pouvons définir un critère "d'invisibilité" de
          certaines ressources.</para>

          <programlisting>&lt;INVISIBLE_FILES&gt;
	&lt;REG_EXP 
		pattern="^\..*"
	/&gt;
&lt;/INVISIBLE_FILES&gt;</programlisting>

          <variablelist>
            <varlistentry>
              <term>pattern</term>

              <listitem>
                <para>Expression réguliére permettant de dire quels fichiers
                doivent être masqué à l'utilisateur. Dans l'exemple
                <varname>"^\.."</varname> les fichiers commençant par un point
                sont invisibles à l'utilisateur.</para>
              </listitem>
            </varlistentry>
          </variablelist>
        </section>
      </section>
    </section>

    <section>
      <title>Configuration du module inJAC</title>

      <para>Nous avons précédemment vu que certains espaces peuvent être
      utilisés en mode <varname>injac</varname>. Pour l'utilisation de ce
      mode, il est nécessaire de définir certaines propriétés.</para>

      <section>
        <title>Structure générale</title>

        <para>Le fichier de propriété propre à ce mode est
        <filename>properties/injac/injac.xml</filename> Sa forme générale est
        la suivante:</para>

        <programlisting>&lt;INJAC&gt;					&lt;!-- Racine du fichier de configuration --&gt;
	
	&lt;METADATA_PROFILES&gt;		&lt;!-- Ensemble des profiles méta-données --&gt;				
		&lt;METADATA_PROFILE/&gt;		
	&lt;/METADATA_PROFILES&gt;
		
	
	&lt;RENDERINGS&gt;			&lt;!-- Ensemble des noms de fichiers des skins utilisables pour le rendu des documents d'un espace injac --&gt;
		&lt;RENDERING/&gt;		
	&lt;/RENDERINGS&gt;
	
&lt;/INJAC&gt;</programlisting>

        <para>Voyons plus en détail ces balises.</para>
      </section>

      <section>
        <title>Liste de méta-données</title>

        <para>Lors de l'utilisation du CMS inJAC, des méta-données doivent
        être positionnées par l'utilisateur qui cherche à soumettre ou à
        publier un document. Ces méta-données sont fixées par le gestionnaire
        de l'espace.</para>

        <para>Pour que le traitement du gestionnaire soit le moins lourd
        possible, le choix qui a été fait est de définir des profils type de
        méta-données. Le gestionnaire n'a alors qu'à choisir le profil
        désiré.</para>

        <para>Voyons la balise à éditer pour spécifier ces
        méta-données:</para>

        <programlisting>&lt;METADATA_PROFILES&gt;
	
	&lt;METADATA_PROFILE
		fileName="default.xml"
		label="Méta-données par défaut"
	/&gt;
		
&lt;/METADATA_PROFILES&gt;</programlisting>

        <para>Pour chaque profile de méta-données, il faut définir une balise
        <varname>&lt;METADATA_PROFILE&gt;</varname>. Voyons les attributs qui
        la composent:</para>

        <variablelist>
          <varlistentry>
            <term>fileName</term>

            <listitem>
              <para>Cet attribut contient le nom du fichier xml qui contient
              tout le profile. Ce fichier doit <emphasis
              role="bold">IMPERATIVEMENT</emphasis> se trouver dans le dossier
              <filename>properties/injac/metadata</filename>. Nous verrons la
              forme de ce fichier dans la partie "Définitions d'un profil de
              méta-données".</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>label</term>

            <listitem>
              <para>Ceci est le label de ce profil qui est affiché au
              gestionnaire de l'espace inJAC.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Liste de feuilles de style pour rendu</title>

        <para>Pour chaque espace, le gestionnaire peut choisir le rendu qui
        sera associé grace à une feuille de style. Pour cela, le gestionnaire
        a la possibilité de choisir ce rendu dans une liste déroulante.</para>

        <para>Cette liste est construite via la balise suivante:</para>

        <programlisting>&lt;RENDERINGS&gt;
	
	&lt;RENDERING
		label="Rendu par défaut"
		skinFile="File.xml"		
	/&gt;
		
&lt;/RENDERINGS&gt;</programlisting>

        <para>Pour chaque skin potentiellement utilisable dans le rendu, il
        faut définir une balise <varname>&lt;RENDERING&gt;</varname>.</para>

        <variablelist>
          <varlistentry>
            <term>label</term>

            <listitem>
              <para>Label affiché au gestionnaire lors de son choix.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>skinFile</term>

            <listitem>
              <para>Nom du fichier contenant le skin à utiliser pour un espace
              donné. Un skin est un fichier xml qui décrit le contenu
              optionnel, le style (fontes, couleurs) et la disposition des
              éléments du rendu inJAC.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>

      <section>
        <title>Définition d'un profil de méta-données</title>

        <para>Un format a été défini pour la définition des méta-données à
        saisir par l'utilisateur au moment de la soumission, ou de la
        publication d'un document.</para>

        <para>La forme globale du fichier doit être de cette forme:</para>

        <programlisting>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; 	
&lt;metas&gt;
	&lt;meta/&gt;
&lt;/metas&gt;</programlisting>

        <para>Chaque balise <varname>&lt;meta&gt;</varname> représente une
        méta-donnée à positionner lors de la soumission ou la publication d'un
        document.</para>

        <para>Voyons plus précisémment sa forme.</para>

        <programlisting>&lt;meta 	
	name="---"
	label="---"
	input="text|textarea|select"
	choiceList="a,b,c"
	type="string|date"
	required="yes|no"
	level="edition|publication"
	defaultValue="---"
	comment="---"
	format="regexp|dateFormat"
/&gt;</programlisting>

        <variablelist>
          <varlistentry>
            <term>name</term>

            <listitem>
              <para>Ceci est le nom réel de la méta-donnée au sein du
              serveur.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>label</term>

            <listitem>
              <para>Un nom donné à la méta-donnée pour plus de compréhension
              par l'utilisateur.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>input</term>

            <listitem>
              <para>Représente le type de saisie, cet attribut peut prendre 3
              valeurs:<itemizedlist>
                  <listitem>
                    <para><varname>text</varname>: sera représenté par un
                    champ de saisie de type "text" dans un formulaire
                    HTML.</para>
                  </listitem>

                  <listitem>
                    <para><varname>textarea</varname>: correspond à une zone
                    de saisie sur plusieurs lignes</para>
                  </listitem>

                  <listitem>
                    <para><varname>select</varname>: liste déroulante</para>
                  </listitem>
                </itemizedlist></para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>choiceList</term>

            <listitem>
              <para>Utilisable uniquement et obligatoirement si
              <varname>input="select"</varname>, cet attribut permet de
              définir la liste des choix possible pour cette méta-données.
              Toutes les valeurs doivent être séparées par une virgule.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>type</term>

            <listitem>
              <para>Type de la valeur attendue pour la méta-donnée. Les
              valeurs possibles sont <varname>string</varname> et
              <varname>date</varname>.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>required</term>

            <listitem>
              <para>Certaines méta-données peuvent être optionnelles
              (<varname>required="yes"</varname>) et d'autres obligatoires
              (<varname>required="no"</varname>).</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>level</term>

            <listitem>
              <para>Indique le niveau de saisir pour cette méta-donnée,
              c'est-à-dire la personne qui va devoir la saisir. Si
              <varname>level="edition"</varname>, c'est le rédacteur (lors de
              la soumission) qui devra la saisir, tandis que ça sera l'éditeur
              (lors de la publication) si
              <varname>level="publication"</varname>.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>defaultValue</term>

            <listitem>
              <para>La méta-donnée peut prendre une valeur par défaut, c'est
              via cet attribut qu'elle est définie.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>comment</term>

            <listitem>
              <para>Afin d'apporter une certaine clareté à l'utilisateur, il
              est possible de mettre un commentaire qui sera affiché dans le
              canal à côté du champ de saisie.</para>
            </listitem>
          </varlistentry>

          <varlistentry>
            <term>format</term>

            <listitem>
              <para>Il est possible de définir un format pour les méta-données
              à saisir. Pour cela, 2 possibilité:<itemizedlist>
                  <listitem>
                    <para>Si <userinput>type="string"</userinput>, il faudra
                    définir une expression régulière (pour un email par
                    exemple)</para>
                  </listitem>

                  <listitem>
                    <para>Si <userinput>type="date"</userinput>, il daudra
                    définir un format de date correspondant à la classe
                    <varname>DateFormat</varname> en Java. Par exemple,
                    <varname>"dd/MM/yyyy"</varname> pour une date du type
                    15/06/2004.</para>
                  </listitem>
                </itemizedlist></para>
            </listitem>
          </varlistentry>
        </variablelist>

        <formalpara>
          <title>Remarque</title>

          <para>Sous windows, des problèmes d'encodage des caractères
          accentués ont été relevés lors de l'édition de ces fichiers via
          l'outil notepad. Préférez l'utilisation de wordpad.</para>
        </formalpara>
      </section>
    </section>

    <section>
      <title>Déploiement du Canal</title>

      <para>Préparation du déploiement : modifier le fichier
      <filename>build.properties</filename> en fonction de la version de
      portail que vous utilisez.</para>

      <para>Lancez la commande suivante relative au fichier
      <filename>build.xml</filename> contenu dans le package:</para>

      <screen>ant deploy</screen>

      <para>Il ne reste plus qu'à l'administrateur du portail de publier le
      canal.</para>

      <section>
        <title>Publication du canal stockage</title>

        <para>La publication du canal stockage se fait en saisissant le nom de
        classe suivant:</para>

        <itemizedlist>
          <listitem>
            <para><varname>org.esupportail.portal.channels.CStockage.CStockage</varname></para>
          </listitem>
        </itemizedlist>
      </section>

      <section>
        <title>Publication du canal d'administration</title>

        <para>La publication du canal d'administration se fait en saisissant
        le nom de classe suivant:</para>

        <itemizedlist>
          <listitem>
            <para><varname>org.esupportail.portal.channels.CStockage.CStockageAdministration</varname></para>
          </listitem>
        </itemizedlist>
      </section>
    </section>
  </section>
</article>
