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 }