[Top][All Lists]
[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
- [sdx-developers] Cinématique Logicsheet,
Pierrick Brihaye <=