001: /*
002:
003: Copyright 2004, Martian Software, Inc.
004:
005: Licensed under the Apache License, Version 2.0 (the "License");
006: you may not use this file except in compliance with the License.
007: You may obtain a copy of the License at
008:
009: http://www.apache.org/licenses/LICENSE-2.0
010:
011: Unless required by applicable law or agreed to in writing, software
012: distributed under the License is distributed on an "AS IS" BASIS,
013: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: See the License for the specific language governing permissions and
015: limitations under the License.
016:
017: */
018:
019: package com.martiansoftware.nailgun;
020:
021: /**
022: * Provides a means to map memorable, short names to classes in order
023: * to make the issuing of commands more convenient. For example, an
024: * Alias can map the "<code>mycommand</code>" command to the <code>com.yourdomain.yourpackage.YourClass</code>
025: * class. Obviously, it's a lot easier to type "<code>ng mycommand</code>" than the fully
026: * qualified class name.
027: *
028: * @author <a href="http://www.martiansoftware.com/contact.html">Marty Lamb</a>
029: */
030: public class Alias implements Comparable {
031:
032: /**
033: * The alias name
034: */
035: private String name;
036:
037: /**
038: * The alias description (may be used to provide help to users)
039: */
040: private String description;
041:
042: /**
043: * The class providing a <code>main()</code> or <code>nailMain()</code> method
044: */
045: private Class clazz;
046:
047: /**
048: * Creates a new Alias with the specified properties.
049: * @param name the alias name (short command)
050: * @param description a description of the command
051: * @param clazz the class implementing the command
052: */
053: public Alias(String name, String description, Class clazz) {
054: if (name == null)
055: throw (new IllegalArgumentException(
056: "Alias must have a name."));
057: this .name = name.trim();
058: if (this .name.length() == 0)
059: throw (new IllegalArgumentException(
060: "Alias must have a name."));
061:
062: if (clazz == null)
063: throw (new IllegalArgumentException(
064: "Alias must have an associated class."));
065: this .description = description;
066: this .clazz = clazz;
067: }
068:
069: /**
070: * Returns the <code>Class</code> object providing a static <code>main()</code> or <code>nailMain()</code> method
071: * for this command.
072: * @return the <code>Class</code> object providing a static <code>main()</code> or <code>nailMain()</code> method
073: * for this command.
074: */
075: public Class getAliasedClass() {
076: return (clazz);
077: }
078:
079: /**
080: * Returns the name of the aliased command
081: * @return the name of the aliased command
082: */
083: public String getName() {
084: return (name);
085: }
086:
087: /**
088: * Returns a description for the aliased command
089: * @return a description for the aliased command
090: */
091: public String getDescription() {
092: return (description);
093: }
094:
095: /**
096: * @see Object#hashCode()
097: */
098: public int hashCode() {
099: return (name.hashCode());
100: }
101:
102: /**
103: * Checks whether two Aliases have the same name. Does <b>not</b>
104: * compare any other fields.
105: * @param o the other Alias to check
106: * @return true if the specified Alias has the same name as this Alias.
107: */
108: public boolean equals(Object o) {
109: return (compareTo(o) == 0);
110: }
111:
112: /**
113: * Compares Alias <b>names</b> - no other fields are compared.
114: * @see Comparable#compareTo(Object)
115: */
116: public int compareTo(Object o) {
117: return (name.compareTo(((Alias) o).getName()));
118: }
119: }
|