1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.resolver.internal.ant.tasks;
20
21 import org.apache.tools.ant.BuildException;
22 import org.apache.tools.ant.ComponentHelper;
23 import org.apache.tools.ant.Project;
24 import org.apache.tools.ant.Task;
25 import org.apache.tools.ant.types.Reference;
26
27
28
29 public abstract class RefTask extends Task {
30
31 private Reference ref;
32
33 public boolean isReference() {
34 return ref != null;
35 }
36
37 public void setRefid(final Reference ref) {
38 this.ref = ref;
39 }
40
41 protected void checkAttributesAllowed() {
42 if (isReference()) {
43 throw tooManyAttributes();
44 }
45 }
46
47 protected void checkChildrenAllowed() {
48 if (isReference()) {
49 throw noChildrenAllowed();
50 }
51 }
52
53 protected BuildException tooManyAttributes() {
54 return new BuildException("You must not specify more than one " + "attribute when using refid");
55 }
56
57 protected BuildException noChildrenAllowed() {
58 return new BuildException("You must not specify nested elements " + "when using refid");
59 }
60
61 protected String getDataTypeName() {
62 return ComponentHelper.getElementName(getProject(), this, true);
63 }
64
65 protected Object getCheckedRef() {
66 return getCheckedRef(getClass(), getDataTypeName(), getProject());
67 }
68
69 protected Object getCheckedRef(final Class<?> requiredClass, final String dataTypeName, final Project project) {
70 if (project == null) {
71 throw new BuildException("No Project specified");
72 }
73 Object o = ref.getReferencedObject(project);
74 if (!(requiredClass.isAssignableFrom(o.getClass()))) {
75 log("Class " + o.getClass() + " is not a subclass of " + requiredClass, Project.MSG_VERBOSE);
76 String msg = ref.getRefId() + " doesn't denote a " + dataTypeName;
77 throw new BuildException(msg);
78 }
79 return o;
80 }
81 }