buildframework/helium/sf/java/legacy/src/com/nokia/ant/TypedefURIFix.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 587 85df38eb4012
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
package com.nokia.ant;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 *  Licensed to the Apache Software Foundation (ASF) under one or more
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 *  contributor license agreements.  See the NOTICE file distributed with
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 *  this work for additional information regarding copyright ownership.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 *  The ASF licenses this file to You under the Apache License, Version 2.0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *  (the "License"); you may not use this file except in compliance with
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 *  the License.  You may obtain a copy of the License at
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *      http://www.apache.org/licenses/LICENSE-2.0
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *  Unless required by applicable law or agreed to in writing, software
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 *  distributed under the License is distributed on an "AS IS" BASIS,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 *  See the License for the specific language governing permissions and
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
 *  limitations under the License.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
 * package org.apache.tools.ant.taskdefs;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
/* * Portion Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.*/
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import java.io.File;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import java.io.IOException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import java.io.InputStream;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    27
import java.net.MalformedURLException;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import java.net.URL;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    29
import java.util.Enumeration;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    30
import java.util.HashMap;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    31
import java.util.Locale;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
import java.util.Map;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
import java.util.NoSuchElementException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
import java.util.Properties;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    36
import org.apache.tools.ant.AntTypeDefinition;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    37
import org.apache.tools.ant.BuildException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    38
import org.apache.tools.ant.ComponentHelper;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    39
import org.apache.tools.ant.Location;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    40
import org.apache.tools.ant.MagicNames;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    41
import org.apache.tools.ant.Project;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    42
import org.apache.tools.ant.ProjectHelper;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    43
import org.apache.tools.ant.taskdefs.Definer;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    44
import org.apache.tools.ant.types.EnumeratedAttribute;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
import org.apache.tools.ant.util.FileUtils;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 * Base class for Taskdef and Typedef - handles all
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
 * the attributes for Typedef. The uri and class
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
 * handling is handled by DefBase
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
 * @since Ant 1.4
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
public class TypedefURIFix extends Definer {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
     * the extension of an antlib file for autoloading.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
     * {@value[
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    private static final String ANTLIB_XML = "/antlib.xml";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    private static class ResourceStack extends ThreadLocal<Map<URL, Location>> {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
        public Map<URL, Location> initialValue() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
            return new HashMap<URL, Location>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
        Map<URL, Location> getStack() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
            return get();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    private static ResourceStack resourceStack = new ResourceStack();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
    private String name;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    private String classname;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
    private File file;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
    private String resource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
    private   int    format = Format.PROPERTIES;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
    private   boolean definerSet;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
    private   int         onError = OnError.FAIL;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
    private   String      adapter;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    private   String      adaptTo;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
    private   Class<?>       adapterClass;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
    private   Class<?>       adaptToClass;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
     * Enumerated type for onError attribute
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
     * @see EnumeratedAttribute
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
    public static class OnError extends EnumeratedAttribute {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
        /** Enumerated values */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
        public static final int  FAIL = 0, REPORT = 1, IGNORE = 2, FAIL_ALL = 3;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
         * text value of onerror option {@value}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
        public static final String POLICY_FAIL = "fail";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
         * text value of onerror option {@value}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
        public static final String POLICY_REPORT = "report";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
         * text value of onerror option {@value}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        public static final String POLICY_IGNORE = "ignore";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
         * text value of onerror option {@value}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
        public static final String POLICY_FAILALL = "failall";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
         * Constructor
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        public OnError() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            super();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
         * Constructor using a string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
         * @param value the value of the attribute
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
        public OnError(String value) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
            setValue(value);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
         * get the values
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
         * @return an array of the allowed values for this attribute.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
        public String[] getValues() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
            return new String[] { POLICY_FAIL, POLICY_REPORT, POLICY_IGNORE, POLICY_FAILALL };
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   132
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
     * Enumerated type for format attribute
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
     * @see EnumeratedAttribute
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
    public static class Format extends EnumeratedAttribute {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
        /** Enumerated values */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
        public static final int PROPERTIES = 0, XML = 1;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
        /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
         * get the values
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
         * @return an array of the allowed values for this attribute.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
         */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
        public String[] getValues() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
            return new String[] {"properties", "xml"};
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
     * What to do if there is an error in loading the class.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
     * <dl>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
     *   <li>error - throw build exception</li>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
     *   <li>report - output at warning level</li>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
     *   <li>ignore - output at debug level</li>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
     * </dl>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
     * @param onError an <code>OnError</code> value
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
    public void setOnError(OnError onError) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
        this.onError = onError.getIndex();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
     * Sets the format of the file or resource
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
     * @param format the enumerated value - xml or properties
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
    public void setFormat(Format format) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
        this.format = format.getIndex();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
     * @return the name for this definition
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
    public String getName() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
        return name;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
     * @return the file containing definitions
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
    public File getFile() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
        return file;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
     * @return the resource containing definitions
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
    public String getResource() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
        return resource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   197
     * Run the definition.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
     * @exception BuildException if an error occurs
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
    public void execute() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
        ClassLoader al = createLoader();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
        if (!definerSet) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
            //we arent fully defined yet. this is an error unless
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
            //we are in an antlib, in which case the resource name is determined
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
            //automatically.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
            //NB: URIs in the ant core package"" at this point.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
            if (getURI() == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
                throw new BuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
                        "name, file or resource attribute of "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
                                + getTaskName() + " is undefined",
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   213
                        getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   214
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   215
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   216
            if (getURI().startsWith(MagicNames.ANTLIB_PREFIX)) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   217
                //convert the URI to a resource
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   218
                String uri1 = getURI();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   219
                setResource(makeResourceFromURI(uri1));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   220
            } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   221
                throw new BuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   222
                        "Only antlib URIs can be located from the URI alone,"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
                                + "not the URI " + getURI());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
        if (name != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
            if (classname == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
                throw new BuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
                    "classname attribute of " + getTaskName() + " element "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
                    + "is undefined", getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
            addDefinition(al, name, classname);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
        } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
            if (classname != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
                String msg = "You must not specify classname "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
                    + "together with file or resource.";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
                throw new BuildException(msg, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
            Enumeration<URL> urls = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
            if (file != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
                final URL url = fileToURL();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
                if (url == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
                    return;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
                urls = new Enumeration<URL>() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
                    private boolean more = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
                    public boolean hasMoreElements() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
                        return more;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   250
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
                    public URL nextElement() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
                        if (more) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
                            more = false;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
                            return url;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
                        } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
                            throw new NoSuchElementException();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
                        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
                };
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
            } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
                urls = resourceToURLs(al);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
            while (urls.hasMoreElements()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
                URL url = urls.nextElement();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
                int fmt = this.format;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
                if (url.toString().toLowerCase(Locale.US).endsWith(".xml")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
                    fmt = Format.XML;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
                if (fmt == Format.PROPERTIES) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
                    loadProperties(al, url);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
                    break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
                } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
                    if (resourceStack.getStack().get(url) != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
                        log("Warning: Recursive loading of " + url
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
                            + " ignored"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
                            + " at " + getLocation()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
                            + " originally loaded at "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
                            + resourceStack.getStack().get(url),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
                            Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
                    } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
                        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
                            resourceStack.getStack().put(url, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
                            loadAntlib(al, url);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
                        } finally {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
                            resourceStack.getStack().remove(url);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
                        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
                    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   293
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   294
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   295
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   296
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
     * This is where the logic to map from a URI to an antlib resource
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   298
     * is kept.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   299
     * @param uri the xml namespace uri that to convert.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   300
     * @return the name of a resource. It may not exist
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   301
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   302
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   303
    public static String makeResourceFromURI(String uri) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   304
        String path = uri.substring(MagicNames.ANTLIB_PREFIX.length());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   305
        String resource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   306
        if (path.startsWith("//")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   307
            //handle new style full paths to an antlib, in which
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   308
            //all but the forward slashes are allowed.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   309
            resource = path.substring("//".length());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   310
            if (!resource.endsWith(".xml")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   311
                //if we haven't already named an XML file, it gets antlib.xml
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   312
                resource = resource + ANTLIB_XML;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   313
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   314
        } else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   315
            //convert from a package to a path
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   316
            resource = path.replace('.', '/') + ANTLIB_XML;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   317
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   318
        return resource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   319
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   320
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   321
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   322
     * Convert a file to a file: URL.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   323
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   324
     * @return the URL, or null if it isn't valid and the active error policy
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   325
     * is not to raise a fault
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   326
     * @throws BuildException if the file is missing/not a file and the
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   327
     * policy requires failure at this point.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   328
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   329
    private URL fileToURL() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   330
        String message = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   331
        if (!(file.exists())) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   332
            message = "File " + file + " does not exist";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   333
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   334
        if (message == null && !(file.isFile())) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   335
            message = "File " + file + " is not a file";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   336
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   337
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   338
            if (message == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   339
                return file.toURI().toURL();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   340
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   341
        } catch (MalformedURLException ex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   342
            message =
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   343
                "File " + file + " cannot use as URL: "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   344
                + ex.toString();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   345
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   346
        // Here if there is an error
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   347
        switch (onError) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   348
            case OnError.FAIL_ALL:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   349
                throw new BuildException(message);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   350
            case OnError.FAIL:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   351
                // Fall Through
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   352
            case OnError.REPORT:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   353
                log(message, Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   354
                break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   355
            case OnError.IGNORE:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   356
                // log at a lower level
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   357
                log(message, Project.MSG_VERBOSE);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   358
                break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   359
            default:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   360
                // Ignore the problem
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   361
                break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   362
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   363
        return null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   364
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   365
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   366
    private Enumeration<URL> resourceToURLs(ClassLoader classLoader) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   367
        Enumeration<URL> ret;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   368
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   369
            ret = classLoader.getResources(resource);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   370
        } catch (IOException e) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   371
            throw new BuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   372
                "Could not fetch resources named " + resource,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   373
                e, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   374
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   375
        if (!ret.hasMoreElements()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   376
            String message = "Could not load definitions from resource "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   377
                + resource + ". It could not be found.";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   378
            switch (onError) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   379
                case OnError.FAIL_ALL:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   380
                    throw new BuildException(message);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   381
                case OnError.FAIL:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   382
                case OnError.REPORT:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   383
                    log(message, Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   384
                    break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   385
                case OnError.IGNORE:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   386
                    log(message, Project.MSG_VERBOSE);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   387
                    break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   388
                default:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   389
                    // Ignore the problem
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   390
                    break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   391
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   392
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   393
        return ret;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   394
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   395
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   396
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   397
     * Load type definitions as properties from a URL.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   398
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   399
     * @param al the classloader to use
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   400
     * @param url the url to get the definitions from
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   401
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   402
    protected void loadProperties(ClassLoader al, URL url) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   403
        InputStream is = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   404
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   405
            is = url.openStream();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   406
            if (is == null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   407
                log("Could not load definitions from " + url,
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   408
                    Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   409
                return;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   410
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   411
            Properties props = new Properties();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   412
            props.load(is);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   413
            Enumeration keys = props.keys();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   414
            while (keys.hasMoreElements()) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   415
                name = (String) keys.nextElement();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   416
                classname = props.getProperty(name);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   417
                addDefinition(al, name, classname);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   418
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   419
        } catch (IOException ex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   420
            throw new BuildException(ex, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   421
        } finally {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   422
            FileUtils.close(is);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   423
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   424
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   425
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   426
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   427
     * Load an antlib from a URL.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   428
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   429
     * @param classLoader the classloader to use.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   430
     * @param url the url to load the definitions from.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   431
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   432
    private void loadAntlib(ClassLoader classLoader, URL url) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   433
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   434
            Antlib antlib = Antlib.createAntlib(getProject(), url, getURI());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   435
            antlib.setClassLoader(classLoader);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   436
            antlib.setURI(getURI());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   437
            antlib.execute();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   438
        } catch (BuildException ex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   439
            throw ProjectHelper.addLocationToBuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   440
                ex, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   441
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   442
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   443
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   444
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   445
     * Name of the property file  to load
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   446
     * ant name/classname pairs from.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   447
     * @param file the file
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   448
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   449
    public void setFile(File file) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   450
        if (definerSet) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   451
            tooManyDefinitions();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   452
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   453
        definerSet = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   454
        this.file = file;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   455
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   456
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   457
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   458
     * Name of the property resource to load
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   459
     * ant name/classname pairs from.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   460
     * @param res the resource to use
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   461
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   462
    public void setResource(String res) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   463
        if (definerSet) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   464
            tooManyDefinitions();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   465
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   466
        definerSet = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   467
        this.resource = res;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   468
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   469
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   470
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   471
     * Antlib attribute, sets resource and uri.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   472
     * uri is set the antlib value and, resource is set
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   473
     * to the antlib.xml resource in the classpath.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   474
     * For example antlib="antlib:org.acme.bland.cola"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   475
     * corresponds to uri="antlib:org.acme.bland.cola"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   476
     * resource="org/acme/bland/cola/antlib.xml".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   477
     * @param antlib the value to set.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   478
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   479
    public void setAntlib(String antlib) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   480
        if (definerSet) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   481
            tooManyDefinitions();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   482
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   483
        if (!antlib.startsWith("antlib:")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   484
            throw new BuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   485
                "Invalid antlib attribute - it must start with antlib:");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   486
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   487
        setURI(antlib);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   488
        this.resource = antlib.substring("antlib:".length()).replace('.', '/')
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   489
            + "/antlib.xml";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   490
        definerSet = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   491
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   492
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   493
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   494
     * Name of the definition
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   495
     * @param name the name of the definition
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   496
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   497
    public void setName(String name) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   498
        if (definerSet) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   499
            tooManyDefinitions();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   500
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   501
        definerSet = true;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   502
        this.name = name;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   503
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   504
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   505
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   506
     * Returns the classname of the object we are defining.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   507
     * May be <code>null</code>.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   508
     * @return the class name
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   509
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   510
    public String getClassname() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   511
        return classname;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   512
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   513
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   514
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   515
     * The full class name of the object being defined.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   516
     * Required, unless file or resource have
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   517
     * been specified.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   518
     * @param classname the name of the class
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   519
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   520
    public void setClassname(String classname) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   521
        this.classname = classname;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   522
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   523
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   524
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   525
     * Set the class name of the adapter class.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   526
     * An adapter class is used to proxy the
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   527
     * definition class. It is used if the
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   528
     * definition class is not assignable to
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   529
     * the adaptto class, or if the adaptto
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   530
     * class is not present.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   531
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   532
     * @param adapter the name of the adapter class
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   533
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   534
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   535
    public void setAdapter(String adapter) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   536
        this.adapter = adapter;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   537
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   538
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   539
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   540
     * Set the adapter class.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   541
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   542
     * @param adapterClass the class to use to adapt the definition class
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   543
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   544
    protected void setAdapterClass(Class adapterClass) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   545
        this.adapterClass = adapterClass;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   546
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   547
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   548
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   549
     * Set the classname of the class that the definition
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   550
     * must be compatible with, either directly or
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   551
     * by use of the adapter class.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   552
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   553
     * @param adaptTo the name of the adaptto class
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   554
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   555
    public void setAdaptTo(String adaptTo) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   556
        this.adaptTo = adaptTo;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   557
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   558
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   559
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   560
     * Set the class for adaptToClass, to be
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   561
     * used by derived classes, used instead of
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   562
     * the adaptTo attribute.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   563
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   564
     * @param adaptToClass the class for adapto.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   565
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   566
    protected void setAdaptToClass(Class adaptToClass) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   567
        this.adaptToClass = adaptToClass;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   568
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   569
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   570
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   571
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   572
     * Add a definition using the attributes of Definer
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   573
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   574
     * @param al the ClassLoader to use
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   575
     * @param name the name of the definition
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   576
     * @param classname the classname of the definition
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   577
     * @exception BuildException if an error occurs
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   578
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   579
    protected void addDefinition(ClassLoader al, String name, String classname)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   580
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   581
        Class<?> cl = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   582
        try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   583
            try {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   584
                name = ProjectHelper.genComponentName(getURI(), name);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   585
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   586
                if (onError != OnError.IGNORE) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   587
                    cl = Class.forName(classname, true, al);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   588
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   589
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   590
                if (adapter != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   591
                    adapterClass = Class.forName(adapter, true, al);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   592
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   593
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   594
                if (adaptTo != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   595
                    adaptToClass = Class.forName(adaptTo, true, al);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   596
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   597
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   598
                AntTypeDefinition def = new AntTypeDefinition();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   599
                def.setName(name);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   600
                def.setClassName(classname);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   601
                def.setClass(cl);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   602
                def.setAdapterClass(adapterClass);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   603
                def.setAdaptToClass(adaptToClass);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   604
                def.setClassLoader(al);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   605
                if (cl != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   606
                    def.checkClass(getProject());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   607
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   608
                ComponentHelper.getComponentHelper(getProject())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   609
                    .addDataTypeDefinition(def);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   610
            } catch (ClassNotFoundException cnfe) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   611
                String msg = getTaskName() + " class " + classname
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   612
                    + " cannot be found";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   613
                throw new BuildException(msg, cnfe, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   614
            } catch (NoClassDefFoundError ncdfe) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   615
                String msg = getTaskName() + " A class needed by class "
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   616
                    + classname + " cannot be found: " + ncdfe.getMessage();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   617
                throw new BuildException(msg, ncdfe, getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   618
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   619
        } catch (BuildException ex) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   620
            switch (onError) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   621
                case OnError.FAIL_ALL:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   622
                case OnError.FAIL:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   623
                    throw ex;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   624
                case OnError.REPORT:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   625
                    log(ex.getLocation() + "Warning: " + ex.getMessage(),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   626
                        Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   627
                    break;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   628
                default:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   629
                    log(ex.getLocation() + ex.getMessage(),
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   630
                        Project.MSG_DEBUG);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   631
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   632
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   633
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   634
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   635
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   636
     * handle too many definitions by raising an exception.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   637
     * @throws BuildException always.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   638
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   639
    private void tooManyDefinitions() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   640
        throw new BuildException(
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   641
            "Only one of the attributes name, file and resource"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   642
            + " can be set", getLocation());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   643
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   644
}