/********************************************************************** * Copyright (c) 2005-2009 ant4eclipse project team. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nils Hartmann, Daniel Kasmeroglu, Gerd Wuetherich **********************************************************************/ package org.ant4eclipse.lib.core; /** * <p> * Represents a <b>qualified</b> class name. * </p> * * @author Nils Hartmann (nils@nilshartmann.net) */ public final class ClassName { /** the package name */ private String _packageName; /** the class name */ private String _className; private String _qualifiedName; /** * <p> * Creates a new instance of type {@link ClassName}. * </p> * * @param packageName * the package name. * @param className * the class name. */ private ClassName(String qualifiedClassName) { this._qualifiedName = qualifiedClassName; this._packageName = ""; this._className = qualifiedClassName; int v = qualifiedClassName.lastIndexOf('.'); if (v != -1) { this._packageName = qualifiedClassName.substring(0, v); this._className = qualifiedClassName.substring(v + 1); } } /** * <p> * Returns the qualified name of this class as a java type identifier (e.g. <code>foo.bar.Bazz</code>). * </p> * * @return the qualified class name. Neither <code>null</code> nor empty. */ public String getQualifiedClassName() { return this._qualifiedName; } /** * <p> * Returns the name of this class without package (e.g. <code>Bazz</code>). * </p> * * @return Name of this class. Never null. */ public String getClassName() { return this._className; } /** * <p> * Returns the package name of this class (e.g. <code>foo.bar</code>). * </p> * * @return Package name of this class. Never null. */ public String getPackageName() { return this._packageName; } /** * <p> * Returns this package as a directory name (e.g. <code>foo/bar</code>). * </p> * * @return this package as a directory name. Never null. */ public String getPackageAsDirectoryName() { return getPackageName().replace('.', '/'); } /** * <p> * Returns this class name as a classname including the package directory structure and the ".class" postfix. (e.g. * <code>foo/bar/Bazz.class</code>. * </p> * * @return this class name as a file name */ public String asClassFileName() { String fileName = getQualifiedClassName().replace('.', '/'); return fileName + ".class"; } /** * <p> * Returns this class name as a classname including the package directory structure and the ".java" ending (e.g. * <code>foo/bar/Bazz.java</code> * </p> * * @return this class name as a file name */ public String asSourceFileName() { String fileName = getQualifiedClassName().replace('.', '/'); return fileName + ".java"; } /** * {@inheritDoc} */ @Override public String toString() { return this._qualifiedName; } /** * {@inheritDoc} */ @Override public int hashCode() { return this._qualifiedName.hashCode(); } /** * {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } ClassName other = (ClassName) obj; return this._qualifiedName.equals(other._qualifiedName); } /** * <p> * Returns a new instance of type {@link ClassName} representing the given qualified class name. * </p> * * @todo [10-Dec-2009:KASI] Personally I would say that the constructor should be preferred instead of this static * method in order to get rid of this method. * * @param qualifiedClassName * The qualified class name * @return a ClassName instance representing this qualified class name */ public static final ClassName fromQualifiedClassName(String qualifiedClassName) { Assure.nonEmpty("qualifiedClassName", qualifiedClassName); return new ClassName(qualifiedClassName); } } /* ENDCLASS */