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 }