[Castore-commits] ParserMetaDatas.java NONE 1.1
Céline BENOIT
cbenoit at adullact1.hosting.cri74.org
Mer 22 Mar 15:27:04 CET 2006
Update of /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/docGenerique/soumission/resources
In directory adullact1:/tmp/cvs-serv10349/src/java/fr/emn/castor/documents/metier/docGenerique/soumission/resources
Added Files:
ParserMetaDatas.java
Log Message:
déplacement du fichier
--- NEW FILE: ParserMetaDatas.java ---
/*
* $Id: ParserMetaDatas.java,v 1.1 2006/03/22 14:27:01 cbenoit Exp $
*
* Plateforme CASTORE
* CeCILL Copyright (C) 2005-2006 by EMN
* Made by Stéphane Bouchet, Olivier Grouhan, Vanessa Bergere
* Web site = http://www.emn.fr/castore
* Contact = Cédric Dumas, e-mail = Cedric.Dumas at emn.fr
*
* Version 1.0 (1er mars 2005)
*
* Ce logiciel est un programme informatique servant à créer une plateforme
* open-source de bibliothèque numérique XML pour Conserver, Valoriser et
* Diffuser le patrimoine documentaire de votre institut.
*
* Ce logiciel est régi par la licence CeCILL soumise au droit français et
* respectant les principes de diffusion des logiciels libres. Vous pouvez
* utiliser, modifier et/ou redistribuer ce programme sous les conditions de la
* licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA sur le site
* "http://www.cecill.info". En contrepartie de l'accessibilité au code source
* et des droits de copie, de modification et de redistribution accordés par
* cette licence, il n'est offert aux utilisateurs qu'une garantie limitée. Pour
* les mêmes raisons, seule une responsabilité restreinte pèse sur l'auteur du
* programme, le titulaire des droits patrimoniaux et les concédants successifs.
* A cet égard l'attention de l'utilisateur est attirée sur les risques associés
* au chargement, à l'utilisation, à la modification et/ou au développement et à
* la reproduction du logiciel par l'utilisateur étant donné sa spécificité de
* logiciel libre, qui peut le rendre complexe à manipuler et qui le réserve
* donc à des développeurs et des professionnels avertis possédant des
* connaissances informatiques approfondies. Les utilisateurs sont donc invités
* à charger et tester l'adéquation du logiciel à leurs besoins dans des
* conditions permettant d'assurer la sécurité de leurs systèmes et ou de leurs
* données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes
* conditions de sécurité. Le fait que vous puissiez accéder à cet en-tête
* signifie que vous avez pris connaissance de la licence CeCILL, et que vous en
* avez accepté les termes.
*
*/
package fr.emn.castor.documents.metier.docGenerique.soumission.resources;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import javax.xml.parsers.FactoryConfigurationError;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import fr.emn.castor.common.Constants;
import fr.emn.castor.common.Utils;
import fr.emn.castor.documents.metier.docGenerique.soumission.resources.liste.ParserListe;
/**
* @author $Author: cbenoit $
* @version $Revision: 1.1 $
*/
public class ParserMetaDatas extends DefaultHandler {
/**
*/
private boolean inDcType = false;
/**
*/
private String metadataKey;
/**
*/
private boolean inHelp = false;
/**
*/
private boolean inWording = false;
/**
* pour savoir si on est dans une description d'un champ.
*/
private boolean inMetadata = false;
/**
* la table des champs.
*/
private ArrayList metadatas = new ArrayList();
/**
* le mapping sous forme utilisable.
*/
private HashMap currentMetadata = null;
/**
* le reader XML.
*/
private XMLReader xmlReader = null;
/**
* le buffer de caracteres.
*/
private StringBuffer charBuf = new StringBuffer();
/**
* Constructor.
*/
public ParserMetaDatas(ArrayList mdFiles) {
try {
this.xmlReader = XMLReaderFactory
.createXMLReader(Constants.XML_SAX_PARSER);
this.xmlReader.setContentHandler(this);
this.xmlReader.setErrorHandler(this);
for (Iterator iter = mdFiles.iterator(); iter.hasNext();) {
String path = Constants.CASTOR_TYPEDOC_PATH
+ Constants.FILE_SEPARATOR + iter.next();
InputStream in = Utils.getResourceAsStream(path);
InputSource inputsource = new InputSource(in);
inputsource.setSystemId(path);
this.xmlReader.parse(inputsource);
}
} catch (FileNotFoundException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (FactoryConfigurationError e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (SAXException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (IOException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
}
}
/**
* @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
public final void startElement(
final String uri, final String localName, final String qName,
final Attributes attributes) throws SAXException {
if (qName.equals("metadata")) {
this.currentMetadata = new HashMap();
for (int i = 0; i < attributes.getLength(); i++) {
this.currentMetadata.put(attributes.getQName(i), attributes
.getValue(i));
}
this.inMetadata = true;
} else if (qName.equals("wording")) {
this.inWording = true;
} else if (qName.equals("help")) {
this.inHelp = true;
String formatAttendu = attributes.getValue("awaited_format");
if (formatAttendu != null) {
this.currentMetadata.put("help_awaited_format", formatAttendu);
}
} else if (qName.equals("equivalent_dc")) {
this.inDcType = true;
} else if (qName.equals("list")) {
HashMap currentList = new HashMap();
String filePath = attributes.getValue("file");
ParserListe parserListe = new ParserListe(filePath);
currentList = parserListe.getListe();
String defaultElemnt = parserListe.getDefaultElement();
if (defaultElemnt != null) {
this.currentMetadata.put("defaultElement", defaultElemnt);
} else {
this.currentMetadata.put("defaultElement", "");
}
this.currentMetadata.put("list", currentList);
this.currentMetadata.put("xmlFile", filePath);
this.currentMetadata.put("editableList", attributes
.getValue("editable"));
}
}
/**
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
*/
public final void characters(
final char[] text, final int start, final int length) {
// on recupere le texte entre les balises.
StringBuffer buf = new StringBuffer();
buf.append(text, start, length);
// si on a pas vidé le buffer, on rajoute un espace entre
// les caracteres
// on vérifie tout de meme si on est pas au début du buffer de lecture
// de SAX, sinon on insere un espace en trop !
if ((this.charBuf.length() > 0) && (start != 0)) {
this.charBuf.append(" ");
}
this.charBuf.append(buf.toString().trim());
}
/**
* @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
*/
public final void endElement(
final String uri, final String localName, final String qName)
throws SAXException {
// on rajoute le field lu a la liste
if (qName.equals("wording")) {
this.currentMetadata.put("wording", this.charBuf
.toString().trim());
this.inWording = false;
} else if (qName.equals("help")) {
this.currentMetadata.put("help", this.charBuf.toString().trim());
this.inHelp = false;
} else if (qName.equals("equivalent_dc")) {
this.metadataKey = this.charBuf.toString().trim();
this.inDcType = false;
} else if (qName.equals("metadata")) {
HashMap metaData = new HashMap();
metaData.put(this.metadataKey, this.currentMetadata);
this.metadatas.add(metaData);
this.inMetadata = false;
}
this.charBuf.setLength(0);
}
public HashMap getMetadatasForUser() {
//on renvoie seulement les champs accessible aux users.
LinkedHashMap metaDatas = new LinkedHashMap();
for (int i = 0; i < this.metadatas.size(); i++) {
HashMap md = (HashMap) this.metadatas.get(i);
// on recupere le couple cle/hashMap
String mdKey = (String) md.keySet().iterator().next();
HashMap mdContent = (HashMap) md.values().iterator().next();
if (mdContent.get("visibleFor").equals("user")) {
//ok, on doit le renvoyer
metaDatas.put(mdKey, mdContent);
}
}
return metaDatas;
}
public HashMap getMetadatasForValidator() {
//on renvoie seulement les champs accessible aux users et validators.
LinkedHashMap metaDatas = new LinkedHashMap();
for (int i = 0; i < this.metadatas.size(); i++) {
HashMap md = (HashMap) this.metadatas.get(i);
// on recupere le couple cle/hashMap
String mdKey = (String) md.keySet().iterator().next();
HashMap mdContent = (HashMap) md.values().iterator().next();
if ((mdContent.get("visibleFor").equals("user"))
|| (mdContent.get("visibleFor").equals("validator"))) {
//ok, on doit le renvoyer
metaDatas.put(mdKey, mdContent);
}
}
return metaDatas;
}
public HashMap getMetadatasForDocumentalist() {
//on renvoie seulement les champs accessible aux users et validators.
LinkedHashMap metaDatas = new LinkedHashMap();
for (int i = 0; i < this.metadatas.size(); i++) {
HashMap md = (HashMap) this.metadatas.get(i);
// on recupere le couple cle/hashMap
String mdKey = (String) md.keySet().iterator().next();
HashMap mdContent = (HashMap) md.values().iterator().next();
if ((mdContent.get("visibleFor").equals("user"))
|| (mdContent.get("visibleFor").equals("validator"))
|| (mdContent.get("visibleFor").equals("documentalist"))) {
//ok, on doit le renvoyer
metaDatas.put(mdKey, mdContent);
}
}
return metaDatas;
}
public HashMap getMetadatasForSearch() {
// on renvoie tout les champs du fichier de base.
HashMap recherche = new HashMap();
for (int i = 0; i < this.metadatas.size(); i++) {
HashMap md = (HashMap) this.metadatas.get(i);
// on recupere le couple cle/hashMap
String mdKey = (String) md.keySet().iterator().next();
HashMap mdContent = (HashMap) md.values().iterator().next();
recherche.put(mdKey, mdContent);
}
return recherche;
}
}
Plus d'informations sur la liste de diffusion Castore-commits