001: package net.sourceforge.squirrel_sql.client.db;
002:
003: /*
004: * Copyright (C) 2002-2006 Colin Bell
005: * colbell@users.sourceforge.net
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library 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 GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: */
021: import java.beans.PropertyChangeListener;
022: import java.io.Serializable;
023:
024: import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
025: import net.sourceforge.squirrel_sql.fw.persist.ValidationException;
026: import net.sourceforge.squirrel_sql.fw.util.PropertyChangeReporter;
027: import net.sourceforge.squirrel_sql.fw.util.StringManager;
028: import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
029:
030: /**
031: * Objects of this class hold a collection of <TT>ISQLAlias</TT> objects.
032: *
033: * @author <A HREF="mailto:colbell@users.sourceforge.net">Colin Bell</A>
034: */
035: public class AliasGroup implements Cloneable, Serializable,
036: Comparable<AliasGroup> {
037: private static final long serialVersionUID = 1L;
038:
039: /** Internationalized strings for this class. */
040: private static final StringManager s_stringMgr = StringManagerFactory
041: .getStringManager(AliasGroup.class);
042:
043: /**
044: * JavaBean property names for this class.
045: */
046: public interface IPropertyNames {
047: String ID = "identifier";
048: String NAME = "name";
049: }
050:
051: /** The <CODE>IIdentifier</CODE> that uniquely identifies this object. */
052: private IIdentifier _id;
053:
054: /** Name that describes this object. */
055: private String _name;
056:
057: /** Object to handle property change events. */
058: private transient PropertyChangeReporter _propChgReporter;
059:
060: /**
061: * Default ctor.
062: */
063: public AliasGroup() {
064: super ();
065: _name = "";
066: }
067:
068: /**
069: * Returns <CODE>true</CODE> if this object is valid.<P>
070: * Implementation for <CODE>IPersistable</CODE>.
071: */
072: public synchronized boolean isValid() {
073: return _name.length() > 0;
074: }
075:
076: /**
077: * Returns <TT>true</TT> if this objects is equal to the passed one. Two
078: * <TT>AliasGroup</TT> objects are considered equal if they have the same
079: * identifier.
080: */
081: public boolean equals(Object rhs) {
082: boolean rc = false;
083: if (rhs != null && rhs.getClass().equals(getClass())) {
084: rc = ((AliasGroup) rhs).getIdentifier().equals(
085: getIdentifier());
086: }
087: return rc;
088: }
089:
090: /**
091: * Return a clone of this object.
092: */
093: public Object clone() {
094: try {
095: final AliasGroup obj = (AliasGroup) super .clone();
096: obj._propChgReporter = null;
097: return obj;
098: } catch (CloneNotSupportedException ex) {
099: throw new InternalError(ex.getMessage()); // Impossible.
100: }
101: }
102:
103: /**
104: * Returns a hash code value for this object.
105: */
106: public synchronized int hashCode() {
107: return getIdentifier().hashCode();
108: }
109:
110: /**
111: * Compare this <TT>SQLAlias</TT> to another object. If the passed object
112: * is a <TT>AliasGroup</TT>, then the <TT>getName()</TT> functions of the two
113: * objects are used to compare them. Otherwise, it throws a ClassCastException
114: */
115: public int compareTo(AliasGroup rhs) {
116: return _name.compareTo((rhs).getName());
117: }
118:
119: /**
120: * Retrieve the unique identifier for this object.
121: *
122: * @return Unique ID.
123: */
124: public IIdentifier getIdentifier() {
125: return _id;
126: }
127:
128: public void setIdentifier(IIdentifier id) {
129: _id = id;
130: }
131:
132: /**
133: * Retrieve the name that describes this object.
134: *
135: * @return This objects name.
136: */
137: public String getName() {
138: return _name;
139: }
140:
141: /**
142: * Set the name that describes this object.
143: *
144: * @param value This objects new name.
145: */
146: public void setName(String value) throws ValidationException {
147: String data = getString(value);
148: if (data.length() == 0) {
149: throw new ValidationException(s_stringMgr
150: .getString("AliasGroup.error.blankname"));
151: }
152: if (!_name.equals(data)) {
153: final String oldValue = _name;
154: _name = data;
155: getPropertyChangeReporter().firePropertyChange(
156: IPropertyNames.NAME, oldValue, _name);
157: }
158: }
159:
160: public void addPropertyChangeListener(
161: PropertyChangeListener listener) {
162: getPropertyChangeReporter().addPropertyChangeListener(listener);
163: }
164:
165: public void removePropertyChangeListener(
166: PropertyChangeListener listener) {
167: getPropertyChangeReporter().removePropertyChangeListener(
168: listener);
169: }
170:
171: private synchronized PropertyChangeReporter getPropertyChangeReporter() {
172: if (_propChgReporter == null) {
173: _propChgReporter = new PropertyChangeReporter(this );
174: }
175: return _propChgReporter;
176: }
177:
178: private String getString(String data) {
179: return data != null ? data.trim() : "";
180: }
181: }
|