001: /*
002:
003: Derby - Class org.apache.derby.impl.services.monitor.ProtocolKey
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.services.monitor;
023:
024: import org.apache.derby.iapi.error.StandardException;
025: import org.apache.derby.iapi.services.monitor.Monitor;
026:
027: /**
028: A class that represents a key for a module search.
029: */
030:
031: class ProtocolKey {
032:
033: /*
034: ** Fields.
035: */
036:
037: /**
038: The class of the factory
039: */
040: protected Class factoryInterface;
041:
042: /**
043: name of module, can be null
044: */
045: protected String identifier;
046:
047: /*
048: ** Constructor
049: */
050:
051: protected ProtocolKey(Class factoryInterface, String identifier) {
052: super ();
053: this .factoryInterface = factoryInterface;
054: this .identifier = identifier;
055: }
056:
057: static ProtocolKey create(String className, String identifier)
058: throws StandardException {
059:
060: Throwable t;
061: try {
062: return new ProtocolKey(Class.forName(className), identifier);
063:
064: } catch (ClassNotFoundException cnfe) {
065: t = cnfe;
066: } catch (IllegalArgumentException iae) {
067: t = iae;
068: }
069:
070: throw Monitor.exceptionStartingModule(t);
071: }
072:
073: /*
074: ** Methods required to use this key
075: */
076:
077: protected Class getFactoryInterface() {
078: return factoryInterface;
079: }
080:
081: protected String getIdentifier() {
082: return identifier;
083: }
084:
085: /*
086: **
087: */
088:
089: public int hashCode() {
090: return factoryInterface.hashCode()
091: + (identifier == null ? 0 : identifier.hashCode());
092: }
093:
094: public boolean equals(Object other) {
095: if (other instanceof ProtocolKey) {
096: ProtocolKey otherKey = (ProtocolKey) other;
097:
098: if (factoryInterface != otherKey.factoryInterface)
099: return false;
100:
101: if (identifier == null) {
102: if (otherKey.identifier != null)
103: return false;
104: } else {
105:
106: if (otherKey.identifier == null)
107: return false;
108:
109: if (!identifier.equals(otherKey.identifier))
110: return false;
111: }
112:
113: return true;
114: }
115: return false;
116: }
117:
118: public String toString() {
119:
120: return factoryInterface.getName() + " (" + identifier + ")";
121: }
122: }
|