[Castore-commits] ParserSystem.java 1.1.2.4 1.1.2.5

Stéphane Bouchet sbouchet at adullact1.hosting.cri74.org
Lun 6 Mar 11:10:24 CET 2006


Update of /cvsroot/castore/castore-core/src/java/fr/emn/castor/admin
In directory adullact1:/tmp/cvs-serv29869/src/java/fr/emn/castor/admin

Modified Files:
      Tag: v1_1_branch
	ParserSystem.java 
Log Message:
correction des outils d'import/export des données

Index: ParserSystem.java
===================================================================
RCS file: /cvsroot/castore/castore-core/src/java/fr/emn/castor/admin/ParserSystem.java,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -C2 -d -r1.1.2.4 -r1.1.2.5
*** ParserSystem.java	7 Feb 2006 15:44:29 -0000	1.1.2.4
--- ParserSystem.java	6 Mar 2006 10:10:21 -0000	1.1.2.5
***************
*** 44,51 ****
--- 44,60 ----
  import java.util.ArrayList;
  import java.util.Collection;
+ import java.util.Iterator;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.FactoryConfigurationError;
  import javax.xml.parsers.ParserConfigurationException;
+ import javax.xml.transform.OutputKeys;
+ import javax.xml.transform.Transformer;
+ import javax.xml.transform.TransformerConfigurationException;
+ import javax.xml.transform.TransformerException;
+ import javax.xml.transform.TransformerFactory;
+ import javax.xml.transform.dom.DOMSource;
+ import javax.xml.transform.stream.StreamResult;
  import javax.xml.xpath.XPath;
  import javax.xml.xpath.XPathConstants;
***************
*** 58,66 ****
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  import org.w3c.dom.NodeList;
  import org.xml.sax.SAXException;
  
  /**
!  * le parser XML utilisé pour lire les fichiers XML systèmes.
   *
   * @author $Author$
--- 67,78 ----
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
+ import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
+ import org.w3c.dom.Text;
  import org.xml.sax.SAXException;
  
  /**
!  * le parser XML utilisé pour lire les fichiers XML systèmes créée pour
!  * l'import/export des données.
   *
   * @author $Author$
***************
*** 78,81 ****
--- 90,96 ----
      private XPath xpath;
  
+     /** Le fichier XML contenant les infos. */
+     private File systemFile;
+ 
      /**
       * Constructeur.
***************
*** 83,87 ****
       * @param system le fichier xml correspondant aux informations.
       */
!     public ParserSystem(final File system) {
          try {
              // Use JAXP to find a parser
--- 98,103 ----
       * @param system le fichier xml correspondant aux informations.
       */
!     public ParserSystem (final File system) {
!         this.systemFile = system;
          try {
              // Use JAXP to find a parser
***************
*** 145,149 ****
       * parametre.
       */
!     public final Collection getValidateurs(final int etape) {
          NodeList nodeList = null;
          try {
--- 161,165 ----
       * parametre.
       */
!     public final Collection<String> getValidateurs(final int etape) {
          NodeList nodeList = null;
          try {
***************
*** 159,163 ****
              }
          }
!         ArrayList results = new ArrayList();
          if (nodeList != null) {
              for (int i = 0; i < nodeList.getLength(); i++) {
--- 175,179 ----
              }
          }
!         ArrayList<String> results = new ArrayList<String>();
          if (nodeList != null) {
              for (int i = 0; i < nodeList.getLength(); i++) {
***************
*** 171,173 ****
--- 187,298 ----
          return results;
      }
+ 
+     /**
+      * Remplace les valeurs des champs de la notice.
+      *
+      * @param key le champ
+      * @param values les valeurs sous forme d'un iterateur de Map
+      */
+     public final void setValidateurs(
+             final String etape, final Iterator values) {
+         //il faut retrouver le bon element, et lui ajouter la valeur
+         try {
+             Node node = searchNodeWithKey("validateurs");
+             Node root = this.document.getFirstChild();
+             if (node == null) {
+                 // création du node validateurs
+                 Element keyElem = this.document.createElement("validateurs");
+                 root.appendChild(keyElem);
+                 node = keyElem;
+             }
+             // création du node etape
+             Element etapeElem = this.document.createElement("etape");
+             etapeElem.setAttribute("step", etape);
+             node.appendChild(etapeElem);
+             while (values.hasNext()) {
+                 String element = (String) values.next();
+                 Text txt = this.document.createTextNode(element);
+                 etapeElem.appendChild(txt);
+             }
+         } catch (XPathException e) {
+             if (log.isErrorEnabled()) {
+                 log.error("Erreur de remplacement de valeurs multiples", e);
+             }
+         } catch (FactoryConfigurationError e) {
+             if (log.isErrorEnabled()) {
+                 log.error("Erreur de remplacement de valeurs multiples", e);
+             }
+         }
+         // il faut sauver les modifications :)
+         saveNotice();
+     }
+ 
+     /**
+      * Remplace la valeur unique du champ voulu.
+      *
+      * @param key le champ a remplacer
+      * @param value la valeur
+      */
+     public final void setValue(final String key, final String value) {
+         // il faut retrouver le bon element, et remplacer la valeur
+         try {
+             Node root = this.document.getFirstChild();
+             // on doit creer l'element clé
+             Element keyElem = this.document.createElement(key);
+             root.appendChild(keyElem);
+             Text txt = this.document.createTextNode(value);
+             keyElem.appendChild(txt);
+         } catch (FactoryConfigurationError e) {
+             if (log.isErrorEnabled()) {
+                 log.error("Erreur de remplacement de valeur", e);
+             }
+         }
+         // il faut sauver les modifications :)
+         saveNotice();
+     }
+ 
+     /**
+      * Methode sauvegardant la notice modifiée.
+      */
+     private void saveNotice() {
+         StreamResult result = new StreamResult(this.systemFile);
+         DOMSource source = new DOMSource(this.document);
+         TransformerFactory transformerFcty = TransformerFactory
+             .newInstance();
+         Transformer transformer = null;
+         try {
+             transformer = transformerFcty.newTransformer();
+         } catch (TransformerConfigurationException tce) {
+             if (log.isFatalEnabled()) {
+                 log.fatal("Erreur lors de la sauvegarde de la notice : "
+                         + tce.getMessage(), tce);
+             }
+             return;
+         }
+         transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+         transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+         transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
+         try {
+             transformer.transform(source, result);
+         } catch (TransformerException te) {
+             if (log.isErrorEnabled()) {
+                 log.error("Erreur lors de la sauvegarde de la notice : "
+                         + te.getMessage(), te);
+             }
+             return;
+         }
+     }
+ 
+     /**
+      * Methode de recherche d'un node particulier.
+      *
+      * @param key le node (champ) voulu
+      * @return le node trouvé
+      * @throws XPathException si une erreur d'expression XPath survient
+      */
+     private Node searchNodeWithKey(final String key) throws XPathException {
+         String filtre = "//system/" + key + "";
+         XPathExpression exp = this.xpath.compile(filtre);
+         return (Node) exp.evaluate(this.document, XPathConstants.NODE);
+     }
  }
\ No newline at end of file




Plus d'informations sur la liste de diffusion Castore-commits