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 java.util.HashSet;
023
024 import org.apache.tools.ant.BuildException;
025
026 /**
027 * Configures the component preferences file
028 * <tt>.settings/org.eclipse.core.resources.prefs</tt> on the high level using
029 * attributes for the typical constellations of variable values.
030 *
031 * @since Ant-Eclipse 1.0
032 * @author Ferdinand Prantl <prantl@users.sourceforge.net>
033 */
034 public class OrgEclipseCoreResourcesPreferencesElement extends PreferencesElement {
035
036 private static final String ELEMENT = "resources";
037
038 private static final String ENCODING_ATTRIBUTE = "encoding";
039
040 private static final String ENCODING_NAME = "encoding/<project>";
041
042 private static final HashSet ENCODING_VALUES = new HashSet();
043
044 /**
045 * Returns the name of the package these preferences belong to.
046 *
047 * @return The name of the package these preferences belong to.
048 */
049 static final String getPackageName() {
050 return "org.eclipse.core.resources";
051 }
052
053 /**
054 * Creates a new instance of the element for the file with preferences for
055 * org.eclipse.core.resources.
056 *
057 * @param parent
058 * The parent settings element of this preferences one.
059 * @since Ant-Eclipse 1.0
060 */
061 public OrgEclipseCoreResourcesPreferencesElement(SettingsElement parent) {
062 super(parent);
063 internalSetName(getPackageName());
064 ENCODING_VALUES.add("ISO-8859-1");
065 ENCODING_VALUES.add("US-ASCII");
066 ENCODING_VALUES.add("UTF-16");
067 ENCODING_VALUES.add("UTF-16BE");
068 ENCODING_VALUES.add("UTF-16LE");
069 ENCODING_VALUES.add("UTF-8");
070 }
071
072 /**
073 * Returns the source file encoding for the project (default is inherited from the
074 * workspace settings and not set here in the file).
075 *
076 * @return The source file encoding for the project (default is inherited from the
077 * workspace settings and not set here in the file)
078 */
079 public String getEncoding() {
080 VariableElement variable = getVariable(ENCODING_NAME);
081 return variable == null ? null : variable.getValue();
082 }
083
084 /**
085 * Sets the version of the Eclipse preferences. The default value should be left and
086 * not set explicitely.
087 *
088 * @param value
089 * A valid encoding for the project.
090 * @since Ant-Eclipse 1.0
091 */
092 public void setEncoding(String value) {
093 value = value.toUpperCase();
094 if (!ENCODING_VALUES.contains(value))
095 throw new BuildException("The attribute \"" + ENCODING_ATTRIBUTE
096 + "\" (variable \"" + ENCODING_NAME + "\") has an invalid value \""
097 + value + "\". Valid values are " + getValidEncodingValues() + ".");
098 internalCreateVariable(ENCODING_NAME, value);
099 }
100
101 /**
102 * Returns allowed values for the variable encoding/<project>.
103 *
104 * @return A new string with allowed values for the variable line.separator.
105 * @since Ant-Eclipse 1.0
106 */
107 String getValidEncodingValues() {
108 return getValidValues(ENCODING_VALUES);
109 }
110
111 /**
112 * Performs the validation of the element at the time when the whole build file was
113 * parsed checking the content of the element and possibly adding mandatory variables
114 * with default settings.
115 *
116 * @since Ant-Eclipse 1.0
117 */
118 public void validate() {
119 if (!hasVariable(ENCODING_NAME))
120 throw new BuildException("The attribute \"" + ENCODING_ATTRIBUTE
121 + "\" (variable \"" + ENCODING_NAME
122 + "\") was missing in the element \"" + ELEMENT + "\".");
123 super.validate();
124 }
125
126 }