View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }