sdx-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sdx-developers] Cinématique Logicsheet


From: Pierrick Brihaye
Subject: [sdx-developers] Cinématique Logicsheet
Date: Tue, 04 Jan 2005 09:26:20 +0100
User-agent: Mozilla/5.0 (Windows; U; Win98; fr-FR; rv:1.6) Gecko/20040113

Salut et bonne année,

J'essaie de voir comment on pourrait définir dynamiquement un pipeline dans un tag <sdx:deleteDocument>. Pour cela, je suis en train de regarder comment cest défini le pipeline dynamique de sdxtest :

<sdx:uploadDocument base="sdxworld" urlParam="site" repo="url" type="text/html">
  <!-- indexer une URL à la fois
    supposée être celle d'un site SDX, donc cherchable avec les notices,
    Les documents ne sont pas stockés localement mais référencés dans un
    entrepôt "URL"
  -->
  <sdx:pipeline>
    <!-- pipeline d'indexation  -->
    <sdx:parameter name="url" valueParam="url">
<!-- passe un paramêtre à la transformation d'indexation (HTTP ?url=) -->
    </sdx:parameter>
    <sdx:parameter name="jour" valueString="jour">
<!-- passe un paramêtre à la transformation d'indexation la variable java String jour -->
    </sdx:parameter>
<sdx:transformation type="XSLT" src="conf/index-html.xsl" srcParam="index"/>
  </sdx:pipeline>
</sdx:uploadDocument>

Note : je passe sur les tags qui pourraient bénéficier d'une syntaxe courte.

Dans la logicsheet "actions.xsl", dans <sdx:uploadDocument>, on a :

<xsl:template match="sdx:uploadDocument">
  <xsp:logic xml:title="IMPORT">
    <xsl:call-template name="comment"/>
    try{
      <xsl:call-template name="sdx:repo"/>
    }
    catch(SDXException e)
    {} // repo can be null
                        
    <xsl:call-template name="sdx:document"/>
    if (sdx_document != null)
    {
<xsl:call-template name="sdx:index"/> sdx_base.index((IndexableDocument)sdx_document, sdx_repo, sdx_index , contentHandler);
      <xsl:apply-templates select="sdx:success/node()"/>
      <xsl:call-template name="sdx:parameter">
        <xsl:with-param name="name" select="'optimize'"/>
      </xsl:call-template>                        
      if ( sdx_bool ) {
        <xsl:call-template name="sdx:optimize"/>
      }
      <!--
      <xsl:if test="@optimize='true'">
        <xsl:call-template name="sdx:optimize"/>
      </xsl:if>
      -->
    }
    else
    {
      <xsl:apply-templates select="sdx:fallback/*"/>
    }                   
  </xsp:logic>
</xsl:template>

Le code qui m'intéresse est : <xsl:call-template name="sdx:index"/> car, dans le traitement de <sdx:index>, on trouve :

<xsl:choose>
  <!-- if user pipeline given, parse it, if not, get default -->
  <xsl:when test="sdx:pipeline/sdx:transformation">
    <xsl:apply-templates select="sdx:pipeline"/>
    if (sdx_pipeline != null) sdx_index.setPipeline(sdx_pipeline);
    sdx_pipeline=null;
  </xsl:when>
  <xsl:when test="sdx:pipeline/sdx:parameter">
    if (sdx_base != null) sdx_pipeline=sdx_base.getIndexationPipeline();
  </xsl:when>
</xsl:choose>     

Cependant, j'ai du mal à comprendre le fonctionnement de cette partie de code car les 2 <xsl:when> ne me paraissent pas mutuellement exclusifs. Idem pour Rasik :

//TODO?:fred why are you nullifying the pipe above?-rbp

Ne pourrait-on refactoriser ce code pour :

1) traiter les pipelines de façon générique
2) réagir en fonction de *l'ancêtre*, i.e. appliquer le pipeline en upload ou en destruction plutôt que d'avoir à gérer 2 fois le problème. IMHO, ça diminuerait le risque de bug et ça clarifierait les cas d'utilisation de pipelines dynamiques.

Qu'en pensez-vous ?

A+

--
Pierrick Brihaye, informaticien
Service régional de l'Inventaire
DRAC Bretagne
mailto:address@hidden
+33 (0)2 99 29 67 78




reply via email to

[Prev in Thread] Current Thread [Next in Thread]