buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/listener/ExecListener.java
changeset 628 7c4a911dc066
child 645 b8d81fa19e7d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/environment/src/com/nokia/helium/environment/ant/listener/ExecListener.java	Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.helium.environment.ant.listener;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.RuntimeConfigurable;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.UnknownElement;
+
+/**
+ * Checks for uses of the <exec> task and logs them to a CSV file.
+ * 
+ * The ExecListener.file property should be used to define a file to log the output to.
+ */
+public class ExecListener implements BuildListener {
+    private static List<String> execCalls = new ArrayList<String>();
+    
+    private Logger logger = Logger.getLogger(this.getClass());
+    
+    public static List<String> getExecCalls() {
+        return execCalls;
+    }
+
+    @Override
+    public void buildStarted(BuildEvent event) {
+        logger.debug("ExecListener started");
+    }
+
+    @Override
+    public void buildFinished(BuildEvent event) {
+        try {
+            String file = event.getProject().getProperty("ExecListener.file");
+            if (file != null && file.length() > 0) {
+                FileWriter out = new FileWriter(file);
+                for (Iterator<String> iterator = execCalls.iterator(); iterator.hasNext();) {
+                    String execCall = (String) iterator.next();
+                    out.write(execCall + "\n");
+                }
+                out.close();
+            }
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void messageLogged(BuildEvent event) {
+    }
+
+    @Override
+    public void targetStarted(BuildEvent event) {
+    }
+
+    @Override
+    public void targetFinished(BuildEvent event) {
+    }
+
+    @Override
+    public void taskStarted(BuildEvent event) {
+    }
+
+    /**
+     * Attempt to log the name of the an exec task if one is executed.
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void taskFinished(BuildEvent event) {
+        Task task = event.getTask();
+        String taskName = task.getTaskName();
+        if (taskName != null && taskName.equals("exec")) {
+            logger.debug("Found exec task");
+            if (task instanceof UnknownElement) {
+                RuntimeConfigurable configurable = ((UnknownElement) task).getRuntimeConfigurableWrapper();
+                Hashtable<String, String> map = configurable.getAttributeMap();
+                String executable = (String) map.get("executable");
+                Project project = event.getProject();
+                executable = project.replaceProperties(executable);
+                logger.debug("ExecListener: executable is run: " + executable);
+                execCalls.add(executable);
+            }
+        }
+    }
+}
+
+
+