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 <tt>.settings/org.eclipse.jdt.ui.prefs</tt>
028 * on the high level using attributes for the typical constellations of variable values.
029 *
030 * @since Ant-Eclipse 1.0
031 * @author Ferdinand Prantl <prantl@users.sourceforge.net>
032 */
033 public class OrgEclipseJdtUiPreferencesElement extends PreferencesElement {
034
035 // private static final String ELEMENT = "jdtui";
036 private static final String COMPLIANCE_ATTRIBUTE = "compliance";
037
038 private static final String COMPLIANCE_NAME = "internal.default.compliance";
039
040 private static final String COMPLIANCE_DEFAULT = "user";
041
042 private static final HashSet COMPLIANCE_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.jdt.ui";
051 }
052
053 /**
054 * Creates a new instance of the element for the file with preferences for
055 * org.eclipse.jdt.ui.
056 *
057 * @param parent
058 * The parent settings element of this preferences one.
059 * @since Ant-Eclipse 1.0
060 */
061 public OrgEclipseJdtUiPreferencesElement(SettingsElement parent) {
062 super(parent);
063 internalSetName(getPackageName());
064 COMPLIANCE_VALUES.add("default");
065 COMPLIANCE_VALUES.add("user");
066 }
067
068 /**
069 * Returns the source file encoding for the project (default is inherited from the
070 * workspace settings and not set here in the file).
071 *
072 * @return The source file encoding for the project (default is inherited from the
073 * workspace settings and not set here in the file)
074 */
075 public String getCompliance() {
076 VariableElement variable = getVariable(COMPLIANCE_NAME);
077 return variable == null ? null : variable.getValue();
078 }
079
080 /**
081 * Sets the version of the Eclipse preferences. The default value should be left and
082 * not set explicitely.
083 *
084 * @param value
085 * A valid encoding for the project.
086 * @since Ant-Eclipse 1.0
087 */
088 public void setCompliance(String value) {
089 value = value.toLowerCase();
090 if (!COMPLIANCE_VALUES.contains(value))
091 throw new BuildException("The attribute \"" + COMPLIANCE_ATTRIBUTE
092 + "\" (variable \"" + COMPLIANCE_NAME + "\") has an invalid value \""
093 + value + "\". Valid values are " + getValidComplianceValues() + ".");
094 internalCreateVariable(COMPLIANCE_NAME, value);
095 }
096
097 /**
098 * Returns allowed values for the variable internal.default.compliance.
099 *
100 * @return A new string with allowed values for the variable line.separator.
101 * @since Ant-Eclipse 1.0
102 */
103 String getValidComplianceValues() {
104 return getValidValues(COMPLIANCE_VALUES);
105 }
106
107 /**
108 * Performs the validation of the element at the time when the whole build file was
109 * parsed checking the content of the element and possibly adding mandatory variables
110 * with default settings.
111 *
112 * @since Ant-Eclipse 1.0
113 */
114 public void validate() {
115 if (!hasVariable(COMPLIANCE_NAME))
116 setCompliance(COMPLIANCE_DEFAULT);
117 super.validate();
118 }
119
120 }