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.
032: * @see org.mandarax.sql.SQLClauseSet
033: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
034: * @version 3.4 <7 March 05>
035: * @since 1.6
036: * @deprecated from v 3.4 - support for new features such as validation will not be added to XKB, please use ZKB instead
037: */
038:
039: public class XMLAdapter4SQLClauseSets extends AbstractXMLAdapter {
040: public static final String SQL_CLAUSE_SET = "sql_clause_set";
041: public static final String WHERE = "where_clause";
042: public static final String CACHE_TIMEOUT = "cache_timeout";
043:
044: /**
045: * Export a sql predicate, i.e., convert it to an element in the DOM.
046: * @param obj an object
047: * @param driver the generic driver
048: * @param cache a cache used in order to associate the same
049: * id with various occurences of the same object
050: * @exception an XKBException is thrown if export fails
051: */
052: public Element exportObject(Object obj, GenericDriver driver,
053: Map cache) throws XKBException {
054: check(obj, SQLClauseSet.class);
055: SQLClauseSet cs = (SQLClauseSet) obj;
056: Element e = new Element(SQL_CLAUSE_SET);
057: // add where and timeout
058: if (cs.getWhereClause() != null)
059: e.setAttribute(WHERE, cs.getWhereClause());
060: if (cs.getCacheTimeout() != SQLClauseSet.NO_CACHE)
061: e.setAttribute(CACHE_TIMEOUT, String.valueOf(cs
062: .getCacheTimeout()));
063: // add predicate
064: Predicate p = cs.getPredicate();
065: Element ep = exportObject(cs.getPredicate(),
066: GenericDriver.SQL_PREDICATE, driver, cache);
067: e.addContent(ep);
068: return e;
069: }
070:
071: /**
072: * Build an object from an XML element.
073: * @param e an element
074: * @param driver the generic driver
075: * @param cache a cache used to identify objects that have the same id
076: * @param lfactory the logic factory used to create objects
077: * @exception an XKBException is thrown if export fails
078: */
079: public Object importObject(Element e, GenericDriver driver,
080: Map cache, LogicFactory lfactory) throws XKBException {
081: // get where clause
082: String where = e.getAttributeValue(WHERE);
083: // get timeout
084: long timeout = SQLClauseSet.NO_CACHE;
085: if (e.getAttribute(CACHE_TIMEOUT) != null) {
086: try {
087: timeout = Long.parseLong(e
088: .getAttributeValue(CACHE_TIMEOUT));
089: } catch (NumberFormatException x) {
090: throw new XKBException("Cannot read timeout");
091: }
092: }
093: // get predicate
094: SQLPredicate p = (SQLPredicate) importChild(e,
095: GenericDriver.SQL_PREDICATE, driver, cache, lfactory);
096:
097: // build SQL clause set
098: SQLClauseSet cs = new SQLClauseSet();
099: cs.setSQLPredicate(p);
100: cs.setWhereClause(where);
101: cs.setCacheTimeout(timeout);
102: return cs;
103:
104: }
105:
106: /**
107: * Get the name of the associated tag (element).
108: * @return a string
109: */
110: public String getTagName() {
111: return SQL_CLAUSE_SET;
112: }
113:
114: /**
115: * Get the kind of object the adapter can export/import.
116: * @return a string
117: */
118: public String getKindOfObject() {
119: return GenericDriver.SQL_CLAUSE_SET;
120: }
121: }
|