buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/SignalTask.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
child 645 b8d81fa19e7d
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     1
/*
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     3
 * All rights reserved.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     8
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    11
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    12
 * Contributors:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    13
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    14
 * Description:  
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    15
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    16
 */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    17
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    18
package com.nokia.helium.signal.ant.taskdefs;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    19
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    20
import java.util.Vector;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    21
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    22
import org.apache.tools.ant.BuildException;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    23
import org.apache.tools.ant.Target;
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    24
import org.apache.tools.ant.Task;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    25
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    26
import com.nokia.helium.signal.ant.SignalList;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    27
import com.nokia.helium.signal.ant.types.SignalNotifierInput;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    28
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    29
/**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    30
 * This task provide a way to raise a signal.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    31
 * If the provided result is different from 0 then the mentioned signal
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    32
 * is raised.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    33
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    34
 * You can emit a signal based from the signal task, its behavior will get defined by the
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    35
 * nested signalInput element. e.g:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    36
 * <pre>
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    37
 * &lt;target name=&quot;raise-signal&quot;&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    38
 *   &lt;-- Some computation that sets result property --&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    39
 *   &lt;property name=&quot;result&quot; value=&quot;1&quot;/&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    40
 *   
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    41
 *   &lt;hlm:signal name=&quot;compileSignal&quot; result=&quot;${result}&quot;&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    42
 *       &lt;-- Let's refer to some existing signal input configuration --&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    43
 *       &lt;hlm:signalInput refid=&quot;testDeferredSignalInput&quot; /&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    44
 *   &lt;/hlm:signal&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    45
 * &lt;/target&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    46
 * </pre>
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    47
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    48
 * The execution of the <code>signal</code> task will behave depending on the <code>compileSignal</code> configuration,
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    49
 * if not defined the build will fail.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    50
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    51
 * @ant.task name="signal" category="Signaling"
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    52
 */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    53
public class SignalTask extends Task {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    54
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    55
    private String name;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    56
    private String message;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    57
    private Integer result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    58
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    59
    private Vector<SignalNotifierInput> signalNotifierInputs = new Vector<SignalNotifierInput>();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    60
    
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    61
    public String getMessage() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    62
        return message;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    63
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    64
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    65
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    66
     * Helper function called by ant to create the new signalinput
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    67
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    68
    public SignalNotifierInput createSignalNotifierInput() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    69
        SignalNotifierInput input =  new SignalNotifierInput();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    70
        add(input);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    71
        return input;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    72
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    73
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    74
    public SignalNotifierInput getSignalNotifierInput() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    75
        return (SignalNotifierInput)signalNotifierInputs.elementAt(0);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    76
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    77
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    78
     * Helper function to add the created signalinput
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    79
     * @param filter to be added to the filterset
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    80
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    81
    public void add(SignalNotifierInput input) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    82
        signalNotifierInputs.add(input);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    83
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    84
    
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    85
    
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    86
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    87
     * Error message.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    88
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    89
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    90
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    91
    public void setMessage(String message) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    92
        this.message = message;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    93
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    94
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    95
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    96
    public String getName() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    97
        return name;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    98
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    99
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   100
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   101
     * Signal name to emit.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   102
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   103
     * @ant.required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   104
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   105
    public void setName(String name) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   106
        this.name = name;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   107
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   108
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   109
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   110
     * integer value representing the number of errors.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   111
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   112
     * @ant.required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   113
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   114
    public void setResult(int result) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   115
        this.result = new Integer(result);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   116
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   117
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   118
    @Override
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   119
    public void execute() {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   120
        if (name == null) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   121
            throw new BuildException("'name' attribute is not defined.");
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   122
        }
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   123
        if (result == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   124
            result = new Integer(0);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   125
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   126
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   127
        SignalList signalList = new SignalList(getProject());
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   128
        boolean failStatus = result.intValue() != 0; 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   129
        if (failStatus) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   130
            // keep same message as earlier.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   131
            log(name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   132
                    + ": "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   133
                    + name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   134
                    + " signal failed. Expected result was 0, actual result was "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   135
                    + result);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   136
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   137
            if (message == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   138
                message = "Expected result was 0, actual result was " + result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   139
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   140
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   141
        
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   142
        // notify the user
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   143
        String targetName = "signalExceptionTarget";  
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   144
        Target target = this.getOwningTarget();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   145
        if (target != null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   146
            targetName = target.getName();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   147
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   148
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   149
        if (signalNotifierInputs.isEmpty()) {          
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   150
            Object config = getProject().getReference(name);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   151
            if (config == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   152
                throw new BuildException("Could not find signal config for signal name: " + name);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   153
            }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   154
            signalList.processForSignal(getProject(), this.getSignalNotifierInput(), this.name, 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   155
                    this.getOwningTarget().getName(), message, result.intValue() != 0);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   156
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   157
            if (result.intValue() != 0) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   158
                // keep same message as earlier.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   159
                log(name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   160
                        + ": "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   161
                        + name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   162
                        + " signal failed. Expected result was 0, actual result was "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   163
                        + result);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   164
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   165
                if (message == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   166
                    message = "Expected result was 0, actual result was " + result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   167
                }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   168
                signalList.fail(getName(), this.getOwningTarget().getName(), message);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   169
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   170
            
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   171
        } else {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   172
            signalList.processForSignal(getProject(), getSignalNotifierInput(), getName(),
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   173
                targetName, message, failStatus);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   174
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   175
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   176
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   177
}