buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/TargetDiamondsListener.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
/*
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     3
 * All rights reserved.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     4
 * This component and the accompanying materials are made available
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     6
 * which accompanies this distribution, and is available
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     8
 *
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
     9
 * Initial Contributors:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    10
 * Nokia Corporation - initial contribution.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    11
 *
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    12
 * Contributors:
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    13
 *
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    14
 * Description:  
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    15
 *
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    16
 */
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.helium.diamonds;
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.io.File;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    21
import java.io.FileInputStream;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    22
import java.io.IOException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    23
import java.io.InputStream;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import java.util.List;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import java.util.Map;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import org.apache.log4j.Logger;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    27
import org.apache.tools.ant.BuildEvent;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    28
import org.apache.tools.ant.Project;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    29
import org.apache.tools.ant.Target;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    30
import com.nokia.helium.core.ant.types.TargetMessageTrigger;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    31
import com.nokia.helium.core.ant.Message;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
 * Listener sending data based on target configuration to diamonds.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
public class TargetDiamondsListener extends DiamondsListenerImpl {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    38
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
    private Logger log = Logger.getLogger(TargetDiamondsListener.class);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    41
    private Map<String, TargetMessageTrigger> targetsMap;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
    private String currentTarget;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
     * Default constructor
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    public TargetDiamondsListener() {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    49
        targetsMap = DiamondsConfig.getTargetsMap();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    50
        for (String key : targetsMap.keySet()) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    51
            log.debug("target name: " + key);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    52
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    private boolean isTargetsToExecute(BuildEvent buildEvent) {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    56
        Project projectInTarget = buildEvent.getProject();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
        Target target = buildEvent.getTarget();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
        boolean retValue = false;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    59
        log.debug("isTargetsToExecute: target:" + target.getName() );
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    60
        TargetMessageTrigger targetInMap = targetsMap.get(target.getName());
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    61
        log.debug("isTargetsToExecute: targetInMap:" + targetInMap );
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    62
        if (targetInMap != null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    63
            log.debug("target: " + target.getName());
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    64
            log.debug("targetInMap: " + targetInMap);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    65
            String targetNameInMap = targetInMap.getTargetName();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    66
            log.debug("targetNameInMap: " + targetInMap.getTargetName());
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    67
            if (targetNameInMap != null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
                retValue = true;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    69
                String ifCondition = target.getIf();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    70
                if ((ifCondition != null) && (projectInTarget.getProperty(
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    71
                        projectInTarget.replaceProperties(ifCondition)) == null)) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    72
                    retValue = false;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    73
                }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    74
                String unlessCondition = target.getUnless();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    75
                if (unlessCondition != null && (projectInTarget.getProperty(
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    76
                        projectInTarget.replaceProperties(unlessCondition)) != null)) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    77
                    retValue = false;
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
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
        return retValue;
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
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    85
     * Function to process logging info during beginning of target execution. This checks that the
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    86
     * current target execution is in config and requires some data to be send it to diamonds.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
     * 
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    88
     * @param event of target execution.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
    public void targetBegin(BuildEvent buildEvent) throws DiamondsException {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    91
        initDiamondsClient();
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
        String targetName = buildEvent.getTarget().getName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        if (isTargetsToExecute(buildEvent)) {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
            currentTarget = targetName;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
        }
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
    /**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    99
     * Function to process logging info during end of build. If the target in config, sends the data
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   100
     * to diamonds (uses the template conversion if needed).
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
     * 
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   102
     * @param event of target execution.
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
     */
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   104
    public void targetEnd(BuildEvent buildEvent) throws DiamondsException {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   105
        String targetName = buildEvent.getTarget().getName();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   106
        if (isTargetsToExecute(buildEvent)) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   107
            if (currentTarget != null && currentTarget.equals(targetName)) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   108
                log.debug("targetEnd: " + targetName);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   109
                if (getIsInitialized()) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   110
                    log.debug("diamonds:TargetDiamondsListener:finished recording, sending data to diamonds for target: "
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   111
                        + buildEvent.getTarget().getName());
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   112
                    sendTargetData(buildEvent, buildEvent.getTarget().getProject());
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
                }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   114
                currentTarget = null;
587
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
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   119
    private void sendData(InputStream stream) throws DiamondsException {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   120
        String urlPath = DiamondsConfig.getBuildId();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   121
        getDiamondsClient().sendData(stream, urlPath);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   122
        log.debug("urlPath:" + urlPath);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   123
    }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   124
    /**
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   125
     * Sends the data to diamonds. First it looks if the template with target name exists, then it
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   126
     * looks for input source file from config, if ant properties required from config, it uses it
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   127
     * for template conversion. If no template file exists, sends the data directly.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   128
     * 
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   129
     * @param event of target execution.
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   130
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   131
    private void sendTargetData(BuildEvent buildEvent, Project project) throws DiamondsException {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   132
        TargetMessageTrigger targetMap = targetsMap.get(currentTarget);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   133
        if (targetMap != null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   134
            
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   135
            List<Message> messageList = targetMap.getMessageList();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   136
            for ( Message message : messageList ) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   137
                try {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   138
                    File tempFile = streamToTempFile(message.getInputStream());
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   139
                    tempFile.deleteOnExit();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   140
                    sendData(new FileInputStream(tempFile));
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   141
                    mergeToFullResults(new FileInputStream(tempFile));
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   142
                } catch (IOException iex) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   143
                    throw new DiamondsException("error closing the stream while sending data");
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   144
                }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   145
                catch (com.nokia.helium.core.MessageCreationException mex) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   146
                    log.debug("IOException while retriving message:", mex);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   147
                    throw new DiamondsException("error during message retrival");
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   148
                }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   149
            }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   150
        }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
   151
    }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
}