buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/AllTargetDiamondsListener.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/AllTargetDiamondsListener.java Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2007-2008 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.diamonds;
+
+import java.io.BufferedWriter;
+import java.io.FileInputStream;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Vector;
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.Target;
+
+/**
+ * Generate target times
+ */
+public class AllTargetDiamondsListener extends DiamondsListenerImpl {
+
+ private static Logger log = Logger.getLogger(DiamondsListenerImpl.class);
+
+ private Vector<AntTarget> antTargets = new Vector<AntTarget>();
+
+
+
+
+ /**
+ * Function to process logging info during begining of target execution
+ *
+ * @param event of target execution.
+ */
+ public void targetBegin(BuildEvent buildEvent) {
+ antTargets.add(new AntTarget(buildEvent.getTarget()));
+ }
+
+ /**
+ * Function to process logging info during end of target execution
+ *
+ * @param event of target execution.
+ */
+ public void targetEnd(BuildEvent buildEvent) {
+ for (AntTarget at : antTargets)
+ {
+ if (at.equals(buildEvent.getTarget())) {
+ at.setEndTime(new Date());
+ }
+ }
+ }
+
+ /**
+ * Function to process logging info during end of build
+ *
+ * @param event of target execution.
+ */
+ public void buildEnd(BuildEvent buildEvent) throws DiamondsException {
+ try {
+ if (isInitialized()) {
+ File tempFile = File.createTempFile("diamonds-targets", ".xml");
+ FileWriter fstream = new FileWriter(tempFile);
+ BufferedWriter out = new BufferedWriter(fstream);
+ out.write("<targets>\n");
+
+ for (AntTarget at : antTargets)
+ {
+ Calendar startcalendar = Calendar.getInstance();
+ Calendar endcalendar = Calendar.getInstance();
+ startcalendar.setTime(at.getStartTime());
+ if (at.getEndTime() != null)
+ {
+ endcalendar.setTime(at.getEndTime());
+ endcalendar.add(Calendar.SECOND, -5);
+ if (endcalendar.after(startcalendar))
+ {
+ out.write("<target>\n");
+ out.write("<name>" + at.getName() + "</name>\n");
+ out.write("<started>" + getTimeFormat().format(at.getStartTime()) + "</started>\n");
+ out.write("<finished>" + getTimeFormat().format(at.getEndTime()) + "</finished>\n");
+ out.write("</target>\n");
+ }
+ }
+ }
+
+ out.write("</targets>\n");
+ out.close();
+ FileInputStream stream = new FileInputStream(tempFile);
+ log.debug("alltargetdiamondslistener file: " + tempFile);
+ mergeToFullResults(stream);
+ stream.close();
+ stream = new FileInputStream(tempFile);
+ log.debug("diamondsclient: " + getDiamondsClient());
+ log.debug("diamondsclient: " + DiamondsConfig.getBuildId());
+ getDiamondsClient().sendData(stream, DiamondsConfig.getBuildId());
+ }
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ class AntTarget {
+ private String targetName;
+ private Date startTime;
+ private Date endTime;
+ private int hashCode;
+
+ public AntTarget(Target target)
+ {
+ targetName = target.getName();
+ hashCode = target.hashCode();
+ startTime = new Date();
+ }
+ public String getName() { return targetName; }
+ public Date getStartTime() { return startTime; }
+ public Date getEndTime() { return endTime; }
+ public void setEndTime(Date e) { endTime = e; }
+ public boolean equals(Object obj) { return obj.hashCode() == hashCode; }
+ public int hashCode() { return hashCode; }
+ }
+}
\ No newline at end of file