1 /*
2 * #%L
3 * Native ARchive plugin for Maven
4 * %%
5 * Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
6 * %%
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * #L%
19 */
20 package com.github.maven_nar.cpptasks.types;
21
22 import org.apache.tools.ant.BuildException;
23 import org.apache.tools.ant.Project;
24 import org.apache.tools.ant.types.AbstractFileSet;
25 import org.apache.tools.ant.types.FileSet;
26
27 import com.github.maven_nar.cpptasks.CUtil;
28
29 /**
30 * An Ant FileSet object augmented with if and unless conditions.
31 *
32 * @author Curt Arnold
33 */
34 public class ConditionalFileSet extends FileSet {
35 private String ifCond;
36 private String unlessCond;
37
38 public ConditionalFileSet() {
39 }
40
41 public void execute() throws org.apache.tools.ant.BuildException {
42 throw new org.apache.tools.ant.BuildException("Not an actual task, but looks like one for documentation purposes");
43 }
44
45 /**
46 * overrides FileSet's implementation which would throw an exception since
47 * the referenced object isn't this type.
48 */
49 @Override
50 protected AbstractFileSet getRef(final Project p) {
51 return (AbstractFileSet) this.ref.getReferencedObject(p);
52 }
53
54 /**
55 * Returns true if the Path's if and unless conditions (if any) are
56 * satisfied.
57 */
58 public boolean isActive() throws BuildException {
59 final Project p = getProject();
60 if (p == null) {
61 throw new java.lang.IllegalStateException("setProject() should have been called");
62 }
63 return CUtil.isActive(p, this.ifCond, this.unlessCond);
64 }
65
66 /**
67 * Sets the property name for the 'if' condition.
68 *
69 * The fileset will be ignored unless the property is defined.
70 *
71 * The value of the property is insignificant, but values that would imply
72 * misinterpretation ("false", "no") will throw an exception when
73 * evaluated.
74 */
75 public void setIf(final String propName) {
76 this.ifCond = propName;
77 }
78
79 /**
80 * Set the property name for the 'unless' condition.
81 *
82 * If named property is set, the fileset will be ignored.
83 *
84 * The value of the property is insignificant, but values that would imply
85 * misinterpretation ("false", "no") of the behavior will throw an
86 * exception when evaluated.
87 *
88 * @param propName
89 * name of property
90 */
91 public void setUnless(final String propName) {
92 this.unlessCond = propName;
93 }
94 }