aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java153
1 files changed, 153 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java
new file mode 100644
index 00000000..5aba37c9
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.taskdefs.optional.extension;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Stack;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Reference;
+
+/**
+ * The Extension set lists a set of "Optional Packages" /
+ * "Extensions".
+ *
+ * @ant.datatype name="extension-set"
+ */
+public class ExtensionSet
+ extends DataType {
+ /**
+ * ExtensionAdapter objects representing extensions.
+ */
+ private final ArrayList extensions = new ArrayList();
+
+ /**
+ * Filesets specifying all the extensions wanted.
+ */
+ private final ArrayList extensionsFilesets = new ArrayList();
+
+ /**
+ * Adds an extension that this library requires.
+ *
+ * @param extensionAdapter an extension that this library requires.
+ */
+ public void addExtension(final ExtensionAdapter extensionAdapter) {
+ if (isReference()) {
+ throw noChildrenAllowed();
+ }
+ setChecked(false);
+ extensions.add(extensionAdapter);
+ }
+
+ /**
+ * Adds a set of files about which extensions data will be extracted.
+ *
+ * @param fileSet a set of files about which extensions data will be extracted.
+ */
+ public void addLibfileset(final LibFileSet fileSet) {
+ if (isReference()) {
+ throw noChildrenAllowed();
+ }
+ setChecked(false);
+ extensionsFilesets.add(fileSet);
+ }
+
+ /**
+ * Adds a set of files about which extensions data will be extracted.
+ *
+ * @param fileSet a set of files about which extensions data will be extracted.
+ */
+ public void addFileset(final FileSet fileSet) {
+ if (isReference()) {
+ throw noChildrenAllowed();
+ }
+ setChecked(false);
+ extensionsFilesets.add(fileSet);
+ }
+
+ /**
+ * Extract a set of Extension objects from the ExtensionSet.
+ *
+ * @param proj the project instance.
+ * @return an array containing the Extensions from this set
+ * @throws BuildException if an error occurs
+ */
+ public Extension[] toExtensions(final Project proj)
+ throws BuildException {
+ if (isReference()) {
+ return ((ExtensionSet) getCheckedRef()).toExtensions(proj);
+ }
+ dieOnCircularReference();
+ final ArrayList extensionsList = ExtensionUtil.toExtensions(extensions);
+ ExtensionUtil.extractExtensions(proj, extensionsList, extensionsFilesets);
+ return (Extension[]) extensionsList.toArray(new Extension[extensionsList.size()]);
+ }
+
+ /**
+ * Makes this instance in effect a reference to another ExtensionSet
+ * instance.
+ *
+ * <p>You must not set another attribute or nest elements inside
+ * this element if you make it a reference.</p>
+ *
+ * @param reference the reference to which this instance is associated
+ * @exception BuildException if this instance already has been configured.
+ */
+ @Override
+ public void setRefid(final Reference reference)
+ throws BuildException {
+ if (!extensions.isEmpty() || !extensionsFilesets.isEmpty()) {
+ throw tooManyAttributes();
+ }
+ super.setRefid(reference);
+ }
+
+ @Override
+ protected synchronized void dieOnCircularReference(Stack stk, Project p)
+ throws BuildException {
+ if (isChecked()) {
+ return;
+ }
+ if (isReference()) {
+ super.dieOnCircularReference(stk, p);
+ } else {
+ for (Iterator i = extensions.iterator(); i.hasNext();) {
+ pushAndInvokeCircularReferenceCheck((ExtensionAdapter) i.next(),
+ stk, p);
+ }
+ for (Iterator i = extensionsFilesets.iterator(); i.hasNext();) {
+ pushAndInvokeCircularReferenceCheck((FileSet) i.next(), stk, p);
+ }
+ setChecked(true);
+ }
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ * @return the extensions in a string.
+ */
+ @Override
+ public String toString() {
+ return "ExtensionSet" + Arrays.asList(toExtensions(getProject()));
+ }
+}