buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/SignalTask.java
author wbernard
Wed, 16 Jun 2010 16:51:40 +0300
changeset 588 c7c26511138f
child 628 7c4a911dc066
permissions -rw-r--r--
helium-10.0.0-bc45d50958fe
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
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    20
import org.apache.tools.ant.BuildException;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    21
import org.apache.tools.ant.Task;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    22
import org.apache.tools.ant.Target;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    23
import java.util.Vector;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    24
import com.nokia.helium.signal.ant.SignalList;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    25
import com.nokia.helium.signal.ant.types.SignalNotifierInput;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    26
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    27
/**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    28
 * This task provide a way to raise a signal.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    29
 * If the provided result is different from 0 then the mentioned signal
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    30
 * is raised.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    31
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    32
 * 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
    33
 * nested signalInput element. e.g:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    34
 * <pre>
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    35
 * &lt;target name=&quot;raise-signal&quot;&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    36
 *   &lt;-- Some computation that sets result property --&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    37
 *   &lt;property name=&quot;result&quot; value=&quot;1&quot;/&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    38
 *   
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    39
 *   &lt;hlm:signal name=&quot;compileSignal&quot; result=&quot;${result}&quot;&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    40
 *       &lt;-- Let's refer to some existing signal input configuration --&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    41
 *       &lt;hlm:signalInput refid=&quot;testDeferredSignalInput&quot; /&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    42
 *   &lt;/hlm:signal&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    43
 * &lt;/target&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    44
 * </pre>
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    45
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    46
 * 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
    47
 * if not defined the build will fail.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    48
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    49
 * @ant.task name="signal" category="Signaling"
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    50
 */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    51
public class SignalTask extends Task {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    52
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    53
    private String name;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    54
    private String message;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    55
    private Integer result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    56
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    57
    private Vector<SignalNotifierInput> signalNotifierInputs = new Vector<SignalNotifierInput>();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    58
    
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    59
    public String getMessage() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    60
        return message;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    61
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    62
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    63
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    64
     * Helper function called by ant to create the new signalinput
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    65
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    66
    public SignalNotifierInput createSignalNotifierInput() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    67
        SignalNotifierInput input =  new SignalNotifierInput();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    68
        add(input);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    69
        return input;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    70
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    71
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    72
    public SignalNotifierInput getSignalNotifierInput() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    73
        return (SignalNotifierInput)signalNotifierInputs.elementAt(0);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    74
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    75
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    76
     * Helper function to add the created signalinput
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    77
     * @param filter to be added to the filterset
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    78
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    79
    public void add(SignalNotifierInput input) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    80
        signalNotifierInputs.add(input);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    81
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    82
    
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
     * Error message.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    86
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    87
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    88
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    89
    public void setMessage(String message) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    90
        this.message = message;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    91
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    92
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    93
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    94
    public String getName() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    95
        return name;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    96
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    97
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    98
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    99
     * Signal name to emit.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   100
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   101
     * @ant.required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   102
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   103
    public void setName(String name) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   104
        this.name = name;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   105
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   106
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   107
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   108
     * integer value representing the number of errors.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   109
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   110
     * @ant.required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   111
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   112
    public void setResult(int result) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   113
        this.result = new Integer(result);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   114
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   115
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   116
    @Override
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   117
    public void execute() {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   118
        if (name == null)
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   119
            throw new BuildException("'name' attribute is not defined.");
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   120
        if (result == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   121
            result = new Integer(0);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   122
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   123
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   124
        SignalList signalList = new SignalList(getProject());
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   125
        boolean failStatus = result.intValue() != 0; 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   126
        if (failStatus) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   127
            // keep same message as earlier.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   128
            log(name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   129
                    + ": "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   130
                    + name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   131
                    + " signal failed. Expected result was 0, actual result was "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   132
                    + result);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   133
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   134
            if (message == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   135
                message = "Expected result was 0, actual result was " + result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   136
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   137
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   138
        
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   139
        // notify the user
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   140
        String targetName = "signalExceptionTarget";  
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   141
        Target target = this.getOwningTarget();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   142
        if (target != null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   143
            targetName = target.getName();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   144
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   145
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   146
        if (signalNotifierInputs.isEmpty()) {          
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   147
            Object config = getProject().getReference(name);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   148
            if (config == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   149
                throw new BuildException("Could not find signal config for signal name: " + name);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   150
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   151
            signalList.sendSignal(getName(), result.intValue() != 0);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   152
            if (result.intValue() != 0) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   153
                // keep same message as earlier.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   154
                log(name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   155
                        + ": "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   156
                        + name
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   157
                        + " signal failed. Expected result was 0, actual result was "
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   158
                        + result);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   159
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   160
                if (message == null) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   161
                    message = "Expected result was 0, actual result was " + result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   162
                }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   163
                signalList.fail(getName(), this.getOwningTarget().getName(), message);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   164
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   165
            
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   166
        } else {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   167
            signalList.processForSignal(getProject(), getSignalNotifierInput(), getName(),
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   168
                targetName, message, failStatus);
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
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   172
}