001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. 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 org.apache.tools.ant;
020:
021: /**
022: * Base class for components of a project, including tasks and data types.
023: * Provides common facilities.
024: *
025: */
026: public abstract class ProjectComponent implements Cloneable {
027:
028: // CheckStyle:VisibilityModifier OFF - bc
029: /**
030: * Project object of this component.
031: * @deprecated since 1.6.x.
032: * You should not be directly accessing this variable directly.
033: * You should access project object via the getProject()
034: * or setProject() accessor/mutators.
035: */
036: protected Project project;
037:
038: /**
039: * Location within the build file of this task definition.
040: * @deprecated since 1.6.x.
041: * You should not be accessing this variable directly.
042: * Please use the {@link #getLocation()} method.
043: */
044: protected Location location = Location.UNKNOWN_LOCATION;
045:
046: /**
047: * Description of this component, if any.
048: * @deprecated since 1.6.x.
049: * You should not be accessing this variable directly.
050: */
051: protected String description;
052:
053: // CheckStyle:VisibilityModifier ON
054:
055: /** Sole constructor. */
056: public ProjectComponent() {
057: }
058:
059: /**
060: * Sets the project object of this component. This method is used by
061: * Project when a component is added to it so that the component has
062: * access to the functions of the project. It should not be used
063: * for any other purpose.
064: *
065: * @param project Project in whose scope this component belongs.
066: * Must not be <code>null</code>.
067: */
068: public void setProject(Project project) {
069: this .project = project;
070: }
071:
072: /**
073: * Returns the project to which this component belongs.
074: *
075: * @return the components's project.
076: */
077: public Project getProject() {
078: return project;
079: }
080:
081: /**
082: * Returns the file/location where this task was defined.
083: *
084: * @return the file/location where this task was defined.
085: * Should not return <code>null</code>. Location.UNKNOWN_LOCATION
086: * is used for unknown locations.
087: *
088: * @see Location#UNKNOWN_LOCATION
089: */
090: public Location getLocation() {
091: return location;
092: }
093:
094: /**
095: * Sets the file/location where this task was defined.
096: *
097: * @param location The file/location where this task was defined.
098: * Should not be <code>null</code>--use
099: * Location.UNKNOWN_LOCATION if the location isn't known.
100: *
101: * @see Location#UNKNOWN_LOCATION
102: */
103: public void setLocation(Location location) {
104: this .location = location;
105: }
106:
107: /**
108: * Sets a description of the current action. This may be used for logging
109: * purposes.
110: *
111: * @param desc Description of the current action.
112: * May be <code>null</code>, indicating that no description is
113: * available.
114: *
115: */
116: public void setDescription(String desc) {
117: description = desc;
118: }
119:
120: /**
121: * Returns the description of the current action.
122: *
123: * @return the description of the current action, or <code>null</code> if
124: * no description is available.
125: */
126: public String getDescription() {
127: return description;
128: }
129:
130: /**
131: * Logs a message with the default (INFO) priority.
132: *
133: * @param msg The message to be logged. Should not be <code>null</code>.
134: */
135: public void log(String msg) {
136: log(msg, Project.MSG_INFO);
137: }
138:
139: /**
140: * Logs a message with the given priority.
141: *
142: * @param msg The message to be logged. Should not be <code>null</code>.
143: * @param msgLevel the message priority at which this message is
144: * to be logged.
145: */
146: public void log(String msg, int msgLevel) {
147: if (getProject() != null) {
148: getProject().log(msg, msgLevel);
149: } else {
150: // 'reasonable' default, if the component is used without
151: // a Project ( for example as a standalone Bean ).
152: // Most ant components can be used this way.
153: if (msgLevel <= Project.MSG_INFO) {
154: System.err.println(msg);
155: }
156: }
157: }
158:
159: /**
160: * @since Ant 1.7
161: * @return a shallow copy of this projectcomponent.
162: * @throws CloneNotSupportedException does not happen,
163: * but is declared to allow subclasses to do so.
164: */
165: public Object clone() throws CloneNotSupportedException {
166: ProjectComponent pc = (ProjectComponent) super.clone();
167: pc.setLocation(getLocation());
168: pc.setProject(getProject());
169: return pc;
170: }
171: }
|