Publié le 29 Août 2012

J'utilise XSLT pour générer de la documentation. Dans le cas qui nous intéresse ici, il s'agit d'afficher un tableau avec différentes informations. La construction du tableau s'effectue par l'ajout de ligne à travers une boucle for-each:

<xsl:template name="article-rows" match="ARTICLES">
 <xsl:foreach select ="ARTICLE">
  <fo:table-row>
    <fo:table-cell>
     <fo:block>article n° : <xsl:value-of select ="position()"/></fo:block>
   </fo:table:cell>
  </fo:table-row>
 </xsl:foreach>
</xsl:template>

Maintenant je dois traiter la première ligne d'une manière différente. Je dois donc savoir s'il s'agit de la première iteration de la boucle for-each. Hors en XSLT les variable sont toutes final, ce qui signifie qu'on ne peut pas modifier leur valeur après initialisation.

Par conséquence il est impossible d'utiliser une variable 'i' qu'on incrémente à chaque itération. (pas modifiable, je vous dis!)

Heureusement il existe la fonction position() qui retourne exactement le nombre d'iteration effectuées dans une boucle.

Ainsi il est facile de tester s'il s'agit de la première itération:

 

<xsl:template name="article-rows" match="ARTICLES">
 <xsl:foreach select ="ARTICLE">
  <fo:table-row>
    <fo:table-cell>
     <fo:block>
      <xsl:if test="position()=1">premier article</xsl:if>
      <xsl:if test="not(position()=1)">article n° : <xsl:value-of select ="position()"/></xsl:if>
    </fo:block>
   </fo:table:cell>
  </fo:table-row>
 </xsl:foreach>
</xsl:template>

De même pour la dernière ligne on peut ajouter un if pour modifier la dernière ligne. Mais il faut utiliser la fonction last() pour savoir s'il s'agit de la dernière iteration (Et oui on ne connaît forcément le nombre d'itération à l'avance).

<xsl:if test="position()=last()">...</xsl:if>

Voir les commentaires

Rédigé par Bliz

Publié dans #XSLT

Repost 0

Publié le 23 Août 2012

J'apprécie particulièrement VI car passé un certain cap il s'avère en fait très puissant:

Par exemple il est très facile d'effectuer des remplacement de caractères:

Pour effectuer un seul remplacement sur la ligne courante :s/OLD/NEW
Pour effectuer tous les remplacements sur la ligne courante :s/OLD/NEW/g
Pour effectuer tous les remplacements entre 2 lignes :#,#s/OLD/NEW/g
Pour effectuer tous les remplacements dans tout le fichier :%s/OLD/NEW/g

Voir les commentaires

Rédigé par Bliz

Publié dans #Linux

Repost 0

Publié le 22 Août 2012

Alors voilà le problème:

J'ai un projet maven avec certaines que je n'utilise que lors de la phase d'intégration. Ces classes me fournissent des points d'entrées en ligne de commande pour tester directement les interactions avec d'autres systèmes.

Bref je ne veux pas inclure ces sources dans mon jar en production mais par contre j'en ai besoin en phase d'intégration.

Ces sources sont exclues par défaut du projet maven avec la configuration suivante:

<build>
 <plugins>
  <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
    <excludes>
     <exclude>com/over-blog/patatos/integration/**</exclude>
    </excludes>
   </configuration>
  </plugin>
 </plugins>
</build>

Ensuite je défini un profile particulier que j'appelle "intégration" et dans lequel je fais un include des ces sources:

<profiles>
 <profile>
  <id>integration</id>
  <build>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
      <includes>
       <include>com/over-blog/patatos/integration/**</include>
      </includes>
     </configuration>
    </plugin>
   </plugins>
  </build>
 </profile>
</profiles>

Et bien contre toute attente ce méchanisme ne fonctionne pas. Pourquoi ? En quelque sorte on peut dire que l'exclude l'emporte sur l'include.

Pour résoudre ce problème il faut explicitement indiquer qu'on ne veut pas d'exclusion dans le profile "integration".

<profiles>
 <profile>
  <id>integration</id>
  <build>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
      <excludes>
       <exclude>none</exclude>
      </excludes>
     </configuration>
    </plugin>
   </plugins>
  </build>
 </profile>
</profiles>

 

 

Voir les commentaires

Rédigé par Bliz

Publié dans #Maven

Repost 0

Publié le 13 Août 2012

Voici juste un petit rappel sur comment configurer les adresses des serveurs DNS sous linux.

Normalement toutes les infos sont récupérées via DHCP au démarrage et il n'y a donc rien à faire.

Dans le cas contraire la configuration est très simple il suffit de rajouter les lignes suivantes dans le fichier /etc/resolv.conf:

#DNS Free (à modifier en fonction de son fournisseur)
nameserver 212.27.40.240
nameserver 212.27.40.241

Voir les commentaires

Rédigé par Bliz

Publié dans #Linux

Repost 0