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.HashMap; 023 024 import org.apache.tools.ant.BuildException; 025 026 /** 027 * Configures the component preferences file 028 * <tt>.settings/org.eclipse.core.runtime.prefs</tt> on the high level using attributes 029 * 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 OrgEclipseCoreRuntimePreferencesElement extends PreferencesElement { 035 036 private static final String ELEMENT = "runtime"; 037 038 private static final String LINESEPARATOR_ATTRIBUTE = "lineseparator"; 039 040 private static final String LINESEPARATOR_NAME = "line.separator"; 041 042 private static final HashMap LINESEPARATOR_VALUES = new HashMap(); 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.runtime"; 051 } 052 053 /** 054 * Creates a new instance of the element for the file with preferences for 055 * org.eclipse.core.runtime. 056 * 057 * @param parent 058 * The parent settings element of this preferences one. 059 * @since Ant-Eclipse 1.0 060 */ 061 public OrgEclipseCoreRuntimePreferencesElement(SettingsElement parent) { 062 super(parent); 063 internalSetName(getPackageName()); 064 LINESEPARATOR_VALUES.put("unix", "\\n"); 065 LINESEPARATOR_VALUES.put("macintosh", "\\r"); 066 LINESEPARATOR_VALUES.put("windows", "\\r\\n"); 067 } 068 069 /** 070 * Returns the line separator (default is inherited from the workspace settings and 071 * not set here in the file). 072 * 073 * @return The line separator (default is inherited from the workspace settings and 074 * not set here in the file). 075 */ 076 public String getLineSeparator() { 077 VariableElement variable = getVariable(LINESEPARATOR_NAME); 078 return variable == null ? null : variable.getValue(); 079 } 080 081 /** 082 * Sets the version of the Eclipse preferences. The default value should be left and 083 * not set explicitely. 084 * 085 * @param value 086 * A valid line separator. 087 * @since Ant-Eclipse 1.0 088 */ 089 public void setLineSeparator(String value) { 090 String lineSeparator = (String) LINESEPARATOR_VALUES.get(value.toLowerCase()); 091 if (lineSeparator == null) 092 throw new BuildException("The attribute \"" + LINESEPARATOR_ATTRIBUTE 093 + "\" (variable \"" + LINESEPARATOR_NAME 094 + "\") has an invalid value \"" + value + "\". Valid values are " 095 + getValidLineSeparatorValues() + "."); 096 internalCreateVariable(LINESEPARATOR_NAME, value); 097 } 098 099 /** 100 * Returns allowed values for the variable line.separator. 101 * 102 * @return A new string with allowed values for the variable line.separator. 103 * @since Ant-Eclipse 1.0 104 */ 105 String getValidLineSeparatorValues() { 106 return getValidValues(LINESEPARATOR_VALUES.keySet()); 107 } 108 109 /** 110 * Performs the validation of the element at the time when the whole build file was 111 * parsed checking the content of the element and possibly adding mandatory variables 112 * with default settings. 113 * 114 * @since Ant-Eclipse 1.0 115 */ 116 public void validate() { 117 if (!hasVariable(LINESEPARATOR_NAME)) 118 throw new BuildException("The attribute \"" + LINESEPARATOR_ATTRIBUTE 119 + "\" (variable \"" + LINESEPARATOR_NAME 120 + "\") was missing in the element \"" + ELEMENT + "\"."); 121 super.validate(); 122 } 123 124 }