buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/DataNode.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
/*
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.internaldata.ant.listener;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    19
import java.util.Date;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import java.util.Iterator;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.util.Vector;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
 * Data node object to iterate, keep timing, name, maintain parallel tasks for the node. 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
public abstract class DataNode {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
    // Job number management
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
    private static long commonJobId;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
    private long jobId = commonJobId++;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
    // Parent node
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
    private DataNode parent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
    // children nodes.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
    private Vector<DataNode> children = new Vector<DataNode>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
    // Statistics about the time.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
    private Date startTime;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
    private Date endTime;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
    // Get the thread id. this is important for parallel tasks.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
    private long threadId = Thread.currentThread().getId();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
    // reference for the data.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    private Object reference; 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    public DataNode(DataNode parent, Object reference) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
        this.parent = parent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
        if (parent != null) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
            parent.add(this);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
        this.setStartTime(new Date());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
        this.setReference(reference);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
     * Method used to register a child to it's parent.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
     * @param child, the child to register.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    public void add(DataNode child) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
        children.add(child);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
     * Return an iterator on this node children
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
     * @return the iterator
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    public Iterator<DataNode> iterator() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
        return children.iterator();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
    }
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
     * Method used to remove a node from it's parent
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
     * @param child, the child to remove.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
    public void remove(DataNode child) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
        children.remove(child);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
    }
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
     * Is the node containing any children.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
     * @return true is the node is empty
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
    public boolean isEmpty() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
        return children.isEmpty();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
     * Returns the parent node, or null if the root.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
     * @return a DataNode.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    public DataNode getParent() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
        return parent;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
    public Date getStartTime() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
        return startTime;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
    public void setStartTime(Date startTime) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
        this.startTime = startTime;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
     * Make is reliable: if end time doesn't exists let's use the start time.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
    public Date getEndTime() {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   111
        if (endTime != null) { 
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
            return endTime;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   113
        } else {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            return this.getStartTime();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   115
        }
587
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
    public void setEndTime(Date endTime) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
        this.endTime = endTime;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
     * Return the thread where the class has been created under.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
     * @return thread id as a long.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
    public long getThreadId() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   127
        return this.threadId;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   128
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
    public Object getReference() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
        return reference;
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
    public void setReference(Object reference) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
        this.reference = reference;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
    public long getJobId() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
        return jobId;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
     * Find a node using its reference.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
     * @param reference object
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
     * @return
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
    public DataNode find(Object reference) {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   148
        if (this.reference == reference) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   149
            return this;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   150
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
        for (Iterator<DataNode> i = children.iterator() ; i.hasNext() ; ) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
            DataNode node = i.next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
            DataNode result = node.find(reference);
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   154
            if (result != null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
                return result;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   156
            }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
        return null;
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
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
     * Name of the node. 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
     * @return name of the node (e.g target name for targets)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
    public abstract String getName();
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
     * Default string representation.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
    public String toString() {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
        return getName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
}