001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.uml.core.reverseengineering.reframework;
043:
044: import org.dom4j.Node;
045:
046: import org.netbeans.modules.uml.core.reverseengineering.reframework.parsingframework.ITokenDescriptor;
047: import org.netbeans.modules.uml.core.support.umlsupport.XMLManip;
048:
049: /**
050: */
051: public class DependencyEvent extends ParserData implements
052: IDependencyEvent {
053: /**
054: * Retrieves the supplier of the dependency. The supplier will be
055: * specified using the UML fully scoped name of the supplier model element.
056: * @param pVal [out] The name of the supplier.
057: */
058: public String getSupplier() {
059: return XMLManip.getAttributeValue(getEventData(), "supplier");
060: }
061:
062: /**
063: * Retrieves the client of the dependency. The client will be specified
064: * using the UML fully scoped name of the supplier model element.
065: * @param pVal [out] The name of the client.
066: */
067: public String getClient() {
068: return XMLManip.getAttributeValue(getEventData(), "client");
069: }
070:
071: /**
072: * Determines if the dependency is a package dependency or a class dependency.
073: *
074: * @param pVal [out] True if the dependency is a class dependency.
075: */
076: public boolean getIsClassDependency() {
077: ITokenDescriptor desc = getTokenDescriptor("Class Dependency");
078: if (desc instanceof IXMLTokenDescriptor) {
079: Node node = ((IXMLTokenDescriptor) desc)
080: .getTokenDescriptorNode();
081: if (node != null)
082: return XMLManip.getAttributeBooleanValue(node, "value");
083: }
084: return false;
085: }
086:
087: public boolean isStaticDependency() {
088: ITokenDescriptor desc = getTokenDescriptor("Static Dependency");
089: if (desc instanceof IXMLTokenDescriptor) {
090: Node node = ((IXMLTokenDescriptor) desc)
091: .getTokenDescriptorNode();
092: if (node != null)
093: return XMLManip.getAttributeBooleanValue(node, "value");
094: }
095: return false;
096: }
097:
098: /**
099: * Retrieves the package name that is the reciever of the dependency. If the dependency is
100: * a class dependency then the package name is the package that contains the class.
101: *
102: * @param pVal [out] The name of the package.
103: */
104: public String getSupplierPackage() {
105: String ret = "";
106: String supplierName = getSupplier();
107: boolean isClassDep = getIsClassDependency();
108: if (isClassDep) {
109: int pos = supplierName.lastIndexOf("::");
110: // If the "::" seperator was not found in the supplier name then the supplier
111: // name is the name of a class. Therefore return an empty string.
112: if (pos != -1)
113: ret = supplierName.substring(0, pos);
114: } else {
115: // Since the dependency event does not represent a class dependency
116: // the package name is the supplier name.
117: ret = supplierName;
118: }
119: return ret;
120: }
121:
122: /**
123: * Retrieves the name of the class that is the reciever of the dependency. The class name
124: * property is only valid when the dependeny is a class dependency.
125: *
126: * @param pVal [out] The name of the class.
127: */
128: public String getSupplierClassName() {
129: String ret = null;
130: String supplierName = getSupplier();
131: boolean isClassDep = getIsClassDependency();
132:
133: // I can only retrieve the class name if the dependency event is a class dependency.
134: // Therefore, If I do not have a class dependency return null
135: if (isClassDep) {
136: int pos = supplierName.lastIndexOf("::");
137: ret = pos != -1 ? supplierName.substring(pos + 2)
138: : supplierName;
139: }
140:
141: return ret;
142: }
143:
144: /**
145: * Test if the specified class name is the same as the supplier of the dependency.
146: * This method is only valid if the dependency is a class dependency.
147: *
148: * @param className [in] The name of the class to test.
149: * @param pVal [out] True if the class is the same class.
150: */
151: public boolean isSameClass(String className) {
152: boolean isClassDep = getIsClassDependency();
153: if (isClassDep) {
154: if (className != null && className.length() > 0) {
155: // First is the simple test. Test if the name that was wanted is the same
156: // as the supplier name.
157: if (className.equals(getSupplier()))
158: return true;
159:
160: // Now check if the wanted name is the same as the supplier class name.
161: String supplierClass = getSupplierClassName();
162: if (className.equals(supplierClass))
163: return true;
164: }
165: } else
166: throw new IllegalStateException("DependencyEvent is not "
167: + "a class dependency");
168: return false;
169: }
170: }
|