Author: glandais Date: 2007-12-17 10:59:58 +0000 (Mon, 17 Dec 2007) New Revision: 69 Added: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java Removed: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/DataEntityFactory.java Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/CodeFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ComponentFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantValueFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/RepositoryFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ResultFactory.java trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/StructureFactory.java Log: Factory de base = BaseEntityFactory Initialisation de MetaDataEntityFactory Copied: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java (from rev 62, trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/DataEntityFactory.java) =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java (rev 0) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/BaseEntityFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -0,0 +1,187 @@ +package fr.cemagref.simexplorer.is.storage.factories; + +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +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 fr.cemagref.simexplorer.is.storage.entities.BaseEntity; +import fr.cemagref.simexplorer.is.storage.entities.data.DataEntity; + +public abstract class BaseEntityFactory<E extends BaseEntity> { + + private static DocumentBuilder documentBuilder = null; + + private static Map<String, BaseEntityFactory<? extends DataEntity>> factories = new HashMap<String, BaseEntityFactory<? extends DataEntity>>(); + + private final static String PACKAGE_DAO = "fr.cemagref.simexplorer.is.storage.factories"; + + public static synchronized DocumentBuilder getBuilder() throws Exception { + if (documentBuilder == null) { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + documentBuilder = factory.newDocumentBuilder(); + return documentBuilder; + } + return documentBuilder; + } + + // @SuppressWarnings("unchecked") + public static <T extends DataEntity> BaseEntityFactory<T> getFactory( + Class<T> entityClass) throws Exception { + // FIXME Raw types and unchecked casts + BaseEntityFactory<T> result = (BaseEntityFactory<T>) factories + .get(entityClass.getSimpleName()); + if (result == null) { + String elementFactoryClassName = PACKAGE_DAO + "." + + entityClass.getSimpleName() + "Factory"; + + Class<? extends BaseEntityFactory<T>> factoryClass = (Class<? extends BaseEntityFactory<T>>) Class + .forName(elementFactoryClassName).asSubclass( + BaseEntityFactory.class); + + result = factoryClass.newInstance(); + factories.put(entityClass.getSimpleName(), result); + } + return result; + } + + public static BaseEntityFactory<? extends DataEntity> getFactory( + String entityClassName) throws Exception { + Class<? extends DataEntity> entityClass = Class + .forName(entityClassName).asSubclass(DataEntity.class); + return getFactory(entityClass); + } + + public abstract E createInstance(); + + public Element getElementByTagName(Element xmlElement, String tagName) { + Set<Element> elements = getElementsByTagName(xmlElement, tagName); + if (elements.size() > 0) { + return elements.iterator().next(); + } else { + return null; + } + } + + public Set<Element> getElementsByTagName(Element xmlElement, + String tagName) { + Set<Element> elements = new HashSet<Element>(); + + NodeList nodes = xmlElement.getChildNodes(); + for (int i = 0; i < nodes.getLength(); i++) { + Node node = nodes.item(i); + if (node instanceof Element + && tagName.equals(((Element) node).getTagName())) { + elements.add((Element) node); + } + } + return elements; + } + + public String getElementXML(E element) throws Exception { + ByteArrayOutputStream writer = new ByteArrayOutputStream(); + getElementXML(element, writer); + return writer.toString(); + } + + public void getElementXML(E element, OutputStream os) throws Exception { + org.w3c.dom.Document xmlDocument = getBuilder().newDocument(); + // Propriétés du DOM + xmlDocument.setXmlVersion("1.0"); + xmlDocument.setXmlStandalone(true); + // Création de l'arborescence du DOM + Element racine = xmlDocument.createElement(element.getClass() + .getSimpleName()); + + saveXMLElement(xmlDocument, racine, element); + + xmlDocument.appendChild(racine); + DOMSource domSource = new DOMSource(xmlDocument); + StreamResult result = new StreamResult(os); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + transformer.transform(domSource, result); + } + + public String getProperty(Element xmlElement, String tagName) { + Element element = getElementByTagName(xmlElement, tagName); + if (element != null) { + return element.getFirstChild().getNodeValue(); + } else { + return null; + } + } + + public <T extends DataEntity> Set<T> loadCollection(String tagSetName, + String tagName, Class<T> clazz, Element xmlElement, + DataEntity parentData) throws Exception { + Set<T> entities = new HashSet<T>(); + + Element xmlCollection = getElementByTagName(xmlElement, tagSetName); + if (xmlCollection != null) { + BaseEntityFactory<T> elementFactory = getFactory(clazz); + + Set<Element> list = getElementsByTagName(xmlCollection, tagName); + for (Element element : list) { + T entity = elementFactory.loadXMLElement(element); + entity.setParentData(parentData); + entities.add(entity); + } + } + + return entities; + } + + public E loadXMLElement(Element xmlElement) throws Exception { + E element = createInstance(); + return element; + } + + public <T extends DataEntity> void saveCollection(Set<T> entities, + String tagSetName, String tagName, Class<T> clazz, + Document document, Element xmlElement) throws Exception { + if (entities != null && entities.size() > 0) { + Element xmlCollection = document.createElement(tagSetName); + BaseEntityFactory<T> elementFactory = getFactory(clazz); + for (T entity : entities) { + Element childElement = document.createElement(tagName); + // TODO + // if (entity instanceof LoggableElement) { + // elementFactory.saveXMLElementByReference + elementFactory.saveXMLElement(document, childElement, entity); + xmlCollection.appendChild(childElement); + } + xmlElement.appendChild(xmlCollection); + } + } + + public abstract void saveXMLElement(Document document, Element xmlElement, + E element) throws Exception; + + protected void setProperty(Document document, Element xmlElement, + String tagName, Object value) { + if (value != null) { + Element xmlProperty = document.createElement(tagName); + Text xmlDescriptionText = document.createTextNode(value.toString()); + xmlProperty.appendChild(xmlDescriptionText); + xmlElement.appendChild(xmlProperty); + } + } + +} Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/CodeFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/CodeFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/CodeFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -5,7 +5,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.Code; -public class CodeFactory<E extends Code> extends DataEntityFactory<Code> { +public class CodeFactory<E extends Code> extends BaseEntityFactory<Code> { public static final String KEY_LANGUAGE = "language"; public static final String KEY_CODE = "code"; Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ComponentFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ComponentFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ComponentFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -10,7 +10,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.Structure; public class ComponentFactory<E extends Component> extends - DataEntityFactory<Component> { + BaseEntityFactory<Component> { public static final String KEY_CONSTANTS = "constants"; public static final String KEY_CONSTANT_NODE = "constant"; Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -6,7 +6,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.Constant; public class ConstantFactory<E extends Constant> extends - DataEntityFactory<Constant> { + BaseEntityFactory<Constant> { public static final String KEY_NAME = "name"; public static final String KEY_TYPE = "type"; Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantValueFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantValueFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ConstantValueFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -7,7 +7,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.ConstantValue; public class ConstantValueFactory<E extends ConstantValue> extends - DataEntityFactory<ConstantValue> { + BaseEntityFactory<ConstantValue> { public static final String KEY_CONSTANT = "constant"; public static final String KEY_VALUE = "value"; Deleted: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/DataEntityFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/DataEntityFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/DataEntityFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -1,186 +0,0 @@ -package fr.cemagref.simexplorer.is.storage.factories; - -import java.io.ByteArrayOutputStream; -import java.io.OutputStream; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -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 fr.cemagref.simexplorer.is.storage.entities.data.DataEntity; - -public abstract class DataEntityFactory<E extends DataEntity> { - - private static DocumentBuilder documentBuilder = null; - - private static Map<String, DataEntityFactory<? extends DataEntity>> factories = new HashMap<String, DataEntityFactory<? extends DataEntity>>(); - - private final static String PACKAGE_DAO = "fr.cemagref.simexplorer.is.storage.factories"; - - public static synchronized DocumentBuilder getBuilder() throws Exception { - if (documentBuilder == null) { - DocumentBuilderFactory factory = DocumentBuilderFactory - .newInstance(); - documentBuilder = factory.newDocumentBuilder(); - return documentBuilder; - } - return documentBuilder; - } - - // @SuppressWarnings("unchecked") - public static <T extends DataEntity> DataEntityFactory<T> getFactory( - Class<T> entityClass) throws Exception { - // FIXME Raw types and unchecked casts - DataEntityFactory<T> result = (DataEntityFactory<T>) factories - .get(entityClass.getSimpleName()); - if (result == null) { - String elementFactoryClassName = PACKAGE_DAO + "." - + entityClass.getSimpleName() + "Factory"; - - Class<? extends DataEntityFactory<T>> factoryClass = (Class<? extends DataEntityFactory<T>>) Class - .forName(elementFactoryClassName).asSubclass( - DataEntityFactory.class); - - result = factoryClass.newInstance(); - factories.put(entityClass.getSimpleName(), result); - } - return result; - } - - public static DataEntityFactory<? extends DataEntity> getFactory( - String entityClassName) throws Exception { - Class<? extends DataEntity> entityClass = Class - .forName(entityClassName).asSubclass(DataEntity.class); - return getFactory(entityClass); - } - - public abstract E createInstance(); - - protected Element getElementByTagName(Element xmlElement, String tagName) { - Set<Element> elements = getElementsByTagName(xmlElement, tagName); - if (elements.size() > 0) { - return elements.iterator().next(); - } else { - return null; - } - } - - protected Set<Element> getElementsByTagName(Element xmlElement, - String tagName) { - Set<Element> elements = new HashSet<Element>(); - - NodeList nodes = xmlElement.getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { - Node node = nodes.item(i); - if (node instanceof Element - && tagName.equals(((Element) node).getTagName())) { - elements.add((Element) node); - } - } - return elements; - } - - public String getElementXML(E element) throws Exception { - ByteArrayOutputStream writer = new ByteArrayOutputStream(); - getElementXML(element, writer); - return writer.toString(); - } - - public void getElementXML(E element, OutputStream os) throws Exception { - org.w3c.dom.Document xmlDocument = getBuilder().newDocument(); - // Propriétés du DOM - xmlDocument.setXmlVersion("1.0"); - xmlDocument.setXmlStandalone(true); - // Création de l'arborescence du DOM - Element racine = xmlDocument.createElement(element.getClass() - .getSimpleName()); - - saveXMLElement(xmlDocument, racine, element); - - xmlDocument.appendChild(racine); - DOMSource domSource = new DOMSource(xmlDocument); - StreamResult result = new StreamResult(os); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer.transform(domSource, result); - } - - protected String getProperty(Element xmlElement, String tagName) { - Element element = getElementByTagName(xmlElement, tagName); - if (element != null) { - return element.getFirstChild().getNodeValue(); - } else { - return null; - } - } - - public <T extends DataEntity> Set<T> loadCollection(String tagSetName, - String tagName, Class<T> clazz, Element xmlElement, - DataEntity parentData) throws Exception { - Set<T> entities = new HashSet<T>(); - - Element xmlCollection = getElementByTagName(xmlElement, tagSetName); - if (xmlCollection != null) { - DataEntityFactory<T> elementFactory = getFactory(clazz); - - Set<Element> list = getElementsByTagName(xmlCollection, tagName); - for (Element element : list) { - T entity = elementFactory.loadXMLElement(element); - entity.setParentData(parentData); - entities.add(entity); - } - } - - return entities; - } - - public E loadXMLElement(Element xmlElement) throws Exception { - E element = createInstance(); - return element; - } - - public <T extends DataEntity> void saveCollection(Set<T> entities, - String tagSetName, String tagName, Class<T> clazz, - Document document, Element xmlElement) throws Exception { - if (entities != null && entities.size() > 0) { - Element xmlCollection = document.createElement(tagSetName); - DataEntityFactory<T> elementFactory = getFactory(clazz); - for (T entity : entities) { - Element childElement = document.createElement(tagName); - // TODO - // if (entity instanceof LoggableElement) { - // elementFactory.saveXMLElementByReference - elementFactory.saveXMLElement(document, childElement, entity); - xmlCollection.appendChild(childElement); - } - xmlElement.appendChild(xmlCollection); - } - } - - public abstract void saveXMLElement(Document document, Element xmlElement, - E element) throws Exception; - - protected void setProperty(Document document, Element xmlElement, - String tagName, Object value) { - if (value != null) { - Element xmlProperty = document.createElement(tagName); - Text xmlDescriptionText = document.createTextNode(value.toString()); - xmlProperty.appendChild(xmlDescriptionText); - xmlElement.appendChild(xmlProperty); - } - } - -} Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/LoggableElementFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -6,7 +6,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.LoggableElement; public abstract class LoggableElementFactory<E extends LoggableElement> extends - DataEntityFactory<E> implements DatabaseConstants { + BaseEntityFactory<E> implements DatabaseConstants { private static final String KEY_DESCRIPTION = "description"; Added: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java (rev 0) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/MetaDataEntityFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -0,0 +1,39 @@ +package fr.cemagref.simexplorer.is.storage.factories; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; + +public class MetaDataEntityFactory<E extends MetaDataEntity> extends + BaseEntityFactory<MetaDataEntity> { + + private static String KEY_UUID = "uuid"; + private static String KEY_VERSION = "version"; + + @Override + public MetaDataEntity createInstance() { + return new MetaDataEntity(); + } + + /* + * (non-Javadoc) + * + * @see fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory#loadXMLElement(org.w3c.dom.Element) + */ + @Override + public MetaDataEntity loadXMLElement(Element xmlElement) throws Exception { + MetaDataEntity entity = super.loadXMLElement(xmlElement); + entity.setUuid(getProperty(xmlElement, KEY_UUID)); + entity.setVersion(getProperty(xmlElement, KEY_VERSION)); + return entity; + } + + @Override + public void saveXMLElement(Document document, Element xmlElement, + MetaDataEntity element) throws Exception { + // TODO Auto-generated method stub + + } + +} Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/RepositoryFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/RepositoryFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/RepositoryFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -6,7 +6,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.Repository; public class RepositoryFactory<E extends Repository> extends - DataEntityFactory<Repository> { + BaseEntityFactory<Repository> { @Override public Repository createInstance() { Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ResultFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ResultFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/ResultFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -5,7 +5,7 @@ import fr.cemagref.simexplorer.is.storage.entities.data.Result; -public class ResultFactory<E extends Result> extends DataEntityFactory<Result> { +public class ResultFactory<E extends Result> extends BaseEntityFactory<Result> { @Override public Result createInstance() { Modified: trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/StructureFactory.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/StructureFactory.java 2007-12-17 10:58:32 UTC (rev 68) +++ trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/factories/StructureFactory.java 2007-12-17 10:59:58 UTC (rev 69) @@ -3,6 +3,6 @@ import fr.cemagref.simexplorer.is.storage.entities.data.Structure; public abstract class StructureFactory<E extends Structure> extends - DataEntityFactory<Structure> { + BaseEntityFactory<Structure> { }
participants (1)
-
glandais@users.labs.libre-entreprise.org