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.Vector; 023 024 import org.apache.tools.ant.BuildException; 025 026 /** 027 * Configures components creating their preference files under under the directory 028 * <tt>.settings</tt>. The attributes <tt>name</tt> of all elements for components 029 * describing preferences must be distinct. 030 * 031 * @since Ant-Eclipse 1.0 032 * @author Ferdinand Prantl <prantl@users.sourceforge.net> 033 */ 034 public class SettingsElement { 035 036 private Vector preferences = new Vector(); 037 038 /** 039 * Creates a new instance of the settings element. 040 * 041 * @since Ant-Eclipse 1.0 042 */ 043 public SettingsElement() { 044 } 045 046 /** 047 * Returns a list with instances of the descendants of the class PreferencesElement 048 * describing files <em><full qualified class 049 * name></em> under the directory 050 * <tt>.settings</tt>. If it is empty nothing happens. 051 * 052 * @return A list with instances of the descendants of the class PreferencesElement. 053 */ 054 public Vector getPreferences() { 055 return preferences; 056 } 057 058 /** 059 * Adds a definition of the general preferences element. 060 * 061 * @return A definition of the general preferences element. 062 * @since Ant-Eclipse 1.0 063 */ 064 public GeneralPreferencesElement createGeneral() { 065 preferences.addElement(new GeneralPreferencesElement(this)); 066 return (GeneralPreferencesElement) preferences.lastElement(); 067 } 068 069 /** 070 * Adds a definition of the convenience preferences element specific for the package 071 * org.eclipse.core.resources. 072 * 073 * @return A definition of the convenience preferences element specific for the 074 * package org.eclipse.core.resources. 075 * @since Ant-Eclipse 1.0 076 */ 077 public OrgEclipseCoreResourcesPreferencesElement createResources() { 078 preferences.addElement(new OrgEclipseCoreResourcesPreferencesElement(this)); 079 return (OrgEclipseCoreResourcesPreferencesElement) preferences.lastElement(); 080 } 081 082 /** 083 * Adds a definition of the convenience preferences element specific for the package 084 * org.eclipse.core.runtime. 085 * 086 * @return A definition of the convenience preferences element specific for the 087 * package org.eclipse.core.runtime. 088 * @since Ant-Eclipse 1.0 089 */ 090 public OrgEclipseCoreRuntimePreferencesElement createRuntime() { 091 preferences.addElement(new OrgEclipseCoreRuntimePreferencesElement(this)); 092 return (OrgEclipseCoreRuntimePreferencesElement) preferences.lastElement(); 093 } 094 095 /** 096 * Adds a definition of the convenience preferences element specific for the package 097 * org.eclipse.jdt.core. 098 * 099 * @return A definition of the convenience preferences element specific for the 100 * package org.eclipse.jdt.core. 101 * @since Ant-Eclipse 1.0 102 */ 103 public OrgEclipseJdtCorePreferencesElement createJdtCore() { 104 preferences.addElement(new OrgEclipseJdtCorePreferencesElement(this)); 105 return (OrgEclipseJdtCorePreferencesElement) preferences.lastElement(); 106 } 107 108 /** 109 * Adds a definition of the convenience preferences element specific for the package 110 * org.eclipse.jdt.ui. 111 * 112 * @return A definition of the convenience preferences element specific for the 113 * package org.eclipse.jdt.ui. 114 * @since Ant-Eclipse 1.0 115 */ 116 public OrgEclipseJdtUiPreferencesElement createJdtUi() { 117 preferences.addElement(new OrgEclipseJdtUiPreferencesElement(this)); 118 return (OrgEclipseJdtUiPreferencesElement) preferences.lastElement(); 119 } 120 121 /** 122 * Checks if the preferences with the specified name is allowed to be defined 123 * according to the already parsed content. 124 * 125 * @param name 126 * The name of the configuration preferences to validate. 127 * @since Ant-Eclipse 1.0 128 */ 129 void validatePreferencesName(String name) { 130 if (hasPreferences(name)) 131 throw new BuildException("The preferences for \"" + name 132 + "\" has alredy been defined."); 133 } 134 135 /** 136 * Checks if the preferences with the specified name has already been defined for this 137 * preferences. 138 * 139 * @param name 140 * The name of the configuration preferences to look for. 141 * @return <tt>True</tt> if the preferences with the specified name are present. 142 * @since Ant-Eclipse 1.0 143 */ 144 boolean hasPreferences(String name) { 145 return getPreferences(name) != null; 146 } 147 148 /** 149 * Returns the element defining the preferences with the specified name or 150 * <tt>null</tt> if not having been defined. 151 * 152 * @param name 153 * The element defining the configuration preferences or <tt>null</tt> if not 154 * present. 155 * @return The element defining the preferences with the specified name or 156 * <tt>null</tt> if not present. 157 * @since Ant-Eclipse 1.0 158 */ 159 PreferencesElement getPreferences(String name) { 160 for (int i = 0, size = preferences.size(); i != size; ++i) { 161 PreferencesElement preference = (PreferencesElement) preferences.get(i); 162 if (name.equals(preference.getName())) 163 return preference; 164 } 165 return null; 166 } 167 168 }