[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