diff -r 85df38eb4012 -r df88fead2976 buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java --- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java Tue Apr 27 08:33:08 2010 +0300 +++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java Thu Jul 22 17:08:43 2010 +0300 @@ -18,14 +18,14 @@ package com.nokia.helium.diamonds; import org.apache.tools.ant.BuildEvent; + + import org.apache.tools.ant.Target; import org.apache.tools.ant.Project; import org.apache.tools.ant.BuildException; - - - import java.util.Date; - +import java.util.LinkedHashMap; +import java.util.Set; import java.util.HashMap; import java.util.List; import java.util.Enumeration; @@ -35,11 +35,8 @@ import java.util.Vector; import java.util.ArrayList; import org.apache.log4j.Logger; - import com.nokia.helium.core.PropertiesSource; import com.nokia.helium.core.TemplateInputSource; - - import com.nokia.helium.core.XMLTemplateSource; /** @@ -57,15 +54,16 @@ private Map stageTargetEndMap = new HashMap(); + private Map stageStartTargetMap = new HashMap(); + + private Map stageStartTargetTimeMap = new HashMap(); + private boolean isTargetMapInitialized; private Project project; - private String currentStartTargetName; - private List stages; - private Date currentStartTargetTime; public StageDiamondsListener() { stages = DiamondsConfig.getStages(); @@ -73,6 +71,7 @@ public void targetBegin(BuildEvent buildEvent) throws DiamondsException { project = buildEvent.getProject(); + int hashCode = project.hashCode(); String targetName = buildEvent.getTarget().getName(); if (!isTargetMapInitialized && stages != null) { log @@ -80,16 +79,49 @@ initStageTargetsMap(); isTargetMapInitialized = true; } - log.debug("targetBegin targetName: " + targetName + " - currentStartTargetName:" + currentStartTargetName); - if (currentStartTargetName == null) { - findAndSetStartTimeForTargetInStageList(targetName); + String targetNameWithHashCode = targetName + "-" + hashCode; + log.debug("targetBegin: targetNameWithHashCode: " + targetNameWithHashCode); + log.debug("targetBegin targetName: " + targetName + + " - currentStartTargetName:" + stageStartTargetMap.get(targetNameWithHashCode)); + if (stageStartTargetMap.get(targetNameWithHashCode) == null) { + log.debug("looking for start target match and associating time to it"); + findAndSetStartTimeForTargetInStageList(targetName, targetNameWithHashCode); } } + + private Date getStartTime(Stage stage, int hasCode) { + String startTargetName = stage.getStartTargetName(); + String endTargetName = stage.getEndTargetName(); + for (Iterator> listIter = stageTargetBeginList.iterator(); listIter + .hasNext();) { + Map stageMap = listIter.next(); + if (stageMap.get(startTargetName) != null && + stageMap.get(endTargetName) != null) { + Set targetSet = stageMap.keySet(); + for (String key : targetSet) { + log.debug("key: " + key); + Date time = stageMap.get(key); + log.debug("time: " + time); + if ( time != INVALID_DATE) { + return time; + } + } + } + } + throw new BuildException("No time recorded " + + "for stage:" + stage.getStageName()); + } @SuppressWarnings("unchecked") public void targetEnd(BuildEvent buildEvent) throws DiamondsException { + String targetName = buildEvent.getTarget().getName(); + project = buildEvent.getProject(); + int hashCode = project.hashCode(); + String targetNameWithHashCode = targetName + "-" + hashCode; + log.debug("targetEnd: targetNamewith-hashcode: " + targetNameWithHashCode); + String currentStartTargetName = + stageStartTargetMap.get(targetNameWithHashCode); if (currentStartTargetName != null) { - String targetName = buildEvent.getTarget().getName(); Stage stage = stageTargetEndMap.get(targetName); if (stage != null && getIsInitialized() ) { //initDiamondsClient(); @@ -101,12 +133,12 @@ if (sourceFile == null) { sourceFile = getSourceFile(stageName); } + Date startTime = getStartTime(stage, hashCode); project.setProperty("logical.stage", stageName); project.setProperty("stage.start.time", getTimeFormat() - .format(currentStartTargetTime)); + .format(startTime)); project.setProperty("stage.end.time", getTimeFormat() .format(new Date())); - currentStartTargetName = null; // Look for template file with stage name String stageTemplateFileName = stageName + ".xml.ftl"; File stageTemplateFile = new File(stageTemplateFileName); @@ -123,9 +155,6 @@ .getTemplateDir(), stageTemplateFileName, output, sourceList); mergeToFullResults(new File(output)); - - // String mergedFile = mergeFiles(new File(output)); - log.info("Sending data to diamonds for stage: " + stageName); getDiamondsClient().sendData(output, DiamondsConfig @@ -166,18 +195,20 @@ } } - private void findAndSetStartTimeForTargetInStageList(String targetName) - throws DiamondsException { + private void findAndSetStartTimeForTargetInStageList(String targetName, + String targetNameWithHashCode) throws DiamondsException { for (Iterator> listIter = stageTargetBeginList.iterator(); listIter .hasNext();) { Map stageMap = listIter.next(); Date targetTime = stageMap.get(targetName); if (targetTime != null && targetTime.equals(INVALID_DATE)) { - log.debug("diamonds:StageDiamondsListener: started recording for stage-target: " + log.debug("diamonds:StageDiamondsListener: started recording for stage-target-----: " + targetName); + log.debug("findtime: targetNamewith-hashcode: " + targetNameWithHashCode); + log.debug("findtime: time: " + new Date()); stageMap.put(targetName, new Date()); - currentStartTargetName = targetName; - currentStartTargetTime = new Date(); + stageStartTargetMap.put(targetNameWithHashCode, targetName); + stageStartTargetTimeMap.put(targetNameWithHashCode, new Date()); } } } @@ -189,7 +220,7 @@ // stage begin process Stage stage = iter.next(); String startTargetName = stage.getStartTargetName(); - Map stageMap = new HashMap(); + Map stageMap = new LinkedHashMap(); Vector arrayList = null; try { arrayList = project.topoSort(startTargetName, project