001: package org.mandarax.xkb.framework;
002:
003: /**
004: * Copyright (C) 1999-2004 Jens Dietrich (mailto:mandarax@jbdietrich.com)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: */
020:
021: import java.util.Map;
022:
023: import org.jdom.Element;
024: import org.mandarax.kernel.LogicFactory;
025: import org.mandarax.kernel.Predicate;
026: import org.mandarax.sql.SQLClauseSet;
027: import org.mandarax.sql.SQLPredicate;
028: import org.mandarax.xkb.XKBException;
029:
030: /**
031: * An adapter class for sql clause sets. New is the support for additional properties
032: * and the close connection property.
033: * @see org.mandarax.sql.SQLClauseSet
034: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
035: * @version 3.4 <7 March 05>
036: * @since 2.0
037: * @deprecated from v 3.4 - support for new features such as validation will not be added to XKB, please use ZKB instead
038: */
039:
040: public class XMLAdapter4SQLClauseSets2 extends AbstractXMLAdapter {
041: public static final String SQL_CLAUSE_SET = "sql_clause_set";
042: public static final String WHERE = "where_clause";
043: public static final String CACHE_TIMEOUT = "cache_timeout";
044: public static final String CLOSE_CONNECTION = "close_connection";
045:
046: /**
047: * Export a sql predicate, i.e., convert it to an element in the DOM.
048: * @param obj an object
049: * @param driver the generic driver
050: * @param cache a cache used in order to associate the same
051: * id with various occurences of the same object
052: * @exception an XKBException is thrown if export fails
053: */
054: public Element exportObject(Object obj, GenericDriver driver,
055: Map cache) throws XKBException {
056: check(obj, SQLClauseSet.class);
057: SQLClauseSet cs = (SQLClauseSet) obj;
058: Element e = new Element(SQL_CLAUSE_SET);
059: // add where and timeout
060: if (cs.getWhereClause() != null)
061: e.setAttribute(WHERE, cs.getWhereClause());
062: e.setAttribute(CLOSE_CONNECTION,
063: cs.isCloseConnection() ? "true" : "false");
064: if (cs.getCacheTimeout() != SQLClauseSet.NO_CACHE)
065: e.setAttribute(CACHE_TIMEOUT, String.valueOf(cs
066: .getCacheTimeout()));
067: // add predicate
068: Predicate p = cs.getPredicate();
069: Element ep = exportObject(cs.getPredicate(),
070: GenericDriver.SQL_PREDICATE, driver, cache);
071: e.addContent(ep);
072: addProperties(e, cs);
073: return e;
074: }
075:
076: /**
077: * Build an object from an XML element.
078: * @param e an element
079: * @param driver the generic driver
080: * @param cache a cache used to identify objects that have the same id
081: * @param lfactory the logic factory used to create objects
082: * @exception an XKBException is thrown if export fails
083: */
084: public Object importObject(Element e, GenericDriver driver,
085: Map cache, LogicFactory lfactory) throws XKBException {
086: // get where clause
087: String where = e.getAttributeValue(WHERE);
088: // get timeout
089: long timeout = SQLClauseSet.NO_CACHE;
090: if (e.getAttribute(CACHE_TIMEOUT) != null) {
091: try {
092: timeout = Long.parseLong(e
093: .getAttributeValue(CACHE_TIMEOUT));
094: } catch (NumberFormatException x) {
095: throw new XKBException("Cannot read timeout");
096: }
097: }
098: // get predicate
099: SQLPredicate p = (SQLPredicate) importChild(e,
100: GenericDriver.SQL_PREDICATE, driver, cache, lfactory);
101:
102: // build SQL clause set
103: SQLClauseSet cs = new SQLClauseSet();
104: cs.setSQLPredicate(p);
105: cs.setWhereClause(where);
106: cs.setCacheTimeout(timeout);
107: cs.setCloseConnection("true".equals(e
108: .getAttributeValue(CLOSE_CONNECTION)));
109: loadProperties(e, cs);
110: return cs;
111:
112: }
113:
114: /**
115: * Get the name of the associated tag (element).
116: * @return a string
117: */
118: public String getTagName() {
119: return SQL_CLAUSE_SET;
120: }
121:
122: /**
123: * Get the kind of object the adapter can export/import.
124: * @return a string
125: */
126: public String getKindOfObject() {
127: return GenericDriver.SQL_CLAUSE_SET;
128: }
129: }
|