buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java
changeset 628 7c4a911dc066
parent 588 c7c26511138f
child 645 b8d81fa19e7d
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java	Fri Aug 13 14:59:05 2010 +0300
@@ -20,22 +20,22 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
+import java.util.Map.Entry;
 
+import org.apache.log4j.Logger;
 import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Target;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.LogLevel;
-import org.apache.tools.ant.BuildException;
-import org.apache.log4j.Logger;
 
+import com.nokia.helium.core.ant.types.Stage;
 import com.nokia.helium.logger.ant.types.StageLogging;
-import com.nokia.helium.logger.ant.types.Stage;
 
 /**
  * Ant logging class for each Stage.
@@ -70,7 +70,7 @@
         stageRecordMap = new HashMap<String, StageLogging>();
         depStartTargetMap = new HashMap<String, Vector<Target>>();
         stageStartTargetMap = new HashMap<String, Target>();
-        initStagesInformation(project);
+        initialize(project);
     }
 
     /**
@@ -87,13 +87,12 @@
      */
     public void handleTargetFinished(BuildEvent event) {
         // log.debug("Finished target [" + event.getTarget().getName() + "]");
-        if (isEndTarget(event.getTarget().getName())
-                && getIsStageRecordingHappening() && (getLoggingStarted())) {
-            log.debug("Stopping stage logging for  [" + currentStageName
-                    + "] for target [" + event.getTarget().getName() + "]");
+        if (isEndTarget(event.getTarget().getName()) && getIsStageRecordingHappening()
+            && (getLoggingStarted())) {
+            log.debug("Stopping stage logging for  [" + currentStageName + "] for target ["
+                + event.getTarget().getName() + "]");
             stopLog(currentStageName, "default");
-            if (!isDefaultStageStarted)
-            {
+            if (!isDefaultStageStarted) {
                 startLog("default");
                 isDefaultStageStarted = true;
             }
@@ -116,11 +115,10 @@
         if (currentStageName == null && !getIsStageRecordingHappening() && getLoggingStarted()) {
             String stageName = isStageValid(event.getTarget(), event.getProject());
             if (stageName != null) {
-                log.debug("Started stage logging for  [" + stageName
-                        + "] for target [" + event.getTarget().getName() + "]");
+                log.debug("Started stage logging for  [" + stageName + "] for target ["
+                    + event.getTarget().getName() + "]");
 
-                if (isDefaultStageStarted)
-                {
+                if (isDefaultStageStarted) {
                     stopLog("default", stageName);
                     isDefaultStageStarted = false;
                 }
@@ -143,13 +141,12 @@
     public void handleBuildFinished(BuildEvent event) {
 
         /*
-         * If any stage logging is happening stop logging into stage log file
-         * and switch to main/default ant log file.
+         * If any stage logging is happening stop logging into stage log file and switch to
+         * main/default ant log file.
          */
         if (getLoggingStarted() && getIsStageRecordingHappening()) {
             stopLog(currentStageName, "default");
-            if (!isDefaultStageStarted)
-            {
+            if (!isDefaultStageStarted) {
                 startLog("default");
                 isDefaultStageStarted = true;
             }
@@ -157,8 +154,7 @@
         }
 
         /*
-         * If default stage logging happening stop logging into default ant log
-         * file.
+         * If default stage logging happening stop logging into default ant log file.
          */
         if (isDefaultStageStarted && getLoggingStarted()) {
             stopLog("default", null, event);
@@ -187,8 +183,7 @@
     /**
      * Sets the level to which this recorder entry should log to.
      * 
-     * @param level
-     *            the level to set.
+     * @param level the level to set.
      * @see VerbosityLevelChoices
      */
     public void setLoglevel(VerbosityLevelChoices level) {
@@ -196,8 +191,8 @@
     }
 
     /**
-     * A list of possible values for the <code>setLoglevel()</code> method.
-     * Possible values include: error, warn, info, verbose, debug.
+     * A list of possible values for the <code>setLoglevel()</code> method. Possible values include:
+     * error, warn, info, verbose, debug.
      */
     public static class VerbosityLevelChoices extends LogLevel {
     }
@@ -218,8 +213,7 @@
      * @return
      */
     private String getDateTime() {
-        DateFormat dateFormat = new SimpleDateFormat(
-                "EE yyyy/MM/dd HH:mm:ss:SS aaa");
+        DateFormat dateFormat = new SimpleDateFormat("EE yyyy/MM/dd HH:mm:ss:SS aaa");
         Date date = new Date();
         return dateFormat.format(date);
     }
@@ -241,30 +235,28 @@
      * @param message
      * @param task
      */
-    public void doLoggingAction(String stageName, boolean action,
-            String message, Task task, Target target) {
+    public void doLoggingAction(String stageName, boolean action, String message, Task task,
+        Target target) {
         String time = getDateTime();
         File fileName;
         if (stageName.equalsIgnoreCase("default")) {
-            if (stageRecordMap.get("default") == null)
+            if (stageRecordMap.get("default") == null) {
                 throw new BuildException("stageRecordMap.get('default') is null");
+            }
             fileName = stageRecordMap.get("default").getDefaultOutput();
         } else {
             fileName = stageRecordMap.get(stageName).getOutput();
         }
 
         if (fileName.exists()) {
-            for (Map.Entry<File, RecorderEntry> entry : recorderEntries
-                    .entrySet()) {
-                if (fileName.equals(entry.getKey())
-                        && (getRecorderEntry(fileName) != null)
-                        && (fileCreatedMap.get(fileName))) {
+            for (Map.Entry<File, RecorderEntry> entry : recorderEntries.entrySet()) {
+                if (fileName.equals(entry.getKey()) && (getRecorderEntry(fileName) != null)
+                    && (fileCreatedMap.get(fileName))) {
                     RecorderEntry recorderEntry = getRecorderEntry(fileName);
-                    recorderEntry.addLogMessage(message + " logging into "
-                            + fileName + " from " + task.getTaskName()
-                            + " task at " + time);
-                    log.debug(message + " logging into " + fileName + " from "
-                            + task.getTaskName() + " task at " + time);
+                    recorderEntry.addLogMessage(message + " logging into " + fileName + " from "
+                        + task.getTaskName() + " task at " + time);
+                    log.debug(message + " logging into " + fileName + " from " + task.getTaskName()
+                        + " task at " + time);
                     recorderEntry.setRecordState(action);
                     break;
                 }
@@ -273,15 +265,13 @@
     }
 
     /**
-     * Called by LogReplace task to find and replace any property values which
-     * are not updated.
+     * Called by LogReplace task to find and replace any property values which are not updated.
      * 
      * @param regExp
      */
     public void addRegExp(String regExp) {
         if (!regExp.equals("")) {
-            for (Map.Entry<File, RecorderEntry> entry : recorderEntries
-                    .entrySet()) {
+            for (Map.Entry<File, RecorderEntry> entry : recorderEntries.entrySet()) {
                 RecorderEntry recorderEntry = entry.getValue();
                 recorderEntry.addRegexp(regExp);
             }
@@ -289,57 +279,57 @@
     }
 
     /**
-     * To initialize stages information.
+     * Initializing stage logging data.
+     * Gathering all stagerecord.
      * 
-     * @param proj
-     */
-
-    @SuppressWarnings("unchecked")
-    private void initStagesInformation(Project proj) {
-        log.debug("initStagesInformation: project: " + proj.getName());
-        Hashtable<String, Object> references = proj.getReferences();
-        Enumeration<String> keyEnum = references.keys();
-        validateDefaultStage(references);
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (references.get(key) instanceof Stage) {
-                Stage tempStage = (Stage) references.get(key);
-                validateStageInformation(key, tempStage);
-                log.debug("Found  stage [" + key + "] for recording");
-                stagesMapping.put(key, (Stage) references.get(key));
-                getStageRecordInformation(proj, key);
-                initDependentTargetMap(proj, key, tempStage.getStartTarget(),
-                        tempStage.getEndTarget());
-            }
-        }
-    }
-
-    /**
-     * To initialize stage record information.
-     * 
-     * @param proj
-     * @param stageKey
+     * @param project
      */
     @SuppressWarnings("unchecked")
-    private void getStageRecordInformation(Project proj, String stageKey) {
-        Hashtable<String, Object> references = proj.getReferences();
-        matchStageName(references, stageKey);
-        Enumeration<String> keyEnum = references.keys();
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (references.get(key) instanceof StageLogging) {
-                StageLogging tempStageLogging = (StageLogging) references
-                        .get(key);
-                if ((tempStageLogging.getStageRefID() != null)
-                        && (tempStageLogging.getStageRefID().equals(stageKey))) {
-                    validateStageLogging(key, tempStageLogging);
-                    stageRecordMap.put(stageKey, tempStageLogging);
-                    return;
+    private void initialize(Project project) {
+        Map<String, Object> references = (Hashtable<String, Object>)project.getReferences();
+        //matchStageName(references, stageKey);
+        for (Entry<String, Object> entry : references.entrySet()) {
+            if (entry.getValue() instanceof StageLogging) {
+                StageLogging tempStageLogging = (StageLogging)entry.getValue();
+                // Is the stagerecord having a defaultoutput attribute,
+                // if yes, it is the default recorder.
+                if (tempStageLogging.getDefaultOutput() != null) {
+                    stageRecordMap.put("default", tempStageLogging);                    
+                    registerRecorderEntry(tempStageLogging.getDefaultOutput(), tempStageLogging, StatusAndLogListener.getStatusAndLogListener().getProject());
+                } else if (tempStageLogging.getStageRefID() != null) {
+                    if (references.containsKey(tempStageLogging.getStageRefID())) {
+                        if (references.get(tempStageLogging.getStageRefID()) instanceof Stage) {
+                            // Check the stage
+                            Stage stage = (Stage)references.get(tempStageLogging.getStageRefID());
+                            validateStageInformation(tempStageLogging.getStageRefID(), stage);
+                            log.debug("Found  stage [" + tempStageLogging.getStageRefID() + "] for recording");
+                            stagesMapping.put(tempStageLogging.getStageRefID(), stage);
+                            //  check the stage logging.
+                            validateStageLogging(entry.getKey(), tempStageLogging);
+                            stageRecordMap.put(tempStageLogging.getStageRefID(), tempStageLogging);
+                        } else {
+                            throw new BuildException("Invalid stagerecord stageRefId attribute value, " + 
+                                    "the '" + tempStageLogging.getStageRefID() + "' id doesn't refer to a stage type at " + 
+                                    tempStageLogging.getLocation().toString());
+                            
+                        }
+                    } else {
+                        throw new BuildException("Invalid stagerecord stageRefId attribute value, " + 
+                                "the '" + tempStageLogging.getStageRefID() + "' id doesn't exist at " + 
+                                tempStageLogging.getLocation().toString());
+                    }
+                } else {
+                    throw new BuildException("Invalid stagerecord configuration, " + 
+                            "the stageRefId attribute is not defined at " +
+                            tempStageLogging.getLocation().toString());
                 }
             }
         }
+        if (!stageRecordMap.containsKey("default")) {
+            throw new BuildException("There must be one default stagerecord datatype.");
+        }
     }
-
+    
     /**
      * To start logging for respective stage.
      * 
@@ -355,12 +345,12 @@
             fileName = stageRecordMap.get("default").getDefaultOutput();
             stageLogging = stageRecordMap.get("default");
             message = "Starting logging into " + fileName + " at " + time;
-        } else {
+        }
+        else {
             fileName = stageRecordMap.get(stageName).getOutput();
             stageLogging = stageRecordMap.get(stageName);
             this.isStageRecordingHappening = true;
-            message = "Starting logging for " + stageName + " into " + fileName
-                    + " at " + time;
+            message = "Starting logging for " + stageName + " into " + fileName + " at " + time;
         }
         if (getRecorderEntry(fileName) != null) {
             RecorderEntry recorderEntry = getRecorderEntry(fileName);
@@ -379,7 +369,8 @@
      * @param stageLogging
      * @return
      */
-    private boolean isFilePresent(RecorderEntry recorderEntry, File fileName, StageLogging stageLogging) {
+    private boolean isFilePresent(RecorderEntry recorderEntry, File fileName,
+        StageLogging stageLogging) {
         log.debug("isFilePresent? " + fileName);
         if (!fileCreatedMap.get(fileName)) {
             if (!fileName.getParentFile().exists()) {
@@ -388,13 +379,15 @@
             }
             if (fileName.exists()) {
                 long timestamp = System.currentTimeMillis();
-                getProject().log("Backing up of " + fileName + " into " + fileName + "." + timestamp);
+                getProject().log("Backing up of " + fileName + " into " + fileName + "."
+                    + timestamp);
                 fileName.renameTo(new File(fileName.getAbsoluteFile() + "." + timestamp));
             }
             recorderEntry.openFile(stageLogging.getAppend());
             fileCreatedMap.put(fileName, true);
             return true;
-        } else {
+        }
+        else {
             return true;
         }
 
@@ -417,8 +410,7 @@
      * @param startStageName
      * @param event
      */
-    private void stopLog(String stopStageName, String startStageName,
-            BuildEvent event) {
+    private void stopLog(String stopStageName, String startStageName, BuildEvent event) {
         File fileName;
         String message;
         String time = getDateTime();
@@ -426,17 +418,19 @@
         if (stopStageName.equals("default")) {
             fileName = stageRecordMap.get("default").getDefaultOutput();
             message = "Stopping logging into " + fileName + " at " + time;
-            if (startStageName != null)
+            if (startStageName != null) {
                 message = message + "\nStarting logging into "
-                        + stageRecordMap.get(startStageName).getOutput();
-        } else {
+                    + stageRecordMap.get(startStageName).getOutput();
+            }
+        }
+        else {
             fileName = stageRecordMap.get(stopStageName).getOutput();
             this.isStageRecordingHappening = false;
-            message = "Stopping logging for " + stopStageName + " into "
-                    + fileName + " at " + time;
-            if (startStageName != null)
+            message = "Stopping logging for " + stopStageName + " into " + fileName + " at " + time;
+            if (startStageName != null) {
                 message = message + "\nResuming logging into "
-                        + stageRecordMap.get("default").getDefaultOutput();
+                    + stageRecordMap.get("default").getDefaultOutput();
+            }
         }
         if (getRecorderEntry(fileName) != null) {
             RecorderEntry recorderEntry = getRecorderEntry(fileName);
@@ -456,8 +450,7 @@
      * @param stageLogging
      * @param proj
      */
-    private void registerRecorderEntry(File fileName,
-            StageLogging stageLogging, Project proj) {
+    private void registerRecorderEntry(File fileName, StageLogging stageLogging, Project proj) {
         log.debug("Registering recorderentry for log file [" + fileName + "]");
         RecorderEntry recorderEntry = getRecorder(fileName);
         antLogLevel.setValue(stageLogging.getLogLevel());
@@ -465,8 +458,9 @@
         recorderEntry.setMessageOutputLevel(loglevel);
         recorderEntry.setEmacsMode(false);
         recorderEntry.setRecordState(false);
-        if (fileCreatedMap.get(fileName) == null)
+        if (fileCreatedMap.get(fileName) == null) {
             fileCreatedMap.put(fileName, false);
+        }
     }
 
     /**
@@ -477,29 +471,29 @@
      * @return
      */
     private String isStageValid(Target target, Project proj) {
-        //if (!proj.getName().equals(StatusAndLogListener.getStatusAndLogListener().getProject().getName()) && (StatusAndLogListener.getStatusAndLogListener().getProject().getName() != null)) {
-            initSubProjectDependentTarget(proj);
-        //}
+        // if
+        // (!proj.getName().equals(StatusAndLogListener.getStatusAndLogListener().getProject().getName())
+        // && (StatusAndLogListener.getStatusAndLogListener().getProject().getName() != null)) {
+        initSubProjectDependentTarget(proj);
+        // }
         for (Map.Entry<String, Stage> entry : stagesMapping.entrySet()) {
             Stage stage = entry.getValue();
             if (stage.getStartTarget().equals(target.getName())
-                    && validateStageTargets(proj, stage.getStartTarget(), stage
-                            .getEndTarget())) {
-                log.debug("Found stage [" + entry.getKey() + "] for target ["
-                        + target.getName() + "]");
+                && validateStageTargets(proj, stage.getStartTarget(), stage.getEndTarget())) {
+                log.debug("Found stage [" + entry.getKey() + "] for target [" + target.getName()
+                    + "]");
                 return entry.getKey();
             }
             if (stageStartTargetMap.get(entry.getKey()) != null) {
-                if (stageStartTargetMap.get(entry.getKey()).getName().equals(
-                        target.getName())) {
-                    log.debug("Found stage [" + entry.getKey()
-                            + "] for dependent target [" + target.getName()
-                            + "]");
+                if (stageStartTargetMap.get(entry.getKey()).getName().equals(target.getName())) {
+                    log.debug("Found stage [" + entry.getKey() + "] for dependent target ["
+                        + target.getName() + "]");
                     return entry.getKey();
                 }
-            } else if (isDependentTarget(target, entry.getKey())) {
-                log.debug("Found stage [" + entry.getKey()
-                        + "] for dependent target [" + target.getName() + "]");
+            }
+            else if (isDependentTarget(target, entry.getKey())) {
+                log.debug("Found stage [" + entry.getKey() + "] for dependent target ["
+                    + target.getName() + "]");
                 return entry.getKey();
             }
         }
@@ -515,15 +509,13 @@
 
     private boolean isEndTarget(String targetName) {
         if (stagesMapping.get(currentStageName) != null) {
-            return stagesMapping.get(currentStageName).getEndTarget().equals(
-                    targetName);
+            return stagesMapping.get(currentStageName).getEndTarget().equals(targetName);
         }
         return false;
     }
 
     /**
-     * To validate is the endtarget and starttarget are present in the current
-     * project.
+     * To validate is the endtarget and starttarget are present in the current project.
      * 
      * @param proj
      * @param startTarget
@@ -532,12 +524,10 @@
      */
 
     @SuppressWarnings("unchecked")
-    private boolean validateStageTargets(Project proj, String startTarget,
-            String endTarget) {
+    private boolean validateStageTargets(Project proj, String startTarget, String endTarget) {
 
         Hashtable<String, String> antTargets = proj.getTargets();
-        return antTargets.containsKey(startTarget)
-                && antTargets.containsKey(endTarget);
+        return antTargets.containsKey(startTarget) && antTargets.containsKey(endTarget);
     }
 
     /**
@@ -580,8 +570,8 @@
      * @param endTarget
      */
     @SuppressWarnings("unchecked")
-    private void initDependentTargetMap(Project proj, String stageKey,
-            String startTarget, String endTarget) {
+    private void initDependentTargetMap(Project proj, String stageKey, String startTarget,
+        String endTarget) {
         Vector<Target> arrayList = null;
         if (validateStageTargets(proj, startTarget, endTarget)) {
             arrayList = proj.topoSort(startTarget, proj.getTargets(), false);
@@ -605,8 +595,7 @@
 
         for (Map.Entry<String, Stage> entry : stagesMapping.entrySet()) {
             if (depStartTargetMap.get(entry.getKey()) == null) {
-                initDependentTargetMap(proj, entry.getKey(), entry.getValue()
-                        .getStartTarget(), entry.getValue().getEndTarget());
+                initDependentTargetMap(proj, entry.getKey(), entry.getValue().getStartTarget(), entry.getValue().getEndTarget());
             }
         }
     }
@@ -621,12 +610,11 @@
 
         if (stage.getStartTarget() == null) {
             throw new BuildException("'starttarget' for stage '" + stageKey
-                    + "' should not be null.");
+                + "' should not be null.");
         }
 
         if (stage.getEndTarget() == null) {
-            throw new BuildException("'endtarget' for stage '" + stageKey
-                    + "' should not be null.");
+            throw new BuildException("'endtarget' for stage '" + stageKey + "' should not be null.");
         }
     }
 
@@ -636,67 +624,13 @@
      * @param stagerefid
      * @param stageLogging
      */
-    private void validateStageLogging(String stagerefid,
-            StageLogging stageLogging) {
+    private void validateStageLogging(String stagerefid, StageLogging stageLogging) {
 
         if (stageLogging.getOutput() == null) {
-            throw new BuildException("'output' attribute for stagelogging '"
-                    + stagerefid + "' should not be null.");
+            throw new BuildException("'output' attribute for stagelogging '" + stagerefid
+                + "' should not be null.");
         }
-        registerRecorderEntry(stageLogging.getOutput(), stageLogging,
-                StatusAndLogListener.getStatusAndLogListener().getProject());
-    }
-
-    /**
-     * To validate default stage.
-     * 
-     * @param stageRecord
-     */
-    private void validateDefaultStage(Hashtable<String, Object> stageRecord) {
-
-        Enumeration<String> keyEnum = stageRecord.keys();
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (stageRecord.get(key) instanceof StageLogging) {
-                StageLogging tempStageLogging = (StageLogging) stageRecord
-                        .get(key);
-                if ((tempStageLogging.getStageRefID() == null)
-                        && (tempStageLogging.getDefaultOutput() != null)) {
-                    stageRecordMap.put("default", tempStageLogging);
-                    registerRecorderEntry(tempStageLogging.getDefaultOutput(),
-                            tempStageLogging, StatusAndLogListener
-                                    .getStatusAndLogListener().getProject());
-                    return;
-                }
-            }
-        }
-        throw new BuildException("There should be one default stagerecord datatype.");
-    }
-
-    /**
-     * To validate respective stagelogging for stage datatype.
-     * 
-     * @param stageRecord
-     * @param stageKey
-     */
-    private void matchStageName(Hashtable<String, Object> stageRecord,
-            String stageKey) {
-
-        Enumeration<String> keyEnum = stageRecord.keys();
-        while (keyEnum.hasMoreElements()) {
-            String key = keyEnum.nextElement();
-            if (stageRecord.get(key) instanceof StageLogging) {
-                StageLogging tempStageLogging = (StageLogging) stageRecord
-                        .get(key);
-                if ((tempStageLogging.getStageRefID() != null)
-                        && (tempStageLogging.getStageRefID().equals(stageKey))) {
-                    return;
-                }
-            }
-        }
-        throw new BuildException(
-                "there is no stagelogging datatype matching for stage '"
-                        + stageKey + "'");
+        registerRecorderEntry(stageLogging.getOutput(), stageLogging, StatusAndLogListener.getStatusAndLogListener().getProject());
     }
 
     /**