001: package net.sourceforge.squirrel_sql.plugins.favs;
002:
003: /*
004: * Copyright (C) 2001 Colin Bell
005: * colbell@users.sourceforge.net
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * as published by the Free Software Foundation; either version 2
010: * of the License, or any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with this program; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
020: */
021: import java.io.Serializable;
022:
023: import net.sourceforge.squirrel_sql.client.util.IdentifierFactory;
024: import net.sourceforge.squirrel_sql.fw.id.IHasIdentifier;
025: import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
026: import net.sourceforge.squirrel_sql.fw.persist.IValidatable;
027:
028: /**
029: * This class represents a query that can be saved and restored.
030: */
031: final class Query implements Cloneable, Serializable, IHasIdentifier,
032: IValidatable {
033:
034: private static final long serialVersionUID = 1L;
035:
036: private static final String EMPTY_STRING = "";
037:
038: public interface IPropertyNames {
039: String DESCRIPTION = "Description";
040: String ID = "Identifier";
041: String NAME = "Name";
042: String SQL = "Sql";
043: }
044:
045: /** The <CODE>IIdentifier</CODE> that uniquely identifies this object. */
046: private IIdentifier _id;
047:
048: /** Name. */
049: private String _name;
050:
051: /** Description for this query. */
052: @SuppressWarnings("unused")
053: private String _description;
054:
055: /** SQL. */
056: private String _sql;
057:
058: /**
059: * Default ctor.
060: */
061: public Query() {
062: this (IdentifierFactory.getInstance().createIdentifier(),
063: EMPTY_STRING, EMPTY_STRING, EMPTY_STRING);
064: }
065:
066: /**
067: * Ctor specifying this objects attributes.
068: *
069: * @param id Uniquely identifies this object.
070: * @param name Name of thi query.
071: * @param description The description of this alias.
072: * @param sql The SQL to execute.
073: */
074: public Query(IIdentifier id, String name, String description,
075: String sql) {
076: super ();
077: _id = id != null ? id : IdentifierFactory.getInstance()
078: .createIdentifier();
079: _name = getString(name);
080: _description = getString(description);
081: _sql = getString(sql);
082: }
083:
084: /**
085: * Two <CODE>Query</CODE> objects are considered equal if their ID's are
086: * identical unless their ID's are
087: *
088: * @return <CODE>true</CODE> if this object is equal to the passed one.
089: */
090: public boolean equals(Object rhs) {
091: boolean rc = false;
092: if (rhs != null && rhs.getClass().equals(getClass())) {
093: rc = ((Query) rhs).getIdentifier().equals(getIdentifier());
094: }
095: return rc;
096: }
097:
098: /**
099: * Return a copy of this object.
100: */
101: public Object clone() {
102: try {
103: return super .clone();
104: } catch (CloneNotSupportedException ex) {
105: throw new InternalError(ex.getMessage()); // Impossible.
106: }
107: }
108:
109: public synchronized int hashCode() {
110: return getIdentifier().hashCode();
111: }
112:
113: public String toString() {
114: return getName();
115: }
116:
117: /**
118: * Returns <CODE>true</CODE> if this object is valid.<P>
119: * Implementation for <CODE>IPersistable</CODE>.
120: */
121: public synchronized boolean isValid() {
122: return _name.trim().length() > 0 && _sql.trim().length() > 0;
123: }
124:
125: public IIdentifier getIdentifier() {
126: return _id;
127: }
128:
129: public String getName() {
130: return _name;
131: }
132:
133: private String getString(String data) {
134: return data != null ? data.trim() : "";
135: }
136: }
|