buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntObjectMeta.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 587 85df38eb4012
child 645 b8d81fa19e7d
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
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
 * All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 * Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 * Description: 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.ant.data;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    20
import java.util.Collections;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.util.HashMap;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import java.util.List;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import java.util.Map;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import org.apache.tools.ant.Project;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import org.dom4j.Comment;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import org.dom4j.Element;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import org.dom4j.Node;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
 * Base class for all Ant Meta objects. Each Ant object is represented by a meta
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
 * object that provides core and additional data about it.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
public class AntObjectMeta {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    36
    public static final Map<String, Integer> SCOPES;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    37
    
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    38
    static {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    39
        Map<String, Integer> tempMap = new HashMap<String, Integer>();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    40
        tempMap.put("public", new Integer(1));
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    41
        tempMap.put("protected", new Integer(2));
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    42
        tempMap.put("private", new Integer(3));
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    43
        SCOPES = Collections.unmodifiableMap(tempMap);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    44
    }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    45
    
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
    /** The default scope if an element does not have a defined scope. */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
    public static final String DEFAULT_SCOPE = "public";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    private static AntComment emptyComment;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    51
    private Project runtimeProject;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
    /** The parent meta object. */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    private AntObjectMeta parent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    /** The dom4j XML Element of the Ant object represented by this meta object. */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    private Node node;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    /** The AntComment of any preceeding comment block. */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    private AntComment comment = emptyComment;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    static {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    61
        emptyComment = new AntComment();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
     * Constructor.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
     * @param parent The parent meta object.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
     * @param node The XML node of the Ant object.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
     */
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    70
    public AntObjectMeta(AntObjectMeta parent, Node node) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
        this.parent = parent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
        this.node = node;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
        processComment();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
    public Project getRuntimeProject() {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    77
        return runtimeProject;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
    public void setRuntimeProject(Project project) {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    81
        this.runtimeProject = project;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
    }
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
     * Gets an attribute if a value is available, otherwise returns an emtpy
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
     * string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
     * @param name Attribute name.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
     * @return Attribute value.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
    protected String getAttr(String name) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
        if (node.getNodeType() == Node.ELEMENT_NODE) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
            String value = ((Element) node).attributeValue(name);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
            if (value != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
                return value;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
        return "";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
    protected Node getNode() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
        return node;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
    protected AntComment getEmptyComment() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
        return emptyComment;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
     * Returns the meta object of the top-level project for this Ant object.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
    public RootAntObjectMeta getRootMeta() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        if (parent instanceof RootAntObjectMeta) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            return (RootAntObjectMeta) parent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
        return parent.getRootMeta();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
     * Returns the Ant file this Ant object is contained in.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
    public AntFile getAntFile() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
        return getRootMeta().getAntFile();
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
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
     * Returns the top-level database object.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
    public Database getDatabase() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
        return getAntFile().getDatabase();
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
     * Returns the name of the object or an empty string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
     * @return Object name.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
    public String getName() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
        String name = getAttr("name");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
        if (name.length() == 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
            name = getComment().getObjectName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
        return name;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
     * Returns the location path of the object.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
     * @return Location path string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
     */
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   151
    public String getLocation() {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
        RootAntObjectMeta rootMeta = getRootMeta();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   153
        String location = rootMeta.getFilePath();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   154
        if (node instanceof ElementWithLocation) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   155
            location += ":" + ((ElementWithLocation)node).getLineNumber();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   156
        }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   157
        return location;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
     * Returns the first line summary from a doc comment.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
     * @return The documentation text.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
    public String getSummary() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
        return getComment().getSummary();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
     * Returns the documentation block from a associated comment.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
     * @return The documentation text.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
    public String getDocumentation() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
        return getComment().getDocumentation();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   179
     * Returns the scope of the object, or an empty string. This could be
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   180
     * public, protected or private.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   181
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   182
     * @return The object scope.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   183
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   184
    public String getScope() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   185
        String scope = getComment().getTagValue("scope");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   186
        if (scope.equals("")) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   187
            scope = DEFAULT_SCOPE;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   188
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   189
        return scope;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   190
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   191
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   192
    public boolean matchesScope(String scopeFilter) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   193
        if (!SCOPES.containsKey(scopeFilter)) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   194
            throw new IllegalArgumentException("Invalid scope filter: " + scopeFilter);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   195
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   196
        String scope = getScope();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   197
        if (scope.length() > 0 && !SCOPES.containsKey(scope)) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   198
            log("Invalid scope: " + scope + ", " + toString(), Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   199
            return false;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   200
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   201
        return SCOPES.get(scope).compareTo(SCOPES.get(scopeFilter)) <= 0;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   202
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   203
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   204
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   205
     * Returns the deprecated text if the object has been deprecated, or an
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   206
     * empty string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   207
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   208
     * @return Deprecated descripion.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   209
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   210
    public String getDeprecated() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   211
        return comment.getTagValue("deprecated");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   212
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   213
    
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   214
    /**
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   215
     * Returns the content of the "since" tag that should indicate which release this feature
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   216
     * was first added.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   217
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   218
     * @return Since release number.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   219
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   220
    public String getSince() {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   221
        return comment.getTagValue("since");
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   222
    }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   223
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   224
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   225
     * Returns the source XML of the object.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   226
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   227
     * @return The XML string.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   228
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   229
    public String getSource() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   230
        // Add the raw XML content of the element
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   231
        String sourceXml = node.asXML();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   232
        // Replace the CDATA end notation to avoid nested CDATA sections
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   233
        sourceXml = sourceXml.replace("]]>", "] ]>");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   234
        return sourceXml;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   235
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   236
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   237
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   238
     * Returns the AntComment that represents a preceeding comment.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   239
     * 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   240
     * @return An Ant comment.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   241
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   242
    protected AntComment getComment() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   243
        return comment;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   244
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   245
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   246
    protected void setComment(AntComment comment) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   247
        this.comment = comment;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   248
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   249
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   250
    private void processComment()  {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   251
        Comment commentNode = getCommentNode();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   252
        if (commentNode != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   253
            comment = new AntComment(commentNode);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   254
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   255
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   256
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   257
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   258
    private Comment getCommentNode() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   259
        Node commentNode = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   260
        if (node.getNodeType() == Node.COMMENT_NODE) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   261
            commentNode = node;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   262
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   263
        else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   264
            List<Node> children = node.selectNodes("preceding-sibling::node()");
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   265
            if (children.size() > 0) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   266
                // Scan past the text nodess, which are most likely whitespace
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   267
                int index = children.size() - 1;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   268
                Node child = children.get(index);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   269
                while (index > 0 && child.getNodeType() == Node.TEXT_NODE) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   270
                    index--;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   271
                    child = children.get(index);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   272
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   273
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   274
                // Check if there is a comment node
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   275
                if (child.getNodeType() == Node.COMMENT_NODE) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   276
                    commentNode = child;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   277
                    log("Node has comment: " + node.getStringValue(), Project.MSG_DEBUG);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   278
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   279
                else {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   280
                    log("Node has no comment: " + node.toString(), Project.MSG_WARN);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   281
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   282
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   283
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   284
        return (Comment)commentNode;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   285
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   286
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   287
    public void log(String text, int level) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   288
        Project project = getRuntimeProject();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   289
        if (project != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   290
            project.log(text, level);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   291
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   292
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   293
    
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   294
    public String toString() {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   295
        return getName();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   296
    }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   297
}