001    // Copyright 2005-2006 Ferdinand Prantl <prantl@users.sourceforge.net>
002    // Copyright 2001-2004 The Apache Software Foundation
003    // All rights reserved.
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    // See http://ant-eclipse.sourceforge.net for the most recent version
018    // and more information.
019    
020    package prantl.ant.eclipse;
021    
022    import org.apache.tools.ant.BuildException;
023    import org.apache.tools.ant.types.Reference;
024    
025    /**
026     * Describes an element <tt>classpathentry</tt> under the element classpath,
027     * specifically the kind "src". Presets the value "" for the attribute <tt>path</tt> to
028     * include all sources in the base directory by default. An instance of this element will
029     * be created automatically with the default settings if none present.
030     * 
031     * @since Ant-Eclipse 1.0
032     * @author Ferdinand Prantl &lt;prantl@users.sourceforge.net&gt;
033     */
034    public class ClassPathEntrySourceElement extends ClassPathEntryPathElement {
035    
036        private String excluding = null;
037    
038        private String output = null;
039    
040        private boolean explicit = false;
041    
042        /**
043         * Creates a new instance of the classpathentry-src element.
044         * 
045         * @since Ant-Eclipse 1.0
046         */
047        public ClassPathEntrySourceElement() {
048            super.setPath("");
049        }
050    
051        /**
052         * Returns a list of project-relative paths to be excluded from the source path
053         * delimited by vertical lines ('|') or <tt>null</tt> if it has not been set, which
054         * means do not exlude anything.
055         * 
056         * @return A list of project-relative paths delimited by vertical lines ('|') to
057         *         exclude or <tt>null</tt> if not having been set.
058         */
059        public String getExcluding() {
060            return excluding;
061        }
062    
063        /**
064         * Sets the list of project-relative paths to be excluded from the source path
065         * delimited by vertical lines ('|').
066         * 
067         * @param value
068         *        The list of project-relative paths to be excluded from the sourcepath.
069         * @since Ant-Eclipse 1.0
070         */
071        public void setExcluding(String value) {
072            excluding = value;
073        }
074    
075        /**
076         * Returns a source-specific output directory to compile the Java classes there or
077         * <tt>null</tt> if it has not been set, which means to use the common one.
078         * 
079         * @return A source-specific output directory or <tt>null</tt> if not having been
080         *         set.
081         */
082        public String getOutput() {
083            return output;
084        }
085    
086        /**
087         * Sets the source-specific output directory to compile the Java classes there.
088         * 
089         * @param value
090         *        The source-specific output directory.
091         * @since Ant-Eclipse 1.0
092         */
093        public void setOutput(String value) {
094            output = value;
095        }
096    
097        /**
098         * Sets the path of the classpathentry element.
099         * 
100         * @param value
101         *        A kind-of-element specific path value.
102         * @throws BuildException
103         *         If an attribute <tt>pathref</tt> has been set.
104         * @since Ant-Eclipse 1.0
105         */
106        public void setPath(String value) {
107            explicit = true;
108            super.setPath(value);
109        }
110    
111        /**
112         * Sets the reference to a path of the classpathentry element. Additionally resets the
113         * eventually present attribute <tt>path</tt> if it was set to the current directory
114         * by default.
115         * 
116         * @param value
117         *        A reference to the kind-of-element specific path value.
118         * @throws BuildException
119         *         If an attribute <tt>pathref</tt> has been set.
120         * @since Ant-Eclipse 1.0
121         */
122        public void setPathRef(Reference value) {
123            if (!explicit)
124                setPath(null);
125            super.setPathRef(value);
126        }
127    
128    }