helium-10.0.0-bc45d50958fe
authorwbernard
Wed, 16 Jun 2010 16:51:40 +0300
changeset 588 c7c26511138f
parent 587 85df38eb4012
child 590 360bd6b35136
child 628 7c4a911dc066
helium-10.0.0-bc45d50958fe
buildframework/helium/builder/build.xml
buildframework/helium/builder/delivery.ant.xml
buildframework/helium/builder/java/config/java_checkstyle_config.xml
buildframework/helium/builder/java/macros.ant.xml
buildframework/helium/builder/python/macros.ant.xml
buildframework/helium/config/diamonds_config.xml.ftl
buildframework/helium/config/ivy/ivy.xml
buildframework/helium/config/ivy/modules/ccm-6.5.ivy.xml
buildframework/helium/config/ivy/modules/ccm-6.5_7.1.ivy.xml
buildframework/helium/config/ivy/tools_ivy_settings.xml
buildframework/helium/config/metadata_filter_config_default.ant.xml
buildframework/helium/config/signaling_config_default.ant.xml
buildframework/helium/config/version.txt
buildframework/helium/doc/api_rst/antlib.rst.ftl
buildframework/helium/doc/api_rst/api.ftllib
buildframework/helium/doc/api_rst/index.rst.ftl
buildframework/helium/doc/api_rst/macros_list.rst.ftl
buildframework/helium/doc/api_rst/package.rst.ftl
buildframework/helium/doc/api_rst/project.rst.ftl
buildframework/helium/doc/api_rst/properties_list.rst.ftl
buildframework/helium/doc/api_rst/target-dependencies.dot.ftl
buildframework/helium/doc/api_rst/targets_list.rst.ftl
buildframework/helium/doc/src/.templates/indexcontent.html.ftl
buildframework/helium/doc/src/development/coding_conventions.rst
buildframework/helium/doc/src/development/developer_guide.rst
buildframework/helium/doc/src/manual/configuring.rst
buildframework/helium/doc/src/manual/stage_ats.rst.inc.ftl
buildframework/helium/doc/src/manual/stage_compilation.rst.inc.ftl
buildframework/helium/doc/src/manual/stage_releasing.rst.inc.ftl
buildframework/helium/doc/src/manual/stage_source_preparation.rst.inc.ftl
buildframework/helium/doc/src/manual/stages.rst.ftl
buildframework/helium/doc/src/manual/sysdef3.rst
buildframework/helium/doc/src/quick_start_guide.rst.ftl
buildframework/helium/doc/src/tutorials/configuration/SimplestConfiguration.rst
buildframework/helium/doc/src/tutorials/configuration/UseHlmTasksInConfiguration.rst
buildframework/helium/doc/src/tutorials/configuration/simple_config.zip
buildframework/helium/doc/src/tutorials/index.rst
buildframework/helium/helium.ant.xml
buildframework/helium/helium_preinclude.ant.xml
buildframework/helium/hlm.bat
buildframework/helium/sf/deps/com.nokia.helium.config/helium-sf-config/1.0/ivy.xml
buildframework/helium/sf/deps/org.python/jython/2.5/ivy.xml
buildframework/helium/sf/deps/setuptools/setuptools/0.6c5/ivy.xml
buildframework/helium/sf/deps/setuptools/setuptools/0.6c5/setuptools-0.6c5.py2.5.egg
buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntTargets.java
buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntComment.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/MacroMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ProjectMeta.java
buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/database.xml.ftl
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntFile.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntLintHandler.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntProjectVisitor.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/AntlintException.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/Reporter.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/Severity.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/antlib.xml
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/taskdefs/AntLintTask.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractCheck.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractScriptCheck.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/Check.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckAntCall.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckDescription.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckDuplicateNames.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckFileName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckIndentation.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckJythonScript.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPresetDefMacroDefName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckProjectName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPropertyName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPythonTasks.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckRunTarget.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptCondition.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDef.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDefNameAttributes.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDefStyle.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptSize.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTabCharacter.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTargetName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckUseOfEqualsTask.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckUseOfIfInTargets.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/Checker.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckstyleXmlReporter.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/ConsoleReporter.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/AbstractCheck.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/AbstractScriptCheck.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/Check.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckAntCall.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckDescription.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckDuplicateNames.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckFileName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckIndentation.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckJepJythonScript.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPresetDefMacroDefName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckProjectName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPropertiesInDataModel.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPropertyName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPythonTasks.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckRunTarget.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptCondition.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptDef.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptDefNameAttributes.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptDefStyle.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptSize.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckTabCharacter.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckTargetName.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckUseOfEqualsTask.java
buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckUseOfIfInTargets.java
buildframework/helium/sf/java/antlint/tests/antunit/test_antlint.ant.xml
buildframework/helium/sf/java/antlint/tests/data/build.xml
buildframework/helium/sf/java/antlint/tests/data/invalid.build.xml
buildframework/helium/sf/java/antlint/tests/data/sample.ant.xml
buildframework/helium/sf/java/antlint/tests/data/sample.antlib.xml
buildframework/helium/sf/java/antunit/src/com/nokia/helium/antunit/ant/types/CustomListener.java
buildframework/helium/sf/java/ccmtask/build.xml
buildframework/helium/sf/java/ccmtask/ivy.xml
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/antlib.xml
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/AddTask.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/CcmCommand.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/ChangeReleaseTag.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Checkout.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Close.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/CreateReleaseTag.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/DeleteReleaseTag.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Reconcile.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Role.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Snapshot.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Synchronize.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Update.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Workarea.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/CcmTask.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/ccmtask.py
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/Session.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/SessionSet.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/Task.java
buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/TaskSet.java
buildframework/helium/sf/java/ccmtask/tests/antunit/test_ccmtask.ant.xml
buildframework/helium/sf/java/ccmtask/tests/bld.sh
buildframework/helium/sf/java/ccmtask/tests/build.bat
buildframework/helium/sf/java/ccmtask/tests/build.xml
buildframework/helium/sf/java/ccmtask/tests/ccm_mock/ccm
buildframework/helium/sf/java/ccmtask/tests/ccm_mock/ccm.bat
buildframework/helium/sf/java/ccmtask/tests/ccm_mock/ccm_mock.py
buildframework/helium/sf/java/core/demo/build.bat
buildframework/helium/sf/java/core/demo/build.xml
buildframework/helium/sf/java/core/ivy.xml
buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/FileUtils.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/AntCall.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/MappedVariable.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/Variable.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/VariableIFImpl.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/VariableInterface.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/VariableMap.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/antlib.xml
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/listener/TargetTimesLogGeneratorListener.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/AntCall.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetFreeDriveTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetValueFromVariableSet.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetValueFromVariableSetTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/LDAP.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/LDAPTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/ValidateUserLogin.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/ValidateUserLoginTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/XMLLogCount.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/XMLLogCountTask.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/Variable.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableImpl.java
buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableSet.java
buildframework/helium/sf/java/core/tests/antunit/ldap/test_ldap.ant.xml
buildframework/helium/sf/java/core/tests/antunit/pythontask/test_pythontask.ant.xml
buildframework/helium/sf/java/core/tests/antunit/retrytask/test_retrytask.ant.xml
buildframework/helium/sf/java/core/tests/antunit/test_getfreedrive.ant.xml
buildframework/helium/sf/java/core/tests/antunit/variableset/test_variableset.ant.xml
buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/tests/TestFileUtils.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsClient.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/StageDiamondsListener.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java
buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/ant/HeliumListener.java
buildframework/helium/sf/java/diamonds/tests/antunit/run-scenario.ant.xml
buildframework/helium/sf/java/diamonds/tests/antunit/test_diamonds.ant.xml
buildframework/helium/sf/java/diamonds/tests/config/diamonds_config.xml.ftl
buildframework/helium/sf/java/diamonds/tests/data/templates/codescanner.xml.ftl
buildframework/helium/sf/java/diamonds/tests/scenarii/build/build.xml
buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-address/build.xml
buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/build.xml
buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/diamonds_config.xml.ftl
buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates/build.xml
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/Command.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/JavaEngine.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/build_imaker_roms_signing.mk.ftl
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/taskdefs/IMakerTask.java
buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/utils/ParallelExecutor.java
buildframework/helium/sf/java/imaker/tests/antunit/test_imaker.ant.xml
buildframework/helium/sf/java/imaker/tests/antunit/test_imaker_drive_letter.ant.xml
buildframework/helium/sf/java/internaldata/bin/com/nokia/helium/internaldata/ant/antlib.xml
buildframework/helium/sf/java/internaldata/bin/com/nokia/helium/internaldata/ant/helium.antlib.xml
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/antlib.xml
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/AssertNode.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/Listener.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/XMLRenderer.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/taskdefs/HlmAssertMessage.java
buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/taskdefs/HlmAssertMessageTask.java
buildframework/helium/sf/java/internaldata/tests/antunit/test_HlmAssertMessage.ant.xml
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMEntityManager.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMReader.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMUtil.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java
buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/MetadataUtil.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/Antlib.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/Database.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/HeliumLogger.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/Signal.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/XmlLogger.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/antlib.xml
buildframework/helium/sf/java/legacy/src/com/nokia/ant/conditions/AtsCondition.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/listener/CoverageRecorderEntry.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AbstractScmBaseTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntDependencyTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CcmTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderEntry.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/DeconfigureTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/HlmExecTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/RBTTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/RebaselineTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/Signal.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsole.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsoleTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/AddTask.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/CcmCommand.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/ChangeReleaseTag.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Checkout.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Close.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Reconcile.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Snapshot.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Synchronize.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Update.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Workarea.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/Session.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/SessionSet.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/Task.java
buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/TaskSet.java
buildframework/helium/sf/java/legacy/src/com/nokia/ivy/ToolResolver.java
buildframework/helium/sf/java/legacy/src/com/nokia/tools/configuration/CONFIGURATIONTool.java
buildframework/helium/sf/java/legacy/tests/antunit/test_deconfigure_task.ant.xml
buildframework/helium/sf/java/legacy/tests/antunit/test_rebaseanddeconf_task.ant.xml
buildframework/helium/sf/java/legacy/tests/antunit/test_rebaseline_task.ant.xml
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/antlib.xml
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/RecorderEntry.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StatusAndLogListener.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorder.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorderTask.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogReplace.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogReplaceTask.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TriggerLogger.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TriggerLoggerTask.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/Stage.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageLogging.java
buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageSummary.java
buildframework/helium/sf/java/logging/tests/antunit/run-scenario.ant.xml
buildframework/helium/sf/java/logging/tests/scenarii/logger/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/valid_build/build.xml
buildframework/helium/sf/java/logging/tests/scenarii/valid_build/prep-ccm-get-input.ant.xml
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/antlib.xml
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataRegexTestCondition.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataDelete.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataDeleteTask.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataLogCount.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataLogCountTask.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecordTask.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AbldLogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/IMakerLogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterSet.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/PolicyLogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java
buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/db/ORMMetadataDB.java
buildframework/helium/sf/java/metadata/tests/antunit/test_metadata.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_regex.ant.xml
buildframework/helium/sf/java/metadata/tests/antunit/test_validity.ant.xml
buildframework/helium/sf/java/metadata/tests/data/all_regex1_type.log
buildframework/helium/sf/java/metadata/tests/data/build_roms_sample.log
buildframework/helium/sf/java/metadata/tests/functionality/test_regex.ant.xml
buildframework/helium/sf/java/metadata/tests/output.txt
buildframework/helium/sf/java/metadata/tests/output1.txt
buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestIMakerLogMetaDataInput.java
buildframework/helium/sf/java/metadata/tests/test_metadata.ant.xml
buildframework/helium/sf/java/metadata/tests/test_validity.ant.xml
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/antlib.xml
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTSummaryTask.java
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTTool.java
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTToolTask.java
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CodeScanner.java
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CodeScannerTask.java
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/Coverity.java
buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CoverityTask.java
buildframework/helium/sf/java/quality/tests/antunit/test_cmt.ant.xml
buildframework/helium/sf/java/quality/tests/data/cmt_summary_1.xml
buildframework/helium/sf/java/quality/tests/data/cmt_summary_2.xml
buildframework/helium/sf/java/quality/tests/data/cmt_summary_3.xml
buildframework/helium/sf/java/quality/tests/data/cmt_summary_5.xml
buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_1.html
buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_2.html
buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_3.html
buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_5.html
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/antlib.xml
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/CTCTask.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/GetSBSInputs.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/GetSBSInputsTask.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSCoverity.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSCoverityTask.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java
buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java
buildframework/helium/sf/java/sbs/tests/antunit/test_ctc.ant.xml
buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_coverity.ant.xml
buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_input.ant.xml
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/AddAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/BaseDirectoryScmAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/BranchAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ChangelogAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckinAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckoutAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/DiffAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ExportAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/InfoAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/InitAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/PullAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/RemoveAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ScmAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/StatusAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/TagAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/TagsAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/UpdateAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/AddAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/BaseDirectoryScmAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/BranchAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ChangelogAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/CheckinAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/CheckoutAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/DiffAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ExportAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/InfoAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/InitAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/PullAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/RemoveAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmTask.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/StatusAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/TagAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/TagsAction.java
buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/UpdateAction.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/HgScmProviderExt.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/VersionChangeSet.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/export/HgExportCommand.java
buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tag/HgTagCommand.java
buildframework/helium/sf/java/signaling/signaling.rst
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/antlib.xml
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/ClearDeferredFailures.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/ClearDeferredFailuresTask.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/Signal.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/SignalTask.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/EMAILNotifier.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/ExecuteTaskNotifier.java
buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierList.java
buildframework/helium/sf/java/signaling/tests/antunit/signaling_test.ant.xml
buildframework/helium/sf/java/signaling/tests/antunit/test_signaling_config.ant.xml
buildframework/helium/sf/java/synergy/build.xml
buildframework/helium/sf/java/synergy/ivy.xml
buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/antlib.xml
buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/AbstractScmBaseTask.java
buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/DeconfigureTask.java
buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/RBTTask.java
buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/RebaselineTask.java
buildframework/helium/sf/java/synergy/tests/antunit/test_deconfigure_task.ant.xml
buildframework/helium/sf/java/synergy/tests/antunit/test_rebaseanddeconf_task.ant.xml
buildframework/helium/sf/java/synergy/tests/antunit/test_rebaseline_task.ant.xml
buildframework/helium/sf/java/synergy/tests/bld.sh
buildframework/helium/sf/java/synergy/tests/build.bat
buildframework/helium/sf/java/synergy/tests/build.xml
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageMap.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/antlib.xml
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreatePackageMappingTask.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreateRootSysdefTask.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/FilterTask.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/MergeTask.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/Filter.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/FilterSet.java
buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/SydefFilterTypeEnum.java
buildframework/helium/sf/java/sysdef/tests/antunit/test_create_root_sysdef.ant.xml
buildframework/helium/sf/java/sysdef/tests/antunit/test_filter_sysdef.ant.xml
buildframework/helium/sf/java/sysdef/tests/antunit/test_mapping_file_creation.ant.xml
buildframework/helium/sf/java/sysdef/tests/data/filter/canonical_system_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/valid_package/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/package_definition.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/package_map.xml
buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml
buildframework/helium/sf/python/pythoncore/ivy.xml
buildframework/helium/sf/python/pythoncore/lib/archive/builders.py
buildframework/helium/sf/python/pythoncore/lib/archive/selectors.py
buildframework/helium/sf/python/pythoncore/lib/ats3/__init__.py
buildframework/helium/sf/python/pythoncore/lib/ats3/aste.py
buildframework/helium/sf/python/pythoncore/lib/ats3/custom.py
buildframework/helium/sf/python/pythoncore/lib/ats3/dropgenerator.py
buildframework/helium/sf/python/pythoncore/lib/ats3/parsers.py
buildframework/helium/sf/python/pythoncore/lib/ats3/testconfigurator.py
buildframework/helium/sf/python/pythoncore/lib/atsant.py
buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py
buildframework/helium/sf/python/pythoncore/lib/ccm/extra.py
buildframework/helium/sf/python/pythoncore/lib/fileutils.py
buildframework/helium/sf/python/pythoncore/lib/getVariantConfiguration.py
buildframework/helium/sf/python/pythoncore/lib/helium/logger.py
buildframework/helium/sf/python/pythoncore/lib/helium/output/__init__.py
buildframework/helium/sf/python/pythoncore/lib/helium/output/widgets.py
buildframework/helium/sf/python/pythoncore/lib/helium/outputer.py
buildframework/helium/sf/python/pythoncore/lib/heliumlogging.py
buildframework/helium/sf/python/pythoncore/lib/iadinfo.py
buildframework/helium/sf/python/pythoncore/lib/icf2txt.py
buildframework/helium/sf/python/pythoncore/lib/ido.py
buildframework/helium/sf/python/pythoncore/lib/idoprep.py
buildframework/helium/sf/python/pythoncore/lib/integration/__init__.py
buildframework/helium/sf/python/pythoncore/lib/integration/quality.py
buildframework/helium/sf/python/pythoncore/lib/log2xml.py
buildframework/helium/sf/python/pythoncore/lib/nokia/__init__.py
buildframework/helium/sf/python/pythoncore/lib/nokia/gscm.py
buildframework/helium/sf/python/pythoncore/lib/nokia/nokiaccm.py
buildframework/helium/sf/python/pythoncore/lib/pathaddition/__init__.py
buildframework/helium/sf/python/pythoncore/lib/pathaddition/relative.py
buildframework/helium/sf/python/pythoncore/lib/pkg2iby.py
buildframework/helium/sf/python/pythoncore/lib/preparation.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/__init__.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_archive.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats3.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atsant.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atscustom.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_buildmodel.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_comments.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_configuration_model.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_documentation.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_fileutils.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_logger.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_packageiad.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_parsers.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_pkg2iby.py
buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_timeout_launcher.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/__init__.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_amara.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_bomtofile.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_build_io.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_4pn.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_object.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_results.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccmutil.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_compilation.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_configuration.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ctc.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_deltazip.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_dependancygraph.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_docs.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_escapeddict.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_freedisk.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_gscm.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ido.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_integration_ant.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_log2xml.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_misc.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_path_match.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_pathaddition_relative.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_policy_validator.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py
buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_session_provider.py
buildframework/helium/sf/python/pythoncore/lib/rtfutils.py
buildframework/helium/sf/python/pythoncore/lib/sis.py
buildframework/helium/sf/python/pythoncore/lib/symbian/__init__.py
buildframework/helium/sf/python/pythoncore/lib/symbian/log.py
buildframework/helium/sf/python/pythoncore/lib/symbian/raptor.py
buildframework/helium/sf/python/pythoncore/lib/symrec.py
buildframework/helium/sf/python/pythoncore/lib/sysdef/__init__.py
buildframework/helium/sf/python/pythoncore/lib/sysdef/api.py
buildframework/helium/sf/python/pythoncore/lib/timeout_launcher.py
buildframework/helium/sf/python/pythoncore/lib/unittestadditions.py
buildframework/helium/sf/python/pythoncore/lib/xmlhelper.py
buildframework/helium/tests/data/diamonds-faults_compile.text.log
buildframework/helium/tests/minibuilds/ats/build.xml
buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.xml
buildframework/helium/tests/minibuilds/ido-sbs/build.xml
buildframework/helium/tests/minibuilds/ido/build.xml
buildframework/helium/tests/minibuilds/ido/config/delivery.xml
buildframework/helium/tests/minibuilds/ido/sysdefs/minibuild_ido.sysdef.xml
buildframework/helium/tests/minibuilds/ido/sysdefs/sysdef_1_4_0.dtd
buildframework/helium/tests/minibuilds/prep-wa-synergy71/build.xml
buildframework/helium/tests/minibuilds/prep-wa-synergy71/hlm.bat
buildframework/helium/tools/common/common.ant.xml
buildframework/helium/tools/common/common.antlib.xml
buildframework/helium/tools/common/docs.ant.xml
buildframework/helium/tools/common/dtd/sysdef_2_0_1.dtd
buildframework/helium/tools/common/dtd/sysdef_dtd_2_0_1.xml
buildframework/helium/tools/common/helium_docs.ant.xml
buildframework/helium/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl
buildframework/helium/tools/common/templates/diamonds/faults_metadata_orm.ftl
buildframework/helium/tools/common/templates/ido/ido-cmt-ant.xml.ftl
buildframework/helium/tools/common/templates/log/cc_summary_metadata_orm.html.ftl
buildframework/helium/tools/common/test/test_common.ant.xml
buildframework/helium/tools/common/test/test_scanlog.ant.xml
buildframework/helium/tools/common/test/test_scanlog_regex.ant.xml
buildframework/helium/tools/common/testing.ant.xml
buildframework/helium/tools/compile/cmaker.ant.xml
buildframework/helium/tools/compile/compile.ant.xml
buildframework/helium/tools/compile/compile.antlib.xml
buildframework/helium/tools/compile/ebs/ebs.ant.xml
buildframework/helium/tools/compile/nokiacompile.ant.xml
buildframework/helium/tools/compile/qt/antunit/test_qt.ant.xml
buildframework/helium/tools/compile/sbs/sbs.ant.xml
buildframework/helium/tools/localisation/localisation-50.ant.xml
buildframework/helium/tools/logging/test/test_logging.ant.xml
buildframework/helium/tools/logging/test/test_summary_log.ant.xml
buildframework/helium/tools/preparation/bom/bom.ant.xml
buildframework/helium/tools/preparation/ci.ant.xml
buildframework/helium/tools/preparation/getenv.pl
buildframework/helium/tools/preparation/ido-prep.ant.xml
buildframework/helium/tools/preparation/preparation.ant.xml
buildframework/helium/tools/preparation/synergy/buildmanagement.ant.xml
buildframework/helium/tools/preparation/synergy/ccmtask.jep
buildframework/helium/tools/preparation/test/test_bom.ant.xml
buildframework/helium/tools/preparation/test/test_ci.ant.xml
buildframework/helium/tools/preparation/test/test_parallelcopy.ant.xml
buildframework/helium/tools/preparation/test/test_parallelunzip.ant.xml
buildframework/helium/tools/preparation/test/test_preparation.ant.xml
buildframework/helium/tools/preparation/test/test_synergy.ant.xml
buildframework/helium/tools/preparation/test/test_synergyjavataks.ant.xml
buildframework/helium/tools/publish/publish.ant.xml
buildframework/helium/tools/publish/test/test_macro.ant.xml
buildframework/helium/tools/quality/validate-policy.ant.xml
buildframework/helium/tools/release/release.ant.xml
buildframework/helium/tools/release/scm_release.ant.xml
buildframework/helium/tools/release/templates/release_ccm_project.ant.xml.ftl
buildframework/helium/tools/rombuild/imaker.ant.xml
buildframework/helium/tools/startup/bootstrap/bootstrap.ant.xml
buildframework/helium/tools/testing/ats/ats.ant.xml
buildframework/helium/tools/testing/ats/templates/ats4_dualemu_template.xml
buildframework/helium/tools/testing/ats/templates/ats4_naviengine_template.xml
--- a/buildframework/helium/builder/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/builder/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -25,7 +25,7 @@
     <taskdef name="fmpp" classname="fmpp.tools.AntTask" />
     <import file="delivery.ant.xml" />
 
-    <!-- Ensuring that only Ant 1.7.0 is in use. -->
+    <!-- Ensuring that only Ant 1.7.0 is in use. 
     <ac:if>
         <not>
             <contains string="${ant.version}" substring="1.7.0" />
@@ -33,11 +33,12 @@
         <then>
             <fail message="Your current ant version is ${ant.version}, you must use 1.7.0" />
         </then>
-    </ac:if>            
+    </ac:if>            -->
 
     <condition property="platform" value="win32" else="unix">
         <os family="windows"/>
     </condition>
+    
     <dirname property="builder.dir" file="${ant.file.helium-builder}" />
     <property name="source.root.dir" location="${builder.dir}/.." />
     <property name="build.temp.dir" location="${source.root.dir}/build" />
@@ -63,22 +64,26 @@
         <exclude name="build/**" />
     </fileset>
   
+    
     <target name="cleanup" description="Cleanup (delete the temp build directory)">
         <delete dir="${build.temp.dir}" failonerror="false"/>
     </target>
     
+    
     <target name="get-build-list">
         <ivy:buildlist reference="ivy.buildlist.path">
             <fileset refid="ant.build.files"/>
         </ivy:buildlist>
     </target>
 
+    
     <target name="report" depends="get-build-list" description="Create Ivy report for each component">
         <subant target="report" buildpathref="ivy.buildlist.path">
             <property name="builder.dir" location="${builder.dir}" />
         </subant>
     </target>
   
+    
     <target name="compile" depends="get-build-list">
         <subant target="compile" buildpathref="ivy.buildlist.path">
             <property name="builder.dir" location="${builder.dir}" />
@@ -86,6 +91,7 @@
         </subant>
     </target>
 
+    
     <target name="build" depends="get-build-list" description="Build each component">
         <subant target="package" buildpathref="ivy.buildlist.path">
             <property name="builder.dir" location="${builder.dir}" />
@@ -94,6 +100,7 @@
         </subant>
     </target>
 
+    
     <target name="clean" depends="get-build-list" description="Run clean on each component">
         <subant target="clean" buildpathref="ivy.buildlist.path">
             <property name="builder.dir" location="${builder.dir}" />
@@ -101,6 +108,7 @@
         </subant>
     </target>
   
+    
     <target name="test" depends="get-build-list,build" description="Run test on each component">
         <ac:for param="file" keepgoing="true">
             <path refid="ivy.buildlist.path" />
@@ -108,6 +116,7 @@
                 <echo>Testing: @{file}</echo>
                 <ant antfile="@{file}" dir="@{file}/.." target="test" inheritAll="false">
                     <property name="builder.dir" location="${builder.dir}" />
+                    <property name="source.root.dir" location="${source.root.dir}" />
                 </ant>
             </sequential>
         </ac:for>
@@ -115,18 +124,23 @@
     <!-- TODO: remove after CI tools are cleaned up -->
     <target name="unittest" depends="test"/>
     
-    <target name="junit" depends="get-build-list" description="Run junit on each component">
+    
+    <target name="junit" depends="get-build-list" description="Run JUnit tests on each component">
         <subant target="junit" buildpathref="ivy.buildlist.path">
             <property name="builder.dir" location="${builder.dir}" />
+            <property name="source.root.dir" location="${source.root.dir}" />
         </subant>
     </target>
     
-    <target name="antunit" depends="get-build-list" description="Run antunit on each component">
+    
+    <target name="antunit" depends="get-build-list" description="Run AntUnit tests on each component">
         <subant target="antunit" buildpathref="ivy.buildlist.path">
             <property name="builder.dir" location="${builder.dir}" />
+            <property name="source.root.dir" location="${source.root.dir}" />
         </subant>
     </target>
     
+    
     <target name="quality" depends="get-build-list" description="Run quality checks on each component">
         <ac:for param="file" keepgoing="true">
             <path refid="ivy.buildlist.path" />
@@ -141,6 +155,7 @@
         </ac:for>
     </target>
 
+    
     <target name="checkstyle" depends="get-build-list" description="Run checkstyle on each component">
         <ac:for param="file" keepgoing="true">
             <path refid="ivy.buildlist.path" />
@@ -154,6 +169,7 @@
         </ac:for>
     </target>
 
+    
     <target name="get-deps" description="Retrieving Helium dependencies">
         <ac:if>
             <not>
@@ -179,7 +195,7 @@
             module="helium-${config}-config" revision="1.0"
             inline="true" type="egg"
             pattern="${source.root.dir}/external/python/lib/auto/[artifact]-[revision].[ext]" />
-        <fileset id="egg.deps.fileset" dir="${source.root.dir}/external/python/lib/auto" includes="*.egg" />
+        <fileset id="egg.deps.fileset" dir="${source.root.dir}/external/python/lib/auto" includes="*.egg" excludes="jython*.egg" />
         <fmpp sourceFile="template/easy-install.pth.ftl" outputFile="${source.root.dir}/external/python/lib/auto/easy-install.pth">
             <data>
                 project: antProject()
@@ -254,6 +270,7 @@
         <echo message="Revision set to: ${helium.revision}" />
     </target>
     
+    
     <target name="update-version" depends="get-helium-revision">
         <ac:if>
             <available file="${source.root.dir}/config/version.txt.orig" />
@@ -268,10 +285,12 @@
         </propertyfile>
     </target>
 
+    
     <target name="restore-version">
         <move file="${source.root.dir}/config/version.txt.orig" tofile="${source.root.dir}/config/version.txt" />
     </target>
     
+    
     <target name="create-releasable" depends="get-deps,update-version,build-helium-docs,zip-releasable,restore-version" description="Create releasable binary package"/>
     
     
@@ -287,6 +306,7 @@
         <rstMacro version="1.0" src="${build.temp.dir}/doc/doctmp"/>
     </target>
     
+    
     <!-- Macro to generate html docs from rst. -->
     <macrodef name="rstMacro">
         <attribute name="version"/>
@@ -308,4 +328,7 @@
             </exec>
         </sequential>
     </macrodef>
+    
 </project>
+
+
--- a/buildframework/helium/builder/delivery.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/builder/delivery.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -95,29 +95,35 @@
         <mkdir dir="${build.temp.dir}/temp" />
         <basename file="${binary.delivery.zip}" property="binary.delivery.basename" />
         <copy todir="${build.temp.dir}/temp" verbose="true">
-            <fileset dir="${publish.ci.dir}/${delivery.type}">
-                <include name="*/${binary.delivery.basename}" />
-                <scriptselector language="jython">
+            <first>
+                <sort>
+                    <reverse xmlns="antlib:org.apache.tools.ant.types.resources.comparators">
+                        <date />
+                    </reverse>
+                    <fileset dir="${publish.ci.dir}/${delivery.type}">
+                        <include name="*/${binary.delivery.basename}" />
+                        <scriptselector language="jython">
 <![CDATA[
 try:
     open(file.getParent() + "/tickler.txt").close()
-    myrev = int(file.getParentFile().getName())
-    selected = True
-    for f in file.getParentFile().getParentFile().listFiles():
-        try:
-            if myrev < int(f.getName()):
-                selected = False
-        except:
-            pass
-    self.setSelected(selected)
+    self.setSelected(True)
 except:
     print "No ticker file for %s" % file
     self.setSelected(False)
 ]]>
-                </scriptselector>
-            </fileset>
+                        </scriptselector>
+                    </fileset>
+                </sort>
+            </first>
             <flattenmapper/>
         </copy>
         <unzip src="${build.temp.dir}/temp/${binary.delivery.basename}" dest="${build.temp.dir}/temp" />
     </target>
+    
+    <target name="get-latest-sf-delivery">
+        <antcall target="get-latest-delivery">
+            <param name="delivery.type" value="sf"/>
+        </antcall>
+    </target>
+    
 </project>
\ No newline at end of file
--- a/buildframework/helium/builder/java/config/java_checkstyle_config.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/builder/java/config/java_checkstyle_config.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -72,7 +72,11 @@
         <!-- See http://checkstyle.sf.net/config_naming.html -->
         <module name="ConstantName"/>
         <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
+        <module name="LocalVariableName">
+            <property name="format" value="^[ij]$|^[a-z][a-zA-Z0-9]+$"/>
+            <property name="tokens" value="VARIABLE_DEF"/>
+            <property name="severity" value="warning"/>
+        </module>
         <module name="MemberName"/>
         <module name="MethodName"/>
         <module name="PackageName"/>
@@ -189,6 +193,13 @@
         <module name="SuperFinalize"/>
         
         <module name="IllegalCatch"/>
+        
+        <module name="MethodParamPad">
+            <property name="severity" value="warning"/>
+        </module>
+        <module name="Indentation">
+            <property name="severity" value="warning"/>
+        </module>
     </module>
 
 </module>
--- a/buildframework/helium/builder/java/macros.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/builder/java/macros.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -29,13 +29,16 @@
             <include name="**/*.jar" />
         </fileset>
     </path>
+    
     <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="emma.classpath"/>
     <taskdef classpathref="emma.classpath" resource="emma_ant.properties" />
     
+    
     <target name="clean">
         <delete dir="${module.temp.dir}" />
     </target>
 
+    
     <target name="resolve">
         <mkdir dir="${lib.dir}"/> <!-- not usually necessary, ivy creates the directory IF there are dependencies -->
         <ivy:settings file="${ivy.settings.dir}/ivysettings.xml" />
@@ -45,12 +48,15 @@
         <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]" log="download-only"/>
     </target>
 
+    
     <target name="report" depends="resolve" description="--> generates a report of dependencies">
         <ivy:report todir="${build.dir}"/>
     </target>
 
+    
     <target name="quality" depends="checkstyle" />
     
+    
     <target name="checkstyle" depends="resolve">
         <mkdir dir="${module.temp.dir}"/>
         <echo>Running checkstyle on ${ant.project.name}.</echo>
@@ -66,6 +72,7 @@
         </cs:checkstyle>
     </target>
     
+    
     <target name="compile" depends="resolve" description="--> compile the project">
         <mkdir dir="${classes.dir}" />
         <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="lib.path.id" debug="true" source="1.6" target="1.6" listfiles="true"> 
@@ -75,6 +82,7 @@
         </javac>
     </target>
 
+    
     <target name="ivy-new-version"  unless="ivy.new.revision">
         <!-- default module version prefix value 
         <property name="module.version.prefix" value="${module.version.target}-dev-b" />
@@ -86,6 +94,7 @@
             revision="${module.version.prefix}" defaultBuildNumber="1" revSep=""/> -->
     </target>
 
+    
     <target name="local-version">
         <!--<tstamp>
             <format property="now" pattern="yyyyMMddHHmmss"/>
@@ -93,6 +102,7 @@
         <property name="ivy.new.revision" value="${module.version.target}-local-${now}"/>-->
     </target>
     
+    
     <target name="version" depends="ivy-new-version">
         <!-- create version file in classpath for later inclusion in jar 
         <mkdir dir="${classes.dir}"/>
@@ -102,6 +112,7 @@
         <property file="${classes.dir}/${ant.project.name}.properties" />-->
     </target>
     
+    
     <target name="package" depends="local-version,version,compile" description="--> make a jar file for this project">
         <delete dir="${module.bin.dir}"/>
         <mkdir dir="${module.bin.dir}" />
@@ -122,7 +133,7 @@
         <!--copy file="${module.bin.dir}/${ant.project.name}.jar" todir="${bin.dir}" /-->
         <!--
         <mkdir dir="${bin.dir}/com.nokia.helium/${ant.project.name}/${version}" />
-        <copy file="${bin.dir}/com.nokia.helium/${ant.project.name}/${version}/${ant.project.name}.jar" todir="${module.bin.dir}" />
+        <copy file="${bin.dir}/com.nokia.helium/${ant.project.name}/${version}/${ant.project.name}.jar" todir="${module.bin.dir}" />
         [organisation]/[module]/[color]/[revision]/[artifact].[ext] 
         
         pubrevision="${version}"
@@ -140,7 +151,8 @@
 
     <target name="test" depends="junit,antunit"/>
 
-    <target name="junit">
+    
+    <target name="junit" depends="resolve">
         <mkdir dir="${build.temp.dir}" />
         <if>
             <available type="dir" file="${basedir}/tests/src"/>
@@ -236,6 +248,7 @@
         </if>
     </target>
     
+    
     <target name="antunit">
         <mkdir dir="${build.temp.dir}" />
         <if>
@@ -259,13 +272,23 @@
                                 </instrpath>
                             </instr>
                         </emma>
+                        <pathconvert pathsep="${path.separator}" property="python.path">
+                            <fileset dir="${lib.dir}" includes="**/*.egg"/>
+                            <dirset dir="${lib.dir}"/>
+                        </pathconvert>
                         <exec osfamily="windows" executable="cmd" dir="${basedir}/tests" failonerror="true">
-                            <env key="ANT_ARGS" value="-lib ${lib.dir} -lib ${module.temp.dir}/backup/${ant.project.name}.jar -lib ${builder.dir}/antlibs" />
-                            <arg line="/c build.bat unittest -Dbuilder.dir=${builder.dir}" />
+                            <env key="ANT_ARGS" value="-lib ${lib.dir} -lib ${module.temp.dir}/backup/${ant.project.name}.jar -lib ${builder.dir}/antlibs -Dpython.path=${python.path}" />
+                            <env key="PYTHONPATH" value="${python.path}" />
+                            <env key="JYTHONPATH" value="${python.path}" />
+                            <arg line="/c build.bat unittest " />
+                            <arg value="-Dbuilder.dir=${builder.dir}" />
                         </exec>
                         <exec osfamily="unix" executable="./bld.sh" dir="${basedir}/tests" failonerror="true">
-                            <env key="ANT_ARGS" value="-lib ${lib.dir} -lib ${module.temp.dir}/backup/${ant.project.name}.jar -lib ${builder.dir}/antlibs" />
-                            <arg line="unittest -Dbuilder.dir=${builder.dir}" />
+                            <env key="ANT_ARGS" value="-lib ${lib.dir} -lib ${module.temp.dir}/backup/${ant.project.name}.jar -lib ${builder.dir}/antlibs -Dpython.path=${python.path}" />
+                            <env key="PYTHONPATH" value="${python.path}" />
+                            <env key="JYTHONPATH" value="${python.path}" />
+                            <arg line="unittest" />
+                            <arg value="-Dbuilder.dir=${builder.dir}" />
                         </exec>
                         <move todir="${module.temp.dir}">
                             <fileset dir="${basedir}/tests" includes="**/coverage.ec" />
@@ -320,6 +343,10 @@
             </then>
         </if>
     </target>
+    
+    
     <target name="unittest" depends="antunit"/>
     
 </project>
+
+
--- a/buildframework/helium/builder/python/macros.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/builder/python/macros.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -29,6 +29,7 @@
     <property name="nose.result.dir" location="${module.temp.dir}/xunit/nose" />
 
     <target name="resolve">
+        <mkdir dir="${lib.dir}" />
         <ivy:settings file="${ivy.settings.dir}/ivysettings.xml" />
         
         <!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't -->
--- a/buildframework/helium/config/diamonds_config.xml.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/config/diamonds_config.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -49,6 +49,8 @@
             logfile="${ant['temp.build.dir']}/build/doc/ivy/tool-dependencies-${ant['build.type']}.xml" ant-properties="true"/>        
 
         <target name="compile-main" />
+        
+        <target name="build-roms" />
             
         <target name="ido-codescanner" template-file="codescanner.xml.ftl"
             logfile="${ant['ido.codescanner.output.dir']}/problemIndex.xml"/>
@@ -76,6 +78,9 @@
         <target name="check-tool-dependencies" template-file="tool.xml.ftl" 
             logfile="${ant['temp.build.dir']}/build/doc/ivy/tool-dependencies-${ant['build.type']}.xml" ant-properties="true"
             defer="true"/>
+            
+        <target name="cmt-generate-diamond-summary"/>
+        
     </targets>
 </logger>
 </configuration>
\ No newline at end of file
--- a/buildframework/helium/config/ivy/ivy.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/config/ivy/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -59,7 +59,7 @@
         
         <!-- IDO dependencies -->
         <dependency org="SWEPT" name="7zip" rev="4" conf="ido->default"/>
-        <dependency org="SWEPT" name="ccm" rev="6.5" conf="ido->default"/>
+        <dependency org="SWEPT" name="ccm" rev="exactlyAnyOne(6.5, 7.1)" conf="ido->default"/>
         <dependency org="SWEPT" name="codescanner" rev="[2.0,2.1]" conf="ido->default"/>
         <dependency org="SWEPT" name="java13" rev="1.3.1" conf="ido->default"/>
         <dependency org="SWEPT" name="sbs" rev="2.12" conf="ido->default"/>
--- a/buildframework/helium/config/ivy/modules/ccm-6.5.ivy.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : ccm-6.5.ivy.xml 
-Part of     : Helium 
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<ivy-module version="1.3">
-    <info organisation="SWEPT"
-          module="ccm"
-          revision="6.5"/>
-    <publications>
-        <artifact name="ccm.exe" type="exe" versionArgs="version -c"/> 
-    </publications>
-</ivy-module>
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/config/ivy/modules/ccm-6.5_7.1.ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : ccm-6.5_7.1.ivy.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<ivy-module version="1.3">
+    <info organisation="SWEPT"
+          module="ccm"
+          revision="6.5_7.1"/>
+    <publications>
+        <artifact name="ccm" type="exe" versionArgs="version -c" versionExp=".*(6\.5|7\.1).*" /> 
+    </publications>
+</ivy-module>
+
--- a/buildframework/helium/config/ivy/tools_ivy_settings.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/config/ivy/tools_ivy_settings.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -24,6 +24,8 @@
 <ivysettings>
     
     <typedef name="tool" classname="com.nokia.ivy.ToolResolver"/>
+    <typedef name="version-range" classname="org.apache.ivy.plugins.version.VersionRangeMatcher"/>
+    
     <caches useOrigin="true"/>
     <settings validate="false" defaultResolver="external"/>
     
@@ -41,7 +43,7 @@
         <url name="helium-svn">
             <ivy pattern="http://helium.nmp.nokia.com/svn/[module]/branches/[revision]/bin/ivy.xml" />
         </url>
-
+        
         <dual name="tool-resolver">
             <filesystem name="ivy-tool-resolver">
                 <ivy pattern="${helium.dir}/config/ivy/modules/[module]-[revision].ivy.xml" />
@@ -53,21 +55,20 @@
         </dual>
     </resolvers>
 
-    
     <triggers>
         <ant-build  antfile="${helium.dir}/config/ivy/install/build-[artifact].ant.xml"
-                    target="install"
-                       event="post-download-artifact"
-                       prefix="artifact"/>
+                target="install"
+                event="post-download-artifact"
+                prefix="artifact"/>
                        
-      <ant-call target="unzip-egg" prefix="artifact"
-          event="post-download-artifact" filter="ext=zip AND type=egg"/>
-      <ant-call target="unzip-jar" prefix="artifact"
-          event="post-download-artifact" filter="ext=zip AND type=jar"/>
-      <ant-call target="gunzip-egg" prefix="artifact"
-          event="post-download-artifact" filter="ext=tar.gz AND type=egg"/>
-      <ant-call target="bunzip-egg" prefix="artifact"
-          event="post-download-artifact" filter="ext=tar.bz2 AND type=egg"/>
+        <ant-call target="unzip-egg" prefix="artifact"
+                event="post-download-artifact" filter="ext=zip AND type=egg"/>
+        <ant-call target="unzip-jar" prefix="artifact"
+                event="post-download-artifact" filter="ext=zip AND type=jar"/>
+        <ant-call target="gunzip-egg" prefix="artifact"
+                event="post-download-artifact" filter="ext=tar.gz AND type=egg"/>
+        <ant-call target="bunzip-egg" prefix="artifact"
+                event="post-download-artifact" filter="ext=tar.bz2 AND type=egg"/>
     </triggers>
 
     
@@ -78,4 +79,11 @@
         <module organisation="helium-external" name=".*" resolver="helium-svn" />
     </modules>
     
+    <version-matchers>
+        <pattern-vm>
+            <match revision="exactlyAnyOne" pattern="${minor}_${major}" args="minor, major" matcher="regexp" />     
+        </pattern-vm>    
+        <version-range/>
+    </version-matchers>
+
 </ivysettings>
--- a/buildframework/helium/config/metadata_filter_config_default.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/config/metadata_filter_config_default.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -57,6 +57,11 @@
         <metadatafilterset refid="filterset.common" />
     </hlm:metadatafilterset>
 
+    <hlm:metadatafilterset id="filterset.sbs.cli">
+        <metadatafilter priority="error" regex="^sbs:\s+error:.*" description="sbs cli error" />
+        <metadatafilter priority="warning" regex="^sbs:\s+warning:.*" description="sbs cli warning" />
+    </hlm:metadatafilterset>
+
     <hlm:metadatafilterset id="filterset.compile">
         <metadatafilterset refid="filterset.common" />
         <hlm:metadatafilterset refid="filterset.compile.abld.deprecated" />
--- a/buildframework/helium/config/signaling_config_default.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/config/signaling_config_default.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -25,8 +25,6 @@
     Definitions of helium signals. 
     </description>
     
-    <taskdef resource="org/apache/tools/ant/types/conditions/antlib.xml" />
-
     <!-- Only for backward compatibility -->
     <hlm:notifierList id="defaultSignalFailNotifier">
         <hlm:emailNotifier templateSrc="${helium.dir}/tools/common/templates/log/email_new.html.ftl" title="[signal] ${signal.name} - [message] ${signal.message}"
--- a/buildframework/helium/config/version.txt	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/config/version.txt	Wed Jun 16 16:51:40 2010 +0300
@@ -1,5 +1,5 @@
 #Helium version - DO NOT EDIT
 #Fri Dec 18 15:07:03 EET 2009
-last.major.helium.version=8.0
-second.last.major.helium.version=7.0
-helium.version=9.0
+last.major.helium.version=9.0
+second.last.major.helium.version=8.0
+helium.version=10.0.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/antlib.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,85 @@
+<#--
+============================================================================ 
+Name        : antlib.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<#include "api.ftllib"/>
+
+<#list doc.antDatabase.antlib as antlib>
+<@pp.changeOutputFile name="antlib-${antlib.name}.rst" />
+
+
+.. index::
+   ${antlib.name}
+    
+==========================================================
+Antlib ${antlib.name}
+==========================================================
+
+.. contents::
+
+:Location: <@helium_api_location_path location="${antlib.location}"/>
+
+<#if antlib.macro?size &gt; 0>
+
+Macros
+===========
+
+<#assign macroCache = {}>
+<#list antlib.macro as macro>
+    <#assign macroCache = macroCache + {macro.name: macro}>
+</#list>
+
+<#list macroCache?keys?sort as name>
+<#assign macro=macroCache[name]>
+
+.. index::
+   ${macro.name}
+
+${macro.name}
+----------------------------------------------------------
+
+<#if macro.deprecated?length &gt; 0>
+..warning:: ${macro.deprecated}
+</#if>
+
+:Location: <@helium_api_location_path location="${macro.location}"/>
+:Scope: ${macro.scope}
+
+<#recurse macro.documentation>
+
+**Usage**
+
+::
+
+    ${macro.usage?replace("^", "    ", "rm")}
+
+**Source code**
+
+::
+
+    ${macro.source?replace("^", "    ", "rm")}
+
+</#list>
+</#if>
+
+</#list>
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/api.ftllib	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,80 @@
+<#--
+============================================================================ 
+Name        : 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+
+<#if ant?keys?seq_contains("tracurl")>
+    <#assign helium_browser_trunk=ant.tracurl>
+<#else>
+    <#assign helium_browser_trunk="">
+</#if>
+
+<#macro helium_api_location_path location>
+    <#assign target_line=""/>
+    <#assign res = location?matches(":(\\d+):$") />
+    <#list res as m>
+        <#assign target_line="#L${m?groups[1]}"/>
+    </#list>      
+    <#assign location_path=location/>
+    <#if location?index_of("helium\\") &gt; 0>
+        <#assign location_path=location?substring(location?last_index_of('helium\\'))/>
+    </#if>
+<#--       <#assign target_url=location_path?replace("\\", "/")?replace(":(\\d+):", "", 'ri') />
+    <tt class="docutils literal"><a href="${helium_browser_trunk}/${target_url}${target_line}">${location_path}</a></tt>-->
+    ``${location_path}``
+</#macro>
+
+<#macro helium_project_path location>
+    <#assign location_path=location/>
+    <#if location?index_of("helium\\") &gt; 0>
+        <#assign location_path=location?substring(location?last_index_of('helium\\'))/>
+    </#if>
+       <#assign target_url=location_path?replace("\\", "/")?replace(":(\\d+):", "", 'ri') />
+    <tt class="docutils literal"><a href="${helium_browser_trunk}/${target_url}">${target_url}</a></tt>  
+</#macro>
+
+<#-- Macros for recursively handling random HTML elements inside documentation elements. -->
+<#macro tt> <tt><#recurse></tt> </#macro>
+
+<#macro div><#recurse></#macro>
+
+<#macro p><#recurse>
+
+</#macro>
+
+<#macro ul>
+
+<#recurse>
+
+</#macro>
+
+<#macro li>    - <#recurse>
+</#macro>
+
+<#macro b>**<#recurse>**</#macro>
+
+<#macro pre>
+
+    <#recurse>
+    
+</#macro>
+
+<#macro @text>${.node?trim}</#macro>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/index.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,35 @@
+<#--
+============================================================================ 
+Name        : packages.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<#include "api.ftllib"/>
+
+Helium API Packages
+============================================
+
+.. toctree::
+   :maxdepth: 2
+   
+<#list doc.antDatabase.package as package>
+   package-${package.name}
+
+</#list>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/macros_list.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,43 @@
+<#--
+============================================================================ 
+Name        : macros_list.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+
+=============
+Macros list
+=============
+
+<#assign macroCache = {}>
+<#list doc.antDatabase.project.macro as macro>
+    <#assign macroCache = macroCache + {macro.name: macro}>
+</#list>
+<#list doc.antDatabase.antlib.macro as macro>
+    <#assign macroCache = macroCache + {macro.name: macro}>
+</#list>
+
+.. csv-table:: Helium macros
+   :header: "Macro", "Project", "Summary"
+   
+<#list macroCache?keys?sort as name>
+<#assign macro=macroCache[name]>
+    ":hlm-t:`${name}`", "${macro?parent.name}", "${macro.summary?replace("^", "    ", "rm")?replace("\"", "\"\"", "rm")?trim}"
+</#list>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/package.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,49 @@
+<#--
+============================================================================ 
+Name        : package.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<#include "api.ftllib"/>
+   
+<#list doc.antDatabase.package as package>
+<@pp.changeOutputFile name="package-${package.name}.rst" />
+
+.. index::
+   ${package.name}
+   
+==========================================================
+Package ${package.name}
+==========================================================
+
+.. toctree::
+   :maxdepth: 2
+   
+<#assign projectList=package.projectRef.name?sort>
+<#list projectList as project>
+   project-${project}
+</#list>
+<#assign antlibList=package.antlibRef.name?sort>
+<#list antlibList as antlib>
+   antlib-${antlib}
+</#list>
+
+
+</#list>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/project.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,204 @@
+<#--
+============================================================================ 
+Name        : project.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<#include "api.ftllib"/>
+
+<#list doc.antDatabase.project as project>
+<@pp.changeOutputFile name="project-${project.name}.rst" />
+
+
+.. index::
+   ${project.name}
+    
+==========================================================
+Project ${project.name}
+==========================================================
+
+.. contents::
+
+:Location: <@helium_api_location_path location="${project.location}"/>
+
+<#recurse project.description>
+
+**Project dependencies**
+
+<#assign filelist = project.projectDependency>
+<#list filelist as filelistvar>
+- ``${filelistvar}``
+</#list>
+
+Targets
+=========
+
+<#assign targetCache = {}>
+<#list project.target as target>
+    <#assign targetCache = targetCache + {target.name: target}>
+</#list>
+
+<#list targetCache?keys?sort as name>
+<#assign target=targetCache[name]>
+
+.. index::
+   ${target.name}
+  
+${target.name}
+----------------------------------------------------------
+
+<#if target.deprecated?length &gt; 0>
+..warning:: ${target.deprecated}
+</#if>
+
+<#if target.description?length &gt; 0>
+:Description: ${target.description}
+</#if>
+:Location: <@helium_api_location_path location="${target.location}"/>
+:Scope: ${target.scope}
+<#if target.ifDependency?length &gt; 0>
+:Condition: Target **is** run if property defined: :hlm-p:`${target.ifDependency}`
+</#if>
+<#if target.unlessDependency?length &gt; 0>
+:Condition: Target **is not** run if property defined: ``${target.unlessDependency}``
+</#if>
+
+<#recurse target.documentation>
+
+<#assign propertyList=target.propertyDependency?sort>   
+<#if propertyList?size &gt; 0>
+**Property dependencies**
+
+<#list propertyList as property>
+- :hlm-p:`${property}`
+</#list>
+</#if>
+
+
+**Target dependencies**
+
+.. raw:: html
+
+  <img src="../../api/helium/target-${target.name}.dot.png" alt="target-${target.name}" usemap="#target-${target.name}" style="border-style: none"/>
+  <map name="target-${target.name}" id="target-${target.name}">
+   
+.. raw:: html
+  :file: ../../api/helium/target-${target.name}.dot.cmap
+   
+.. raw:: html
+
+  </map>  
+  
+**Source code**
+
+::
+
+    ${target.source?replace("^", "    ", "rm")}
+
+</#list>
+
+
+<#if project.property?size &gt; 0>
+
+Properties
+===========
+
+<#assign propertyCache = {}>
+<#list project.property as property>
+    <#assign propertyCache = propertyCache + {property.name: property}>
+</#list>
+
+<#list propertyCache?keys?sort as name>
+<#assign property=propertyCache[name]>
+
+.. index::
+   ${property.name}
+   
+${property.name}
+----------------------------------------------------------
+
+<#if property.deprecated?length &gt; 0>
+..warning:: ${property.deprecated}
+</#if>
+
+:Location: <@helium_api_location_path location="${property.location}"/>
+:Type: ${property.type}
+:Scope: ${property.scope}
+:Editable: ${property.editable}
+<#if property.defaultValue?size &gt; 1>
+:Default value: ``${property.defaultValue}``
+</#if>
+
+<#recurse property.documentation>
+
+**Source code**
+
+::
+
+    ${property.source}
+
+</#list>
+</#if>
+
+<#if project.macro?size &gt; 0>
+
+Macros
+===========
+
+<#assign macroCache = {}>
+<#list project.macro as macro>
+    <#assign macroCache = macroCache + {macro.name: macro}>
+</#list>
+
+<#list macroCache?keys?sort as name>
+<#assign macro=macroCache[name]>
+
+.. index::
+   ${macro.name}
+
+${macro.name}
+----------------------------------------------------------
+
+<#if macro.deprecated?length &gt; 0>
+..warning:: ${macro.deprecated}
+</#if>
+
+:Location: <@helium_api_location_path location="${macro.location}"/>
+:Scope: ${macro.scope}
+
+<#recurse macro.documentation>
+
+**Usage**
+
+::
+
+    ${macro.usage?replace("^", "    ", "rm")}
+
+**Source code**
+
+::
+
+    ${macro.source?replace("^", "    ", "rm")}
+
+</#list>
+</#if>
+
+</#list>
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/properties_list.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,40 @@
+<#--
+============================================================================ 
+Name        : properties_list.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+
+===============
+Properties list
+===============
+
+<#assign propertyCache = {}>
+<#list doc.antDatabase.project.property as property>
+    <#assign propertyCache = propertyCache + {property.name: property}>
+</#list>
+
+.. csv-table:: Helium properties
+   :header: "Property", "Project", "Summary"
+   
+<#list propertyCache?keys?sort as name>
+<#assign property=propertyCache[name]>
+    ":hlm-t:`${name}`", "${property?parent.name}", "${property.summary?replace("^", "    ", "rm")?replace("\"", "\"\"", "rm")?trim}"
+</#list>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/target-dependencies.dot.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,105 @@
+<#--
+============================================================================ 
+Name        : 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<#list doc.antDatabase.project as project>
+<#list project.target as target>
+<@pp.changeOutputFile name="target-${target.name}.dot" />
+
+strict digraph G {
+    rankdir=LR;
+    rotate=180;
+    ordering=out;
+<#assign currentTarget = target.name>
+
+<#macro targetFunc targetMain caller>
+<#-- Define the targets that call this target. -->
+<#if caller == 0>
+    "${targetMain.name}" [fontcolor=blue,fontsize=12,shape=box,style=filled,href="project-${targetMain?parent.name}.html#${targetMain.name}"];
+    <#list doc.antDatabase.project.target as callingTarget>
+        <#list callingTarget.dependency as dependency>
+            <#if targetMain.name == dependency>
+                <#if callingTarget.name != currentTarget>
+                    "${callingTarget.name}" [fontcolor=brown,fontsize=12,shape=box,href="project-${callingTarget?parent.name}.html#${callingTarget.name}"];
+                </#if>
+                <#if dependency.@type == "direct">
+                    "${callingTarget.name}" -> "${targetMain.name}" [color=navyblue,fontsize=12];
+                </#if>
+                <#if dependency.@type == "exec">
+                    "${callingTarget.name}" -> "${targetMain.name}" [color=limegreen,fontsize=12];
+                </#if>
+            </#if>
+        </#list>
+    </#list>
+</#if>
+<#if caller == 1>
+    "${targetMain.name}" [fontcolor=brown,fontsize=12,shape=box,href="project-${targetMain?parent.name}.html#${targetMain.name}"];
+</#if>
+
+<#if targetMain.dependency?size == 1>
+    <#list targetMain.dependency as dependency>
+    "${dependency}" [fontcolor=brown,fontsize=12,shape=box,href="project-${targetMain?parent.name}.html#${dependency}"];
+    </#list>
+</#if>
+
+<#assign depTotal=targetMain.dependency?size>
+<#assign depLastIndex=targetMain.dependency?size-1>
+
+<#if depTotal &gt; 1>
+    <#list 0..depLastIndex as index>
+        <#if targetMain.dependency[index].@type == "direct">
+        "${targetMain.name}" -> "${targetMain.dependency[index]}" [color=navyblue,label="${index+1}",fontsize=12];
+        </#if>
+        <#if targetMain.dependency[index].@type == "exec">
+        "${targetMain.name}" -> "${targetMain.dependency[index]}" [color=limegreen,label="${index+1}",fontsize=12];
+        </#if>
+        <#list doc.antDatabase.project.target as targetDep>
+            <#if targetDep.name == targetMain.dependency[index]>
+            <@targetFunc targetMain=targetDep caller=1 />
+            </#if>
+        </#list>
+    </#list>
+</#if>
+
+<#attempt>
+<#if depTotal == 1>
+    <#if targetMain.dependency.@type == "direct">
+    "${targetMain.name}" -> "${targetMain.dependency[depTotal-1]}" [color=navyblue];
+    </#if>
+    <#if targetMain.dependency.@type == "exec">
+    "${targetMain.name}" -> "${targetMain.dependency[depTotal-1]}" [color=limegreen];
+    </#if>
+    <#list doc.antDatabase.project.target as targetDep>
+        <#if targetDep.name == targetMain.dependency>
+        <@targetFunc targetMain=targetDep caller=1 />
+        </#if>
+    </#list>
+</#if>
+<#recover>
+
+</#attempt>
+
+</#macro>
+
+<@targetFunc targetMain=target caller=0 />
+}
+</#list>
+</#list>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/doc/api_rst/targets_list.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,40 @@
+<#--
+============================================================================ 
+Name        : targets_list.rst.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+
+=============
+Targets list
+=============
+
+<#assign targetCache = {}>
+<#list doc.antDatabase.project.target as target>
+    <#assign targetCache = targetCache + {target.name: target}>
+</#list>
+
+.. csv-table:: Helium targets
+   :header: "Target", "Project", "Summary"
+   
+<#list targetCache?keys?sort as name>
+<#assign target=targetCache[name]>
+    ":hlm-t:`${name}`", "${target?parent.name}", "${target.summary?replace("^", "    ", "rm")?replace("\"", "\"\"", "rm")?trim}"
+</#list>
+
+
--- a/buildframework/helium/doc/src/.templates/indexcontent.html.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/.templates/indexcontent.html.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -40,7 +40,7 @@
       <p class="biglink"><a class="biglink" href="{{ pathto("tutorials/index") }}">HowTos</a><br/>
          <span class="linkdescr">specific use cases</span></p>
       <p class="biglink"><a class="biglink" href="{{ pathto("api/helium/index") }}">Helium API</a><br/>
-         <span class="linkdescr">reference for Helium configuration</span></p>
+         <span class="linkdescr">or check <a href="{{ pathto("api/helium/targets_list") }}">Targets</a>, <a href="{{ pathto("api/helium/properties_list") }}">Properties</a>, <a href="{{ pathto("api/helium/macros_list") }}">Macros</a></span></p>
       <p class="biglink"><a class="biglink" href="{{ pathto("helium-antlib/index") }}">Ant libraries</a><br/>
          <span class="linkdescr">when you just have to customize</span></p>
       <p class="biglink"><a class="biglink" href="{{ pathto("development/index") }}">Development</a><br/>
--- a/buildframework/helium/doc/src/development/coding_conventions.rst	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/development/coding_conventions.rst	Wed Jun 16 16:51:40 2010 +0300
@@ -340,7 +340,7 @@
 
 * Unit tests are written for each Python module.
 * They should follow the Nose_ testing framework conventions.
-* The test suite is run by calling ``hlm py-unittest``.
+* The test suite is run by calling :hlm-t:`py-unittest`.
 
 .. _Nose : http://somethingaboutorange.com/mrl/projects/nose/
 
--- a/buildframework/helium/doc/src/development/developer_guide.rst	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/development/developer_guide.rst	Wed Jun 16 16:51:40 2010 +0300
@@ -73,20 +73,17 @@
 .. index::
   single: Custom Ant library
 
-Custom Ant library
-==================
+Custom Ant libraries
+====================
 
-All custom Ant tasks and loggers should be added as new component under the sf folder. If the component you are creating is Java based, then add
-it inside the java folder. Your component directory must contain a build.xml file that imports the ${builder.dir}/java/macros.ant.xml file. Also the name
-of the project must be the name of the future jar file e.g::
+All custom Ant tasks, types and loggers should be added as new components under the ``/sf`` folder. If the component being created is Java-based, then add it inside the ``/java`` folder. The component directory must contain a ``build.xml`` file that imports ``${builder.dir}/java/macros.ant.xml``. Also the name of the project must be the name of the future JAR file e.g::
 
    <?xml version="1.0"?>
    <project name="mycomponent">
        <import file="${builder.dir}/java/macros.ant.xml" />
    </project> 
 
-The component also need an Ivy file (ivy.xml) in order to be detected and built. The file must defined the correct list of 
-dependencies for the component so it get built in the correct order.
+The component also need an Ivy file (``ivy.xml``) in order to be detected and built. The file must define the correct list of dependencies for the component so it get built in the correct order.
 
 .. index::
   single: How to build the delivery?
@@ -94,8 +91,7 @@
 How to build the delivery?
 ==========================   
 
-From Helium 9.0 onward, the delivery will be released as source code, without any pre-built binaries. In order to build
-the release please follow the next instructions.
+From Helium 9.0 onward, the delivery will be released as source code, without any pre-built binaries. In order to build the release please follow the next instructions.
 
 Building the dependencies
 -------------------------
@@ -110,8 +106,7 @@
 Retrieving Helium dependencies
 ------------------------------
 
-Building the dependency will not bring Helium in a workable stage. It is a preparation stage where components could be unit tested in isolation for example.
-Retrieving Helium dependencies based on the version of Helium you desire is then needed. The builder can achieve this operation by running the following command::
+Building the dependency will not bring Helium in a workable stage. It is a preparation stage where components could be unit tested in isolation for example. Retrieving Helium dependencies based on the version of Helium you desire is then needed. The builder can achieve this operation by running the following command::
 
    > cd builder
    > bld -Dconfig=sf get-deps
@@ -121,12 +116,37 @@
 Packaging up the built version
 ------------------------------
 
-Deliverable zip pacakge of binary version of Helium can be created using the following command::
+A deliverable ZIP package of binary version of Helium can be created using the following commands::
+
+    > cd builder
+    > bld -Dconfig=sf create-releasable
+
+The archive can be found at ``build/helium-bin.zip``.
+
+.. index::
+  single: Testing
+  
+Testing
+=======
+
+Components
+-----------
 
-   > cd builder
-   > bld -Dconfig=sf create-releasable
+Component tests can be run using::
+
+    > cd builder
+    > bld unittest
+   
+A specific type of tests can be selected using::
 
-The archive can be found under: build/helium-bin.zip
+    > bld -Dcomponent.type=java unittest
+   
+A specific component can be selected using::
+
+    > bld -Dcomponent=sbs unittest
+
+Debug logs for component tests can be found at ``/build/components/<component>/xunit``.
+
 
 .. index::
   single: Assertions
@@ -175,3 +195,4 @@
     helium/config/ivy/modules/jars-1.0.ivy.xml
     
 A new Ivy config file can be added for a non-jar or egg type file.
+
--- a/buildframework/helium/doc/src/manual/configuring.rst	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/configuring.rst	Wed Jun 16 16:51:40 2010 +0300
@@ -84,7 +84,7 @@
         <import file="${helium.dir}/helium.ant.xml"/>
     </project>
 
-Note that here the default target is ``product-build`` so this would be used for a product build configuration. In reality it would need many more properties to be complete.
+Note that here the default target is :hlm-t:`product-build` so this would be used for a product build configuration. In reality it would need many more properties to be complete.
 
 Refer to the `configuration reference`_ for a full list of all Helium Ant properties.
 
@@ -298,6 +298,26 @@
     <project name="myproject" xmlns:hlm="http://www.nokia.com/helium">
     ....
     </project>
+    
+If it is necessary to use the Helium tasks before importing ``helium.ant.xml``, first import ``helium_preinclude.ant.xml``, e.g::
+
+    <project name="helium-test" default="test" xmlns:hlm="http://www.nokia.com/helium"> 
+        <description>
+        Helium pre include test.
+        </description>
+        <property environment="env"/>
+        <import file="${helium.dir}\helium_preinclude.ant.xml"/>   
+            
+        <target name="test">
+           <hlm:logtoconsole action="stop"/>
+                <echo>Should not print anything.</echo>
+           <hlm:logtoconsole action="resume"/>
+           <echo>Should print something.</echo>       
+        </target>
+        
+        <import file="${helium.dir}\helium.ant.xml"/>           
+    </project> 
+
 
 .. index::
   single: System definition configuration files
--- a/buildframework/helium/doc/src/manual/stage_ats.rst.inc.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_ats.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -30,7 +30,7 @@
 
 ATS testing is the automatic testing of the phone code once it has been compiled and linked to create a ROM image.
 
-Explanation of the process for getting ATS (`STIF`_ and `EUnit`_) tests compiled and executed by Helium, through the use of the ``ats-test`` target.
+Explanation of the process for getting ATS (`STIF`_ and `EUnit`_) tests compiled and executed by Helium, through the use of the :hlm-t:`ats-test` target.
 
 http://developer.symbian.org/wiki/index.php/Symbian_Test_Tools
 
@@ -115,23 +115,24 @@
    :header: "Property name", "Edit status", "Description"
    
     ":hlm-p:`ats.server`", "[must]", "For example: ``4fix012345`` or ``catstresrv001.cats.noklab.net:80``. Default server port is ``8080``, but it is not allowed between intra and Noklab. Because of this we need to define server port as 80. The host can be different depending on site and/or product."
-    ":hlm-p:`ats.drop.location`", "[must]", "Server location (UNC path) to save the ATSDrop file, before sending to the ATS Server. For example: ``\\\\trwsem00\\some_folder\\``. In case, :hlm-p:`ats.script.type` is set to ``import``, ATS doesn't need to have access to :hlm-p:`ats.drop.location`,  its value can be any local folder on build machine, for example ``c:/temp`` (no network share needed)."
+    ":hlm-p:`ats.drop.location`", "[allowed]", "Server location (UNC path) to save the ATSDrop file, before sending to the ATS Server. For example: ``\\\\trwsem00\\some_folder\\``. In case, :hlm-p:`ats.script.type` is set to ``import``, ATS doesn't need to have access to :hlm-p:`ats.drop.location`,  its value can be any local folder on build machine, for example ``c:/temp`` (no network share needed)."
     ":hlm-p:`ats.product.name`", "[must]", "Name of the product to be tested."
-    ":hlm-p:`eunit.test.package`", "[recommended]", "The EUnit package name to be unzipped on the environment, for executing EUnit tests."
-    ":hlm-p:`eunitexerunner.flags`", "[recommended]", "Flags for EUnit exerunner can be set by setting the value of this variable. The default flags are set to ``/E S60AppEnv /R Off``."
-    ":hlm-p:`ats.email.list`", "[recommended]", "The property is needed if you want to get an email from ATS server after the tests are executed. There can be one to many semicolon-separated email addresses."
+    ":hlm-p:`eunit.test.package`", "[allowed]", "The EUnit package name to be unzipped on the environment, for executing EUnit tests."
+    ":hlm-p:`eunitexerunner.flags`", "[allowed]", "Flags for EUnit exerunner can be set by setting the value of this variable. The default flags are set to ``/E S60AppEnv /R Off``."
+    ":hlm-p:`ats.email.list`", "[allowed]", "The property is needed if you want to get an email from ATS server after the tests are executed. There can be one to many semicolon-separated email addresses."
+    ":hlm-p:`ats.report.type`", "[allowed]", "Value of the ats email report"
     ":hlm-p:`ats.flashfiles.minlimit`", "[recommended]", "Limit of minimum number of flash files to execute :hlm-t:`ats-test` target, otherwise ``ATSDrop.zip`` will not be generated. Default value is 2 files."
-    ":hlm-p:`ats.plan.name`", "[recommended]", "Modify the plan name if you have understanding of ``test.xml`` file or leave it as it is. Default value is ``plan``."
-    ":hlm-p:`ats.product.hwid`", "[recommended]", "Product HardWare ID (HWID) attached to ATS. By default the value of HWID is not set."
-    ":hlm-p:`ats.script.type`", "[recommended]", "There are two types of ats script files to send drop to ATS server, ``runx`` and ``import``; only difference is that with ``import`` ATS doesn't have to have access rights to ``testdrop.zip`` file, as it is sent to the system over http and import doesn't need network shares. If that is not needed ``import`` should not be used. Default value is ``runx`` as ``import`` involves heavy processing on ATS server."
-    ":hlm-p:`ats.target.platform`", "[recommended]", "Sets target platform for compiling test components. Default value is ``armv5 urel``."
-    ":hlm-p:`ats.test.timeout`", "[recommended]", "To set test commands execution time limit on ATS server, in seconds. Default value is ``60``."
-    ":hlm-p:`ats.testrun.name`", "[recommended]", "Modify the test-run name if you have understanding of ``test.xml`` file or leave it as it is. Default value is a string consist of build id, product name, major and minor versions."
-    ":hlm-p:`ats.trace.enabled`", "[recommended]", "Should be ``True`` if tracing is needed during the tests running on ATS. Default value is ``False``, the values are case-sensitive. See http://s60wiki.nokia.com/S60Wiki/CATS/TraceTools."
-    ":hlm-p:`ats.ctc.enabled`", "[recommended]", "Should be ``True`` if coverage measurement and dynamic analysis (CTC) tool support is to be used by ATS. Default value is ``False``. The values are case-sensitive."
-    ":hlm-p:`ats.ctc.host`", "[recommended]", "CTC host, provided by CATS used to create coverage measurement reports. MON.sym files are copied to this location, for example ``10.0.0.1``. If not given, code coverage reports are not created"
-    ":hlm-p:`ats.obey.pkgfiles.rule`", "[recommended]", "If the property is set to ``True``, then the only test components which will have PKG files, will be included into the ``test.xml`` as a test-set. Which means, even if there's a test component (executable) but there's no PKG file, it should not be considered as a test component and hence not included into the test.xml as a separate test. By default the property value is ``False``."
-    "``reference.ats.flash.images``", "[recommended]", "Fileset for list of flash images (can be .fpsx, .C00, .V01 etc) It is recommended to set the fileset, default filset is given below which can be overwritten. set *dir=""* attribute of the filset to ``${r'$'}{build.output.dir}/variant_images`` if hlm-t:`variant-image-creation` target is being used."
+    ":hlm-p:`ats.plan.name`", "[allowed]", "Modify the plan name if you have understanding of ``test.xml`` file or leave it as it is. Default value is ``plan``."
+    ":hlm-p:`ats.product.hwid`", "[allowed]", "Product HardWare ID (HWID) attached to ATS. By default the value of HWID is not set."
+    ":hlm-p:`ats.script.type`", "[allowed]", "There are two types of ats script files to send drop to ATS server, ``runx`` and ``import``; only difference is that with ``import`` ATS doesn't have to have access rights to ``testdrop.zip`` file, as it is sent to the system over http and import doesn't need network shares. If that is not needed ``import`` should not be used. Default value is ``runx`` as ``import`` involves heavy processing on ATS server."
+    ":hlm-p:`ats.target.platform`", "[allowed]", "Sets target platform for compiling test components. Default value is ``armv5 urel``."
+    ":hlm-p:`ats.test.timeout`", "[allowed]", "To set test commands execution time limit on ATS server, in seconds. Default value is ``60``."
+    ":hlm-p:`ats.testrun.name`", "[allowed]", "Modify the test-run name if you have understanding of ``test.xml`` file or leave it as it is. Default value is a string consist of build id, product name, major and minor versions."
+    ":hlm-p:`ats.trace.enabled`", "[allowed]", "Should be ``True`` if tracing is needed during the tests running on ATS. Default value is ``False``, the values are case-sensitive. See http://s60wiki.nokia.com/S60Wiki/CATS/TraceTools."
+    ":hlm-p:`ats.ctc.enabled`", "[allowed]", "Should be ``True`` if coverage measurement and dynamic analysis (CTC) tool support is to be used by ATS. Default value is ``False``. The values are case-sensitive."
+    ":hlm-p:`ats.ctc.host`", "[allowed]", "CTC host, provided by CATS used to create coverage measurement reports. MON.sym files are copied to this location, for example ``10.0.0.1``. If not given, code coverage reports are not created"
+    ":hlm-p:`ats.obey.pkgfiles.rule`", "[allowed]", "If the property is set to ``True``, then the only test components which will have PKG files, will be included into the ``test.xml`` as a test-set. Which means, even if there's a test component (executable) but there's no PKG file, it should not be considered as a test component and hence not included into the test.xml as a separate test. By default the property value is ``False``."
+    "``reference.ats.flash.images``", "[allowed]", "Fileset for list of flash images (can be .fpsx, .C00, .V01 etc) It is recommended to set the fileset, default filset is given below which can be overwritten. set *dir=""* attribute of the filset to ``${r'$'}{build.output.dir}/variant_images`` if hlm-t:`variant-image-creation` target is being used."
     ":hlm-p:`tsrc.data.dir`", "[allowed]", "The default value is ``data`` and refers to the 'data' directory under 'tsrc' directory."
     ":hlm-p:`tsrc.path.list`", "[allowed]", "Contains list of the tsrc directories. Gets the list from system definition layer files. Assuming that the test components are defined already in te ``layers.sysdef.xml`` files to get compiled. Not recommended, but the property value can be set if there are no System Definition file(s), and tsrc directories paths to set manually."
     ":hlm-p:`ats.report.location`", "[allowed]", "Sets ATS reports store location. Default location is ``${r'$'}{publish.dir}/${r'$'}{publish.subdir}``."
@@ -141,6 +142,7 @@
     ":hlm-p:`ats4.enabled`", "[allowed]", "Should be ``true`` if ATS4 is to be used."
     ":hlm-p:`ats.emulator.enable`", "[allowed]", "Should be ``true`` if ``WINSCW`` emulator is to be used."
     ":hlm-p:`ats.specific.pkg`", "[allowed]", "Text in name of PKG files to use eg. 'sanity' would only use xxxsanity.pkg files from components."
+    ":hlm-p:`ats.create.singledrop.file`", "[recommended]", "If present and set to 'true', it will create one drop file, if set to any other value or not present it will create multiple drop files (defined by the sysdef file). This is to save traffic to the server."
 
 An example of setting up properties:
 
@@ -183,7 +185,7 @@
 
 To execute the target, a property should be set(``<property name="enabled.ats" value="true" />``).
 
-Then call ``ats-test``, which will create the ATSDrop.zip (test package).
+Then call :hlm-t:`ats-test`, which will create the ATSDrop.zip (test package).
 
 If property *ats.email.list* is set, an email (test report) will be sent when the tests are ready on ATS.
 
@@ -326,7 +328,7 @@
 Stage: ATS - ASTE
 ===================
 
-Explanation of the process for getting ATS `ASTE`_ tests compiled and executed by Helium, through the use of the ``ats-aste`` target.
+Explanation of the process for getting ATS `ASTE`_ tests compiled and executed by Helium, through the use of the :hlm-t:`ats-aste` target.
 
 <#if !(ant?keys?seq_contains("sf"))>
 .. _`ASTE`: http://s60wiki.nokia.com/S60Wiki/ASTE
@@ -429,7 +431,7 @@
 
 To execute the target, a property should be set(``<property name="enabled.aste" value="true" />``).
 
-Then call ``ats-aste``, which will create the ATSDrop.zip (test package).
+Then call :hlm-t:`ats-aste`, which will create the ATSDrop.zip (test package).
 
 If property ``ats.aste.email.list`` is set, an email (test report) will be sent when the tests are ready on ATS/ASTE.
 
@@ -439,3 +441,13 @@
 
 click :ref:`Skip-Sending-AtsDrop-label`:
 
+Stage: ATS - Custom Drop
+========================
+
+If you need to send a static drop to ATS then you can call the target :hlm-t:`ats-custom-drop` and set a property to your own template.
+
+A example template is in helium/tools/testing/ats/templates/ats4_naviengine_template.xml
+
+.. code-block:: xml
+
+    <property name="ats.custom.template" value="path/to/mytemplate.xml" />
--- a/buildframework/helium/doc/src/manual/stage_compilation.rst.inc.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_compilation.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -98,4 +98,16 @@
 
     hlm <build target> -Dbuild.system=ec-helium -Dec.mode=serial
 
-Also the ``--emake-debug`` flag could be configured either by the environment using the ``EMAKE_DEBUG`` variable or using the ``emake_debug_flag`` property. Its default value is ``g``.
\ No newline at end of file
+Also the ``--emake-debug`` flag could be configured either by the environment using the ``EMAKE_DEBUG`` variable or using the ``emake_debug_flag`` property. Its default value is ``g``.
+
+
+Raptor compilation
+------------------
+
+Enabling CTC integration
+   It is possible to enable CTC instrumenting while building with SBSv2. To proceed you need to define the **sbs.build.ctc** to true.
+   If default options are not satisfying (default command line arguments: "-i m"), you can override the **ctc.instrument.type** property to
+   define an another instrumentation type. Or if you need to define additional arguments you can then override 
+   the argSet referenced by **ctc.build.options**. 
+   
+   
\ No newline at end of file
--- a/buildframework/helium/doc/src/manual/stage_releasing.rst.inc.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_releasing.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -65,6 +65,42 @@
 
 
 .. index::
+  single: Stage - Synergy Releasing
+
+Stage: Synergy releasing
+========================
+
+This stage consists in creating automatically a baseline using the prep-work-area configuration. You first need to add the 
+``releasable`` property set to true and what release to use using the ``baseline.release`` property.
+
+Here is an example of configuration:
+
+.. code-block:: xml
+   
+   <build>
+      <config name="myproject-config" abstract="true">
+         <set name="database" value="database" />
+         <set name="dir" value="C:\prep" />
+         <set name="sync" value="true" />
+         <set name="replace.subprojects" value="true" />
+         <set name="use.reconfigure.template" value="true" />
+         <set name="purpose" value="Integration Testing" />
+         <set name="release" value="MyProject/next" />
+
+         <config name="MyProject-92_201018" type="checkout">
+            <set name="to.version" value="next" />
+            <set name="releasable" value="true" />      
+            <set name="baseline.release" value="MyProject/92_201019" />
+         </config>
+        
+      </config>
+   </build> 
+
+
+You can then use the :hlm-t:`release-work-area` target (see Helium API) to at the end of your release cycle baseline and release your content automatically.
+
+
+.. index::
   single: Stage - Release Notes
 
 Stage: Release notes
--- a/buildframework/helium/doc/src/manual/stage_source_preparation.rst.inc.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stage_source_preparation.rst.inc.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -123,6 +123,8 @@
         - ci.custom.query: Extend the synergy query for CC modificationset checking eg.(release='MinibuildDomain/next').
         - show.conflicts: boolean value to check for task conflicts.
         - show.conflicts.objects: boolean value to check for object conflicts.
+        - releasable: boolean value which defines if the project should be considered by the release-work-area target.
+        - baseline.release: defines what release should be used while releasing the project and creating the baseline.
 Snapshot: define type of the spec as snapshot and name as the baseline name.
     The following properties are required:
         - dir     : the location of your target snapshot.
--- a/buildframework/helium/doc/src/manual/stages.rst.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/stages.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -107,4 +107,12 @@
 
 .. include:: stage_ats.rst.inc
 
-.. include:: stage_matti.rst.inc
\ No newline at end of file
+.. include:: stage_matti.rst.inc
+
+Check EPL License header.
+=================================
+
+The target ``check-sf-source-header`` could be used to run to validate the source files for EPL license header.
+
+* Include the target ``check-sf-source-header`` in the target sequence.
+* This will validate source files present on the build area to contain EPL license. 
\ No newline at end of file
--- a/buildframework/helium/doc/src/manual/sysdef3.rst	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/manual/sysdef3.rst	Wed Jun 16 16:51:40 2010 +0300
@@ -8,7 +8,7 @@
 How to configure the feature?
 -----------------------------
 
-In order to enable the support you first need to define the **new.schema** property to true. Then define a resource ant element to either 
+In order to enable the support you first need to define the **schema.new** property to true. Then define a resource ant element to either 
 point to root definition file or package_definition.xml file.
 
 e.g:
--- a/buildframework/helium/doc/src/quick_start_guide.rst.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/quick_start_guide.rst.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -1,6 +1,6 @@
 <#--
 ============================================================================ 
-Name        : 
+Name        : quick_start_guide.rst.ftl
 Part of     : Helium 
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -20,54 +20,37 @@
 ============================================================================
 -->
 ########################
-Helium Quick Start Guide 
+Helium Quick-Start Guide 
 ########################
 
 .. index::
-  module: Helium Quick Start Guide
+  module: Helium Quick-Start Guide
 
 .. contents::
 
 Introduction
 ============
 
-This document is a quick start guide for Ant based Helium build framework. More information can be found from `Helium manual`_.
+This document is a quick-start guide for the Ant-based Helium build framework. More information can be found from `Helium manual`_.
 
-.. _`Helium manual`: index.html#index-65
-
-This quick start guide is aimed at getting you helium on the build machine and showing you how to run helium in the very
-simplest of ways. Further reading and configuration is required to perform a complete build of a component or a product.
+.. _`Helium manual`: manual/index.html
 
 
 .. index::
   single: Helium configuration
 
-Helium configuration
---------------------
-
-- Helium is configured using a combination of Ant configuration elements (properties, filesets, etc) and other XML files for more complex
-  configuration of particular parts of the build. For initial tests run in this quick start guide you do not need to configure anything, but 
-  do please read the following references for more information:
-
-  - `Using Ant <http://ant.apache.org/manual/using.html>`_: specifically the Projects and Properties sections.
-  - `Configure Helium  <manual/configuring.html>`_: `common configuration format <manual/configuring.html#common-configuration-format>`_ and `Helium stages <manual/stages.html>`_.
-  - `Helium glossary <api/helium/properties-table.html>`_: lists the specific properties used in Helium.
-
-
 
 Installation
 =============
 
 <#if !ant?keys?seq_contains("sf")>
-The quickest way to get Helium is to check out from Subversion. Go to a directory and enter::
+Helium can be retrieved from the Hydra_ service:
+
+.. _Hydra: http://wikis.in.nokia.com/Hydra
 
-    svn co http://helium.nmp.nokia.com/svn/helium/tags/helium-8.0
-    
-Modify the path for the version of Helium you need.
-
-Read `Retrieving Helium`_ for additional ways to get Helium.
-
-.. _`Retrieving Helium`: manual/retrieving.html
+:URL: http://trhdr001.nmp.nokia.com/services/90?page=1 
+:Service: SoftwareBuildSolutions_Tools
+:Product: BuildEnvironment
 
 </#if>
 
@@ -77,6 +60,19 @@
 
 </#if>
 
+
+Configuration
+=============
+
+- Helium is configured using a combination of Ant configuration elements (properties, filesets, etc) and other XML files for more complex
+  configuration of particular parts of the build. For initial tests run in this quick-start guide you do not need to configure anything, but 
+  do please read the following references for more information:
+
+  - `Using Ant <http://ant.apache.org/manual/using.html>`_: specifically the Projects and Properties sections.
+  - `Configure Helium  <manual/configuring.html>`_: `common configuration format <manual/configuring.html#common-configuration-format>`_ and `Helium stages <manual/stages.html>`_.
+  - `Helium glossary <api/helium/properties-table.html>`_: lists the specific properties used in Helium.
+  
+  
 .. index::
   single: Running builds with Helium
 
--- a/buildframework/helium/doc/src/tutorials/configuration/SimplestConfiguration.rst	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-
-
-Basic Helium configuration
-==========================
-
-These two files define the smallest Helium configuration possible: 
-
-First the build.xml, it consists in two Ant instructions:
-   
-   * The creation of a 'env' property which stores current environment variables (see http://ant.apache.org/manual/CoreTasks/property.html).
-   * Then the inclusion of Helium features importing the ${helium.dir}/helium.ant.xml, the helium.dir is automatically defined by the Helium bootstrapper.
-
-build.xml:
-
-.. code-block:: xml
-   
-   <?xml version="1.0" encoding="UTF-8"?>
-   <project name="simple-config">
-       <property environment="env"/>
-       <import file="${helium.dir}/helium.ant.xml"/>   
-   </project>
-
-
-Finally the Helium bootstrapper, which consists in a simple batch file (or shell script under Linux).
-Its job is to redirect calls to the hlm.bat script under the HELIUM_HOME dir. Additional checks could be added there e.g:
-   
-   * check if the user has defined the HELIUM_HOME environment variable. 
-   * set/modify environment
-   * define the HELIUM_HOME if Helium is in a known location
-
-hlm.bat::
-   
-   @echo off
-   setlocal
-   if not defined HELIUM_HOME  ( 
-   echo HELIUM_HOME is not defined.
-   goto :eof 
-   )
-   %HELIUM_HOME%\hlm.bat %*
-   endlocal
-
-
-
-Download the example:
-`simple_config.zip <simple_config.zip>`_
-  
--- a/buildframework/helium/doc/src/tutorials/configuration/UseHlmTasksInConfiguration.rst	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-
-
-How to use Helium  ant tasks in configuration
-=============================================
-
-Sometimes customer may need to use helium ant tasks from their configurations and in the 
-following way customer can use helium ant tasks by importing helium_preinclude.ant.xml:
-
-Here is a example of build.xml:
-   
-   * The creation of a 'env' property which stores current environment variables (see http://ant.apache.org/manual/CoreTasks/property.html).
-   * Import ${helium.dir}/helium_preinclude.ant.xml  to include helium ant tasks. 
-   * Then a target which is using a helium ant task.
-   * Then the inclusion of Helium features importing the ${helium.dir}/helium.ant.xml, the helium.dir is automatically defined by the Helium bootstrapper.
-
-build.xml:
-
-.. code-block:: xml
-
-    <project name="helium-test" default="test" xmlns:hlm="http://www.nokia.com/helium"> 
-        <description>
-        Helium pre include test.
-        </description>
-        <property environment="env"/>
-        <import file="${helium.dir}\helium_preinclude.ant.xml"/>   
-            
-        <target name="test">
-           <hlm:logtoconsole action="stop"/>
-                <echo>Should not print anything.</echo>
-           <hlm:logtoconsole action="resume"/>
-           <echo>Should print something.</echo>       
-        </target>
-        
-        <import file="${helium.dir}\helium.ant.xml"/>           
-    </project>    
-
-
-Finally the Helium bootstrapper, which consists in a simple batch file (or shell script under Linux).
-Its job is to redirect calls to the hlm.bat script under the HELIUM_HOME dir. Additional checks could be added there e.g:
-   
-   * check if the user has defined the HELIUM_HOME environment variable. 
-   * set/modify environment
-   * define the HELIUM_HOME if Helium is in a known location
-
-hlm.bat::
-   
-   @echo off
-   setlocal
-   if not defined HELIUM_HOME  ( 
-   echo HELIUM_HOME is not defined.
-   goto :eof 
-   )
-   %HELIUM_HOME%\hlm.bat %*
-   endlocal
-
Binary file buildframework/helium/doc/src/tutorials/configuration/simple_config.zip has changed
--- a/buildframework/helium/doc/src/tutorials/index.rst	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/doc/src/tutorials/index.rst	Wed Jun 16 16:51:40 2010 +0300
@@ -28,8 +28,6 @@
 
    qt_build.rst
    rom_image.rst
-   configuration/SimplestConfiguration.rst
-   configuration/UseHlmTasksInConfiguration.rst
    
    
    
--- a/buildframework/helium/helium.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/helium.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -25,6 +25,7 @@
     Main full build targets and properties
     </description>
     <property environment="env" />
+	
     
     <!-- Load the current Helium version. -->
     <!--* @property helium.version
@@ -98,6 +99,10 @@
                     <fail message="ERROR: Failed to assign build drive, please check you are not running out of drives." />    
                 </then>
             </if>
+            <exec osfamily="windows" executable="subst" failonerror="false">
+                <arg value="${build.drive}" />
+                <arg value="${env.TEMP}/helium/temp_drive" />
+            </exec>
             <echo> Using build drive ${build.drive} </echo>
         </then>
     </if>
--- a/buildframework/helium/helium_preinclude.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/helium_preinclude.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,9 +22,11 @@
 -->
 
 <project name="helium_preinclude" basedir="." xmlns:hlm="http://www.nokia.com/helium">
+    
     <description>
     Helium task definations. User can import this file and use helium and helium-antlib tasks.
     </description>
+    
     <import file="tools/common/libs.ant.xml"/>
     <taskdef resource="com/nokia/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
@@ -35,4 +37,6 @@
     <taskdef resource="com/nokia/helium/imaker/ant/antlib.xml" uri="http://www.nokia.com/helium" />
     <taskdef resource="com/nokia/helium/sbs/ant/antlib.xml" uri="http://www.nokia.com/helium" />
     <taskdef resource="com/nokia/helium/logger/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/synergy/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef resource="com/nokia/helium/ccmtask/ant/antlib.xml" uri="http://www.nokia.com/helium" />
 </project>
\ No newline at end of file
--- a/buildframework/helium/hlm.bat	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/hlm.bat	Wed Jun 16 16:51:40 2010 +0300
@@ -32,7 +32,7 @@
 call %HELIUM_HOME%\runtime\runtime_env.bat
 ) 
 
-if not exist "%HELIUM_HOME%\extensions\nokia\distribution.policy.S60" ( 
+if not exist "%HELIUM_HOME%\extensions\nokia\build.xml" ( 
 set HLM_SUBCON=1
 set HLM_DISABLE_INTERNAL_DATA=1
 )
@@ -52,7 +52,9 @@
 set /p PID=< %TEMP%\%USERNAME%pid.txt
 
 REM Configure Apache Ant
-set TESTED_ANT=C:\APPS\ant_1.7
+if not defined TESTED_ANT (
+  set TESTED_ANT=C:\APPS\ant_1.7
+)
 if exist "%TESTED_ANT%" (set ANT_HOME=%TESTED_ANT%)
 if not exist "%ANT_HOME%" ( echo *** Ant cannot be found & goto :errorstop )
 if not defined ANT_OPTS (
@@ -117,12 +119,14 @@
 TITLE Helium
 
 if not exist "%HELIUM_HOME%\external\antlibs2\helium-checktools-1.0.jar" (
-echo *** Error: Please build helium from builder dir run "bld && bld get-deps -Dconfig=sf or nokia"
+echo *** Error: Please build helium from nokia_builder or builder dir run "bld && bld get-deps"
 goto errorstop
 )
 
 call "%JAVA_HOME%\bin\java" -cp "%HELIUM_HOME%\external\antlibs2\helium-checktools-1.0.jar" com.nokia.helium.checktools.HeliumToolsCheckerMain -config "%HELIUM_HOME%\config\helium.basic.tools.config"
+if not defined HLM_DISABLE_TOOL_CHECK (
 if "%ERRORLEVEL%" neq "0" (goto errorstop)
+)
 
 REM Call the Helium generated batch file if it exists
 REM This must match with the cache.dir property in helium.ant.xml
--- a/buildframework/helium/sf/deps/com.nokia.helium.config/helium-sf-config/1.0/ivy.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/deps/com.nokia.helium.config/helium-sf-config/1.0/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -50,6 +50,8 @@
         <dependency org="com.nokia.helium" name="helium-legacy" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-sbs" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="helium-checktools" rev="latest.integration" conf="default"/>
+        <dependency org="com.nokia.helium" name="helium-synergy" rev="latest.integration" conf="default"/>
+        <dependency org="com.nokia.helium" name="helium-ccmtask" rev="latest.integration" conf="default"/>
         <dependency org="com.nokia.helium" name="java-analyser-config" rev="latest.integration" conf="default"/>
         
         <!-- Helium Python deps -->
--- a/buildframework/helium/sf/deps/org.python/jython/2.5/ivy.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/deps/org.python/jython/2.5/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -29,6 +29,6 @@
         revision="2.5" />
     <publications>
         <artifact type="jar" conf="default"/>
-        <!--artifact type="egg" conf="default"/-->
+        <artifact type="egg" conf="default"/>
     </publications>
 </ivy-module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/deps/setuptools/setuptools/0.6c5/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+============================================================================ 
+Name        : ivy.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================  
+-->
+<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+    <info
+        organisation="setuptools"
+        module="setuptools"
+        status="release"
+        revision="0.6c5" />
+    <publications>
+        <artifact type="egg" ext="py2.5.egg" conf="default" />
+    </publications>
+</ivy-module>
Binary file buildframework/helium/sf/deps/setuptools/setuptools/0.6c5/setuptools-0.6c5.py2.5.egg has changed
--- a/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntTargets.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/AntTargets.java	Wed Jun 16 16:51:40 2010 +0300
@@ -119,15 +119,15 @@
         public boolean equals(Object obj) {
             if (obj instanceof String) {
                 String str = (String)obj;
-                for (Target t : instances) {
-                    if (t.getName().equals(str)) {
+                for (Target target : instances) {
+                    if (target.getName().equals(str)) {
                         return true;
                     }
                 }
             } else if (obj instanceof Target) {
                 Target target = (Target) obj;
-                for (Target t : instances) {
-                    if (t.getLocation().equals(target.getLocation())) {
+                for (Target targetInstance : instances) {
+                    if (targetInstance.getLocation().equals(target.getLocation())) {
                         return true;
                     }
                 }
--- a/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antcoverage/src/com/nokia/helium/ant/coverage/listener/HlmAntUnitListener.java	Wed Jun 16 16:51:40 2010 +0300
@@ -204,9 +204,9 @@
     @SuppressWarnings("unchecked")
     private void addTargets(Project project) {
         Hashtable<String, Target> projectTargets = project.getTargets();
-        Enumeration<String> e = projectTargets.keys();
-        while (e.hasMoreElements()) {
-            String key = e.nextElement();
+        Enumeration<String> targetEnum = projectTargets.keys();
+        while (targetEnum.hasMoreElements()) {
+            String key = targetEnum.nextElement();
             System.out.println(key + ": " + projectTargets.get(key));
             if (!isAntUnitTestTarget(key) && key.length() > 0) {
                 antTargets.add((Target) projectTargets.get(key));
@@ -222,9 +222,9 @@
     @SuppressWarnings("unchecked")
     private void addMacros(Project project) {
         Hashtable<String, Class> projectMacros = project.getTaskDefinitions();
-        Enumeration<String> e = projectMacros.keys();
-        while (e.hasMoreElements()) {
-            String key = e.nextElement();
+        Enumeration<String> macrosEnum = projectMacros.keys();
+        while (macrosEnum.hasMoreElements()) {
+            String key = macrosEnum.nextElement();
             Class newTask = projectMacros.get(key);
             if (newTask.getName().equals(
                     "org.apache.tools.ant.taskdefs.MacroInstance")) {
@@ -245,9 +245,9 @@
     @SuppressWarnings("unchecked")
     private void addScriptDefs(Project project) {
         Hashtable<String, Class> projectMacros = project.getTaskDefinitions();
-        Enumeration<String> e = projectMacros.keys();
-        while (e.hasMoreElements()) {
-            String key = e.nextElement();
+        Enumeration<String> scriptDefsEnum = projectMacros.keys();
+        while (scriptDefsEnum.hasMoreElements()) {
+            String key = scriptDefsEnum.nextElement();
             Class newTask = projectMacros.get(key);
             if (newTask
                     .getName()
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntComment.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/AntComment.java	Wed Jun 16 16:51:40 2010 +0300
@@ -96,7 +96,8 @@
                 while (tokenizer.hasMoreElements()) {
                     String tagText = (String) tokenizer.nextElement();
                     String[] tagParts = tagText.split("\\s", 2);
-                    tags.put(tagParts[0], tagParts[1].trim());
+                    if (tagParts.length > 1)
+                        tags.put(tagParts[0], tagParts[1].trim());
                 }
             }
         }
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/MacroMeta.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/MacroMeta.java	Wed Jun 16 16:51:40 2010 +0300
@@ -47,9 +47,9 @@
             if (defaultval.equals("")) {
                 defaultval = "value";
             }
-            else {
-                defaultval = "<i>" + defaultval + "</i>";
-            }
+//            else {
+//                defaultval = "<i>" + defaultval + "</i>";
+//            }
             usage = usage + statement.valueOf("@name") + "=\"" + defaultval + "\"" + " ";
         }
 
@@ -57,14 +57,14 @@
         statements = getNode().selectNodes(
                 "//scriptdef[@name='" + macroName + "']/element | //macrodef[@name='" + macroName + "']/element");
         for (Node statement : statements) {
-            macroElements = "&lt;" + statement.valueOf("@name") + "/&gt;\n" + macroElements;
+            macroElements = "        <" + statement.valueOf("@name") + "/>\n" + macroElements;
         }
 
         if (macroElements.equals("")) {
-            return "&lt;hlm:" + macroName + " " + usage + "/&gt;";
+            return "<hlm:" + macroName + " " + usage + "/>";
         }
         else {
-            return "&lt;hlm:" + macroName + " " + usage + "&gt;\n" + macroElements + "&lt;/hlm:" + macroName + "&gt;";
+            return "<hlm:" + macroName + " " + usage + ">\n" + macroElements + "    </hlm:" + macroName + ">";
         }
     }
 }
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ProjectMeta.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/ProjectMeta.java	Wed Jun 16 16:51:40 2010 +0300
@@ -99,7 +99,7 @@
     @SuppressWarnings("unchecked")
     public List<PropertyMeta> getProperties() throws IOException {
         List<PropertyMeta> properties = new ArrayList<PropertyMeta>();
-        List<Node> propertyNodes = getNode().selectNodes("//property");
+        List<Node> propertyNodes = getNode().selectNodes("//property[string-length(@name)>0]");
         for (Node propNode : propertyNodes) {
             PropertyMeta propertyMeta = new PropertyMeta(this, propNode);
             propertyMeta.setRuntimeProject(getRuntimeProject());
--- a/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/database.xml.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antdata/src/com/nokia/helium/ant/data/database.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -26,8 +26,8 @@
             <scope>${macro.scope}</scope>
             <deprecated>${macro.deprecated}</deprecated>
             <location>${macro.location}</location>
-            <summary><![CDATA[${macro.summary}]]></summary>
-            <documentation><![CDATA[${wiki(macro.documentation)}]]></documentation>
+            <summary>${macro.summary}</summary>
+            <documentation>${wiki(macro.documentation)}</documentation>
             <usage><![CDATA[${macro.usage}]]></usage>
             
             <#list macro.signals as signal>
@@ -38,18 +38,17 @@
     ${macro.source}]]></source>
         </macro>
 </#macro>
-
-<antDatabase>
+<antDatabase xmlns:hlm="http://www.nokia.com/helium">
     <#list projects as project>
     <project>
         <name>${project.name}</name>
         <default>${project.default}</default>
-        <description><![CDATA[${wiki(project.description)}]]></description>
+        <description>${wiki(project.description)}</description>
         <scope>${project.scope}</scope>
         <deprecated>${project.deprecated}</deprecated>
         <location>${project.location}</location>
-        <summary><![CDATA[${project.summary}]]></summary>
-        <documentation><![CDATA[${wiki(project.documentation)}]]></documentation>
+        <summary>${project.summary}</summary>
+        <documentation>${wiki(project.documentation)}</documentation>
         
         <#list project.projectDependencies as dependency>
         <projectDependency>${dependency}</projectDependency>
@@ -66,12 +65,12 @@
             <name>${target.name}</name>
             <ifDependency>${target.if}</ifDependency>
             <unlessDependency>${target.unless}</unlessDependency>
-            <description><![CDATA[${target.description}]]></description>
+            <description>${target.description}</description>
             <scope>${target.scope}</scope>
             <deprecated>${target.deprecated}</deprecated>
             <location>${target.location}</location>
-            <summary><![CDATA[${target.summary}]]></summary>
-            <documentation><![CDATA[${wiki(target.documentation)}]]></documentation>
+            <summary>${target.summary}</summary>
+            <documentation>${wiki(target.documentation)}</documentation>
             
             <#list target.depends as dependency>
             <dependency type="direct">${dependency}</dependency>
@@ -111,8 +110,8 @@
             <scope>${property.scope}</scope>
             <deprecated>${property.deprecated}</deprecated>
             <location>${property.location}</location>
-            <summary><![CDATA[${property.summary}]]></summary>
-            <documentation><![CDATA[${wiki(property.documentation)}]]></documentation>
+            <summary>${property.summary}</summary>
+            <documentation>${wiki(property.documentation)}</documentation>
             <source><![CDATA[
     ${property.source}]]></source>
         </property>
@@ -127,8 +126,8 @@
             <scope>${property.scope}</scope>
             <deprecated>${property.deprecated}</deprecated>
             <location>${property.location}</location>
-            <summary><![CDATA[${property.summary}]]></summary>
-            <documentation><![CDATA[${wiki(property.documentation)}]]></documentation>
+            <summary>${property.summary}</summary>
+            <documentation>${wiki(property.documentation)}</documentation>
             <source><![CDATA[
     ${property.source}]]></source>
         </property>
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntFile.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/*
- * 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.antlint;
-
-import java.util.ArrayList;
-
-/**
- * <code>AntFile</code> is used to hold information about the antlint checkings
- * such as number of errors and warnings found for the given ant file.
- * 
- */
-public class AntFile implements Comparable<AntFile> {
-    private String name;
-    private int warningCount;
-    private int errorCount;
-
-    private ArrayList<String> propertiesVisited = new ArrayList<String>();
-
-    /**
-     * Create an instance of {@link AntFile}.
-     * 
-     * @param name
-     *            is the name of the Ant file.
-     */
-    public AntFile(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Increment warnings count by one.
-     */
-    public void incrementWarningCount() {
-        warningCount++;
-    }
-
-    /**
-     * Return total number of warnings found.
-     * 
-     * @return the total number of warnings.
-     */
-    public int getWarningCount() {
-        return warningCount;
-    }
-
-    /**
-     * Increment error count by one.
-     */
-    public void incrementErrorCount() {
-        errorCount++;
-    }
-
-    /**
-     * Return total number of errors found.
-     * 
-     * @return the total number of errors.
-     */
-    public int getErrorCount() {
-        return errorCount;
-    }
-
-    /**
-     * Mark the given property as visited.
-     * 
-     * @param propertyName
-     *            is the property to be marked.
-     */
-    public void markPropertyAsVisited(String propertyName) {
-        propertiesVisited.add(propertyName);
-    }
-
-    /**
-     * Check whether the given property is already visited or not.
-     * 
-     * @param propertyName
-     *            is the property to lookup for.
-     * @return true if the property is marked visited; otherwise false.
-     */
-    public boolean isPropertyVisited(String propertyName) {
-        return propertiesVisited.contains(propertyName);
-    }
-
-    /**
-     * Return a string representation of this object.
-     * 
-     * @return a string representation of this object.
-     */
-    public String toString() {
-        return errorCount + " errors and " + warningCount + " warnings " + name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int compareTo(AntFile otherAntFile) {
-        return new Integer(otherAntFile.getWarningCount())
-                .compareTo(new Integer(this.warningCount))
-                * -1;
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntLintHandler.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntLintHandler.java	Wed Jun 16 16:51:40 2010 +0300
@@ -20,7 +20,8 @@
 import org.xml.sax.Locator;
 import org.xml.sax.helpers.DefaultHandler;
 
-import com.nokia.helium.antlint.checks.Check;
+import com.nokia.helium.antlint.ant.types.AbstractCheck;
+import com.nokia.helium.antlint.ant.types.Check;
 
 /**
  * <code>AntLintHandler</code> is an SAX2 event handler class used to check for
@@ -46,7 +47,7 @@
      * @param check
      *            is the check to be performed.
      */
-    public AntLintHandler(Check check) {
+    public AntLintHandler(AbstractCheck check) {
         super();
         this.check = check;
     }
@@ -66,13 +67,6 @@
     }
 
     /**
-     * {@inheritDoc}
-     */
-    public void endDocument() {
-
-    }
-
-    /**
      * Set whether the handler should check for indentation or not.
      * 
      * @param indentationCheck
@@ -125,7 +119,9 @@
     private void checkIndent() {
         if (indentationCheck) {
             if ((indentSpace != indentLevel) && !textElement) {
-                check.log(locator.getLineNumber() + ": Bad indentation!");
+                check.getReporter().report(check.getSeverity(),
+                        "Bad indentation", check.getAntFile(),
+                        locator.getLineNumber());
             }
         }
     }
@@ -147,24 +143,25 @@
         int numSpaces = 0;
         for (int i = 0; i < strBuff.length(); i++) {
             switch (strBuff.charAt(i)) {
-            case '\t':
-                numSpaces += 4;
-                if (tabCharacterCheck) {
-                    check.log(locator.getLineNumber()
-                            + ": Tabs should not be used!");
-                }
-                break;
-            case '\n':
-                numSpaces = 0;
-                break;
-            case '\r':
-                break;
-            case ' ':
-                numSpaces++;
-                break;
-            default:
-                textElement = true;
-                break;
+                case '\t':
+                    numSpaces += 4;
+                    if (tabCharacterCheck) {
+                        check.getReporter().report(check.getSeverity(),
+                                "Tabs should not be used!", check.getAntFile(),
+                                locator.getLineNumber());
+                    }
+                    break;
+                case '\n':
+                    numSpaces = 0;
+                    break;
+                case '\r':
+                    break;
+                case ' ':
+                    numSpaces++;
+                    break;
+                default:
+                    textElement = true;
+                    break;
             }
         }
         indentSpace = numSpaces;
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/AntProjectVisitor.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
- * 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.antlint;
-
-import java.util.Collection;
-
-import org.dom4j.Element;
-import org.dom4j.VisitorSupport;
-
-import com.nokia.helium.antlint.checks.Check;
-
-/**
- * <code>AntProjectVisitor</code> extends {@link VisitorSupport} and is used to
- * visit the various nodes of the given project and run the antlint checklist
- * against those nodes.
- * 
- */
-public class AntProjectVisitor extends VisitorSupport {
-
-    private Collection<Check> checks;
-
-    /**
-     * Create an instance of {@link AntProjectVisitor}.
-     * 
-     * @param checks is the antlint checklist.
-     */
-    public AntProjectVisitor(Collection<Check> checks) {
-        this.checks = checks;
-    }
-
-    /**
-     * Visit the given node and run the antlint checklist.
-     */
-    public void visit(Element node) {
-        for (Check check : checks) {
-            if (check.isEnabled())
-                check.run(node);
-        }
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/AntlintException.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,36 @@
+/*
+ * 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.antlint.ant;
+
+/**
+ * Exception class for Antlint implementation
+ * 
+ */
+public class AntlintException extends Exception {
+
+    private static final long serialVersionUID = 3420280191500760182L;
+
+    /**
+     * Constructor.
+     * 
+     * @param message
+     */
+    public AntlintException(String message) {
+        super(message);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/Reporter.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,59 @@
+/*
+ * 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.antlint.ant;
+
+import java.io.File;
+
+import org.apache.tools.ant.Task;
+
+/**
+ * To report the antlint errors into antlint task.
+ */
+
+public interface Reporter {
+
+    /**
+     * Open the reporting session.
+     * Ant attribute validation should preferably
+     * happen here.
+     * 
+     */
+    void open();
+
+    /**
+     * Closing the reporting session.
+     */
+    void close();
+    
+    /**
+     * To report the errors into antlint task.
+     * 
+     * @param severity
+     * @param message
+     * @param filename
+     * @param lineNo
+     */
+    void report(Severity severity, String message, File filename, int lineNo);
+
+    /**
+     * To set the task calling reporter.
+     * 
+     * @param task
+     */
+    void setTask(Task task);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/Severity.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,38 @@
+/*
+ * 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.antlint.ant;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * To store the antlint severties.
+ */
+public class Severity extends EnumeratedAttribute {
+
+    private static final String[] VALUES = { "error", "warning" };
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.EnumeratedAttribute#getValues()
+     */
+    @Override
+    public String[] getValues() {
+        return VALUES;
+    }
+
+}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -24,7 +24,30 @@
     <!-- Task definition -->
     <taskdef name="antlint" classname="com.nokia.helium.antlint.ant.taskdefs.AntLintTask"/>
     
-    <!-- Type definition -->
-    <typedef name="checker" classname="com.nokia.helium.antlint.ant.types.Checker"/>
-    
+    <!-- TypeDef definition -->
+    <typedef name="checkTabCharacter" classname="com.nokia.helium.antlint.ant.types.CheckTabCharacter"/>
+    <typedef name="checkProjectName" classname="com.nokia.helium.antlint.ant.types.CheckProjectName"/>
+    <typedef name="checkScriptDefNameAttributes" classname="com.nokia.helium.antlint.ant.types.CheckScriptDefNameAttributes"/>
+    <typedef name="checkPropertyName" classname="com.nokia.helium.antlint.ant.types.CheckPropertyName"/>
+    <typedef name="checkTargetName" classname="com.nokia.helium.antlint.ant.types.CheckTargetName"/>
+    <typedef name="checkIndentation" classname="com.nokia.helium.antlint.ant.types.CheckIndentation"/>
+    <typedef name="checkPresetDefMacroDefName" classname="com.nokia.helium.antlint.ant.types.CheckPresetDefMacroDefName"/>
+    <typedef name="checkDescription" classname="com.nokia.helium.antlint.ant.types.CheckDescription"/>
+    <typedef name="checkRunTarget" classname="com.nokia.helium.antlint.ant.types.CheckRunTarget"/>
+    <typedef name="checkScriptSize" classname="com.nokia.helium.antlint.ant.types.CheckScriptSize"/>
+    <typedef name="checkUseOfIfInTargets" classname="com.nokia.helium.antlint.ant.types.CheckUseOfIfInTargets"/>
+    <typedef name="checkJythonScript" classname="com.nokia.helium.antlint.ant.types.CheckJythonScript"/>
+    <typedef name="checkUseOfEqualsTask" classname="com.nokia.helium.antlint.ant.types.CheckUseOfEqualsTask"/>
+    <typedef name="checkScriptCondition" classname="com.nokia.helium.antlint.ant.types.CheckScriptCondition"/>
+    <typedef name="checkPythonTasks" classname="com.nokia.helium.antlint.ant.types.CheckPythonTasks"/>
+    <typedef name="checkScriptDefStyle" classname="com.nokia.helium.antlint.ant.types.CheckScriptDefStyle"/>
+    <typedef name="checkScriptDef" classname="com.nokia.helium.antlint.ant.types.CheckScriptDef"/>
+    <typedef name="checkDuplicateNames" classname="com.nokia.helium.antlint.ant.types.CheckDuplicateNames"/>
+    <typedef name="checkFileName" classname="com.nokia.helium.antlint.ant.types.CheckFileName"/>
+    <typedef name="checkAntCall" classname="com.nokia.helium.antlint.ant.types.CheckAntCall"/>
+
+    <!-- Reporters -->
+    <typedef name="antlintConsoleReporter" classname="com.nokia.helium.antlint.ant.types.ConsoleReporter"/>
+    <typedef name="antlintCheckstyleReporter" classname="com.nokia.helium.antlint.ant.types.CheckstyleXmlReporter"/>
+
 </antlib>
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/taskdefs/AntLintTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/taskdefs/AntLintTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -19,24 +19,17 @@
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Vector;
-
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.FileSet;
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.dom4j.Visitor;
-import org.dom4j.io.SAXReader;
-import org.dom4j.DocumentException;
-
-import com.nokia.helium.antlint.AntFile;
-import com.nokia.helium.antlint.AntProjectVisitor;
-import com.nokia.helium.antlint.ant.types.Checker;
-import com.nokia.helium.antlint.checks.Check;
+import com.nokia.helium.antlint.ant.AntlintException;
+import com.nokia.helium.antlint.ant.Reporter;
+import com.nokia.helium.antlint.ant.Severity;
+import com.nokia.helium.antlint.ant.types.Check;
+import com.nokia.helium.antlint.ant.types.ConsoleReporter;
 
 /**
  * AntLint Task. This task checks for common coding conventions and errors in
@@ -56,8 +49,6 @@
  * <li>CheckPresetDefMacroDefName : checks the naming convention of presetdef
  * and macrodef</li>
  * <li>CheckProjectName : checks the naming convention of project</li>
- * <li>CheckPropertiesInDataModel : checks whether the properties are defined in
- * data model</li>
  * <li>CheckPropertyName : checks the naming convention of properties</li>
  * </li>
  * <li>CheckPythonTasks : checks the coding convention of python tasks</li>
@@ -94,34 +85,23 @@
  *               &lt;include name=&quot;*build.xml&quot;/&gt;
  *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
  *       &lt;/fileset&gt;
- *       &lt;checker name=&quot;CheckTabCharacter&quot; severity=&quot;error&quot; /&gt;
- *       .
- *       .
- *       &lt;checker name=&quot;CheckTargetName&quot; severity=&quot;warning&quot;&gt;([a-z0-9[\\d\\-]]*)&lt;/checker&gt;
+ *       &lt;CheckTabCharacter&quot; severity=&quot;error&quot; enabled=&quot;true&quot;/&gt;
+ *       &lt;CheckTargetName&quot; severity=&quot;warning&amp;quot enabled=&quot;true&quot; regexp=&quot;([a-z0-9[\\d\\-]]*)&quot;/&gt;
+ *       &lt;CheckScriptDef&quot; severity=&quot;error&quot; enabled=&quot;true&quot; outputDir=&quot;${antlint.test.dir}/output&quot;/&gt;
  *  &lt;/antlint&gt;
  * </pre>
  * 
  * @ant.task name="antlint" category="AntLint"
  * 
  */
-public class AntLintTask extends Task {
-
-    private List<Checker> checkerList = new Vector<Checker>();
-    private List<FileSet> antFileSetList = new ArrayList<FileSet>();
-
-    private List<AntFile> antFilelist = new ArrayList<AntFile>();
-    private List<Check> checkList = new ArrayList<Check>();
+public class AntLintTask extends Task implements Reporter {
 
-    /**
-     * Add the given {@link Checker} to the checklist.
-     * 
-     * @param checker
-     *            is the checker to be added.
-     * @ant.required
-     */
-    public void addChecker(Checker checker) {
-        checkerList.add(checker);
-    }
+    private List<Check> checkerList = new Vector<Check>();
+    private List<FileSet> antFileSetList = new ArrayList<FileSet>();
+    private List<Reporter> reporters = new ArrayList<Reporter>();
+    private int errorCount;
+    private boolean failOnError = true;
+    private ConsoleReporter consoleReporter = new ConsoleReporter();
 
     /**
      * Add a set of files to copy.
@@ -138,117 +118,50 @@
      * Execute the antlint task.
      */
     public final void execute() {
+        if (checkerList.size() == 0) {
+            throw new BuildException("No antlint checks are defined.");
+        }
         try {
-            initialize();
-            startAntLintCheck(); // trigger antlint checking
-        } catch (DocumentException e) {
+            // Adding console reported by default if no
+            // other reporter are mentioned.
+            if (reporters.size() == 0) {
+                reporters.add(consoleReporter);
+            }
+            setTask(this);
+            open();
+            doAntLintCheck();
+        } catch (AntlintException e) {
             throw new BuildException(
                     "Exception occured while running AntLint task "
                             + e.getMessage());
+        } finally {
+            // Closing all reporter session.
+            close();
         }
 
-        int errorCount = 0;
-        for (AntFile antFile : antFilelist) {
-            errorCount = errorCount + antFile.getErrorCount();
-            log(antFile.toString());
-        }
-        if (errorCount > 0) {
-            throw new BuildException(errorCount + " errors found.");
+        if (failOnError && (errorCount > 0)) {
+            throw new BuildException("Build failed because of AntLint errors.");
         }
-    }
-
-    /**
-     * Initialize the checklist setting the checkers against their corresponding
-     * Checks.
-     */
-    private void initialize() {
-        Check check = null;
-        for (Checker checker : checkerList) {
-            check = getCheckObject(checker.getName());
-            if (check != null) {
-                check.setChecker(checker);
-                checkList.add(check);
-            }
-        }
-    }
 
-    /**
-     * Instantiate the given {@link Check}.
-     * 
-     * @param checkerName
-     *            is the name of the Check object to be instantiated.
-     * @return an instance of requested {@link Check}.
-     */
-    @SuppressWarnings("unchecked")
-    private Check getCheckObject(String checkerName) {
-        Check check = null;
-        try {
-            Class clazz = Class.forName("com.nokia.helium.antlint.checks."
-                    + checkerName);
-            if (clazz != null) {
-                check = (Check) clazz.newInstance();
-            }
-        } catch (ClassNotFoundException th) {
-            throw new BuildException("Error in Antlint configuration-ClassNotFoundException:", th);
-        } catch (InstantiationException th) {
-            throw new BuildException("Error in Antlint configuration-InstantiationException:", th);
-        } catch (IllegalAccessException th) {
-            throw new BuildException("Error in Antlint configuration-IllegalAccessException:", th);
-        }
-        return check;
     }
 
     /**
      * Triggers the antlint checking.
      * 
+     * @throws AntlintException
+     * 
      * @throws Exception
      *             if the checking fails.
      */
-    private void startAntLintCheck() throws DocumentException {
-        runOneTimeCheck();
+    private void doAntLintCheck() throws AntlintException {
 
         for (FileSet fs : antFileSetList) {
             DirectoryScanner ds = fs.getDirectoryScanner(getProject());
             String[] srcFiles = ds.getIncludedFiles();
             String basedir = ds.getBasedir().getPath();
-
             for (int i = 0; i < srcFiles.length; i++) {
-                String antFileName = basedir + File.separator + srcFiles[i];
-                getProject().log("*************** Ant File: " + antFileName);
-
-                run(antFileName);
-
-                SAXReader saxReader = new SAXReader();
-                Document doc = saxReader.read(new File(antFileName));
-                treeWalk(doc);
-            }
-            Collections.sort(antFilelist);
-        }
-    }
-
-    /**
-     * Parse the given document.
-     * 
-     * @param document
-     *            is the document to be parsed.
-     */
-    private void treeWalk(final Document document) {
-        Element rootElement = document.getRootElement();
-        Visitor visitorRootElement = new AntProjectVisitor(checkList);
-        rootElement.accept(visitorRootElement);
-    }
-
-    /**
-     * Runs one time antlint checks.
-     * 
-     */
-    private void runOneTimeCheck() {
-        AntFile antFile = new AntFile("General");
-        antFilelist.add(antFile);
-        for (Check check : checkList) {
-            if (check.isEnabled()) {
-                check.setAntFile(antFile);
-                check.run();
+                String antFilename = basedir + File.separator + srcFiles[i];
+                runChecks(new File(antFilename));
             }
         }
     }
@@ -258,15 +171,89 @@
      * 
      * @param antFileName
      *            is the name of the ant file to be checked.
+     * @throws AntlintException
      */
-    private void run(String antFileName) {
-        AntFile antFile = new AntFile(antFileName);
-        antFilelist.add(antFile);
-        for (Check check : checkList) {
+    private void runChecks(File antFilename) throws AntlintException {
+        for (Check check : checkerList) {
             if (check.isEnabled()) {
-                check.setAntFile(antFile);
-                check.run(antFileName);
+                check.validateAttributes();
+                check.setReporter(this);
+                check.run(antFilename);
             }
         }
+
     }
+
+    /**
+     * To add Antlint checkers.
+     * 
+     * @param c
+     */
+    public void add(Check c) {
+        checkerList.add(c);
+    }
+
+    /**
+     * To add reporters.
+     * 
+     * @param reporter
+     */
+    public void add(Reporter reporter) {
+        reporter.setTask(this);
+        reporters.add(reporter);
+    }
+
+    /**
+     * @param failOnError
+     *            the failOnError to set
+     */
+    public void setFailOnError(boolean failOnError) {
+        this.failOnError = failOnError;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.nokia.helium.antlint.ant.Reporter#report(com.nokia.helium.antlint
+     * .ant.Severity, java.lang.String, java.io.File, int)
+     */
+    public void report(Severity severity, String message, File filename,
+            int lineNo) {
+        if (severity.getValue().toUpperCase().equals("ERROR")) {
+            errorCount++;
+        }
+
+        for (Reporter reporter : reporters) {
+            reporter.report(severity, message, filename, lineNo);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.nokia.helium.antlint.ant.Reporter#setTask(org.apache.tools.ant.Task)
+     */
+    @Override
+    public void setTask(Task task) {
+        for (Reporter reporter : reporters) {
+            reporter.setTask(task);
+        }
+    }
+
+    @Override
+    public void close() {
+        for (Reporter reporter : reporters) {
+            reporter.close();
+        }
+    }
+
+    @Override
+    public void open() {
+        for (Reporter reporter : reporters) {
+            reporter.open();
+        }
+    }
+
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractCheck.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,134 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.DataType;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import com.nokia.helium.antlint.ant.Reporter;
+import com.nokia.helium.antlint.ant.Severity;
+
+/**
+ * <code>AbstractCheck</code> is an abstract implementation of {@link Check}.
+ * 
+ */
+public abstract class AbstractCheck extends DataType implements Check {
+
+    private boolean enabled;
+    private Severity severity;
+    private Reporter reporter;
+
+    /**
+     * @param enabled
+     *            the enabled to set
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.nokia.helium.antlint.ant.types.Check#setReporter(com.nokia.helium
+     * .antlint.ant.Reporter)
+     */
+    public void setReporter(Reporter reporter) {
+        this.reporter = reporter;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getReporter()
+     */
+    public Reporter getReporter() {
+        return this.reporter;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.nokia.helium.antlint.ant.types.Check#setSeverity(com.nokia.helium
+     * .antlint.ant.Severity)
+     */
+    public void setSeverity(Severity severity) {
+        this.severity = severity;
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getSeverity()
+     */
+    public Severity getSeverity() {
+        return severity;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        // ignore
+    }
+
+    /**
+     * Return the nodes matching search element.
+     * 
+     * @param element
+     * @param elementName
+     * @param returnNodes
+     */
+    public void elementTreeWalk(Element element, String elementName,
+            List<Element> returnNodes) {
+        for (int i = 0, size = element.nodeCount(); i < size; i++) {
+            Node node = element.node(i);
+            if (node instanceof Element) {
+                if (node.getName().equals(elementName)) {
+                    returnNodes.add((Element) node);
+                }
+                elementTreeWalk((Element) node, elementName, returnNodes);
+            }
+        }
+    }
+
+    /**
+     * To validate checker attributes.
+     * 
+     * @return
+     */
+    public void validateAttributes() {
+        if (severity == null) {
+            throw new BuildException(
+                    "'severity' attribute should be specified for checker '"
+                            + this.toString() + "'");
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/AbstractScriptCheck.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,111 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * <code>AbstractScriptCheck</code> is an abstract implementation of
+ * {@link Check} and contains some concrete methods related to script.
+ * 
+ */
+public abstract class AbstractScriptCheck extends AbstractCheck {
+
+    /**
+     * Write a script with the given name and the text.
+     * 
+     * @param name
+     *            is the name of the script
+     * @param text
+     *            is the script text.
+     */
+    protected void writeJythonFile(String name, String text, File outputDir) {
+        if (outputDir == null) {
+            throw new BuildException("'output' attribute for the checker '"
+                    + this.toString() + "' should be specified.");
+        }
+        if (text.contains("${")) {
+            this.getReporter().report(this.getSeverity(),
+                    "${ found in " + name, this.getAntFile(), 0);
+        }
+        try {
+            String heliumpath = outputDir.getCanonicalPath();
+            new File(heliumpath + File.separator + "jep").mkdirs();
+            File file = new File(heliumpath + File.separator + "jep"
+                    + File.separator + name + "_jep.py");
+            PrintWriter output = new PrintWriter(new FileOutputStream(file));
+            output.write("def abc():\n");
+            output.write("    attributes = {} # pylint: disable-msg=C0103\n");
+            output.write("    elements = {} # pylint: disable-msg=C0103\n");
+            output.write("    project = None # pylint: disable-msg=C0103\n");
+            output.write("    self = None # pylint: disable-msg=C0103\n");
+            text = text.replace(" File(", " self.File(");
+            for (String line : text.split("\n")) {
+                output.write("    " + line + "\n");
+            }
+            output.close();
+
+            if (text.contains("import ")) {
+                File file2 = new File(heliumpath + File.separator
+                        + "test_jython.xml");
+                PrintWriter output2 = new PrintWriter(new FileOutputStream(
+                        file2, true));
+                output2.write("try:\n");
+                for (String line : text.split("\n")) {
+                    if (line.trim().startsWith("import ")
+                            || line.trim().startsWith("from "))
+                        output2.write("    " + line + "\n");
+                }
+
+                output2.write("except ImportError, e:\n");
+                output2.write("    print '" + name + " failed: ' + str(e)\n");
+                output2.close();
+            }
+        } catch (IOException e) {
+            throw new BuildException("Not able to write JEP File " + name
+                    + "_jep.py");
+        }
+    }
+
+    /**
+     * Check for the properties in the given script text.
+     * 
+     * @param text
+     *            is the script text to lookup.
+     */
+    protected void checkJepPropertiesInText(String text) {
+        Pattern p1 = Pattern
+                .compile("getProperty\\([\"']([a-zA-Z0-9\\.]*)[\"']\\)");
+        Matcher m1 = p1.matcher(text);
+        ArrayList<String> props = new ArrayList<String>();
+        while (m1.find()) {
+            props.add(m1.group(1));
+        }
+        /*
+         * for (String group : props) { checkPropertyInModel(group); }
+         */
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/Check.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,113 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+
+import org.dom4j.Element;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+import com.nokia.helium.antlint.ant.Reporter;
+import com.nokia.helium.antlint.ant.Severity;
+
+/**
+ * <code>Check</code> represents a basic antlint component responsible for
+ * running the user configured checks.
+ * 
+ */
+public interface Check {
+
+    /**
+     * Method runs the configured checks against the given node.
+     * 
+     * @param node
+     *            is the node of the xml to be checked.
+     */
+    void run(Element node);
+
+    /**
+     * Method runs the configured checks against the given ant file.
+     * 
+     * @param fileName
+     *            is the name of the ant file.
+     * @param reporter
+     * @throws AntlintException
+     */
+    void run(File fileName) throws AntlintException;
+
+    /**
+     * Return whether this is check is enabled or not.
+     * 
+     * @return true if a checker is available for this check; otherwise false.
+     */
+    boolean isEnabled();
+
+    /**
+     * To set the checker enabled.
+     * 
+     * @param enabled
+     */
+    void setEnabled(boolean enabled);
+
+    /**
+     * To set checker Severity.
+     * 
+     * @param severity
+     */
+    void setSeverity(Severity severity);
+
+    /**
+     * To return current severity.
+     * 
+     * @return
+     */
+    Severity getSeverity();
+
+    /**
+     * To validate the attributes passed.
+     */
+    void validateAttributes();
+
+    /**
+     * To set the reporter.
+     * 
+     * @param reporter
+     */
+    void setReporter(Reporter reporter);
+
+    /**
+     * To get the current reporter.
+     * 
+     * @return
+     */
+    Reporter getReporter();
+
+    /**
+     * Return ant file.
+     * 
+     * @return
+     */
+    File getAntFile();
+
+    /**
+     * To return current checker name.
+     * 
+     * @return
+     */
+    String toString();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckAntCall.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,150 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.Target;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckAntCall</code> is used to check whether antcall is used with no
+ * param elements and calls the target with no dependencies
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckAntCall&quot; severity=&quot;error&quot; enabled=&quot;true&quot;/&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckAntCall" category="AntLint"
+ */
+public class CheckAntCall extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            checkAntCalls(node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkAntCalls(Element node) {
+        if (node.elements("antcall") != null) {
+            List<Element> antcallList = node.elements("antcall");
+            for (Element antcallElement : antcallList) {
+                String antcallName = antcallElement.attributeValue("target");
+                if (((node.elements("param") == null) || (node
+                        .elements("param") != null && node.elements("param")
+                        .isEmpty()))
+                        && !checkTargetDependency(antcallName)) {
+                    this
+                            .getReporter()
+                            .report(
+                                    this.getSeverity(),
+                                    "<antcall> is used with no param elements and calls the target "
+                                            + antcallName
+                                            + " that has no dependencies! (<runtarget> could be used instead.)",
+                                    this.getAntFile(), 0);
+                }
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckAntCall";
+    }
+
+    /**
+     * Check the availability dependent targets of the given target.
+     * 
+     * @param targetName
+     *            is the target for which dependent targets to be loked up.
+     * @return true, if the dependant targets are available; otherwise false
+     */
+    private boolean checkTargetDependency(String targetName) {
+        boolean dependencyCheck = false;
+        Target targetDependency = (Target) getProject().getTargets().get(
+                targetName);
+        dependencyCheck = targetDependency != null
+                && targetDependency.getDependencies().hasMoreElements();
+        return dependencyCheck;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckDescription.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,97 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckDescription</code> is used to check whether project description is
+ * present or not.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckDescription&quot; severity=&quot;error&quot; enabled=&quot;true&quot;/&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckDescription" category="AntLint"
+ */
+public class CheckDescription extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("project")
+                && node.element("description") == null) {
+            this.getReporter().report(this.getSeverity(),
+                    "Description not specified!", this.getAntFile(), 0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            run(doc.getRootElement());
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckDescription";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckDuplicateNames.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,87 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+/**
+ * <code>CheckDuplicateNames</code> is used to check for duplicate macro names.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckDuplicateNames&quot; severity=&quot;error&quot; enabled=&quot;true&quot;/&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckDuplicateNames" category="AntLint"
+ */
+public class CheckDuplicateNames extends AbstractCheck {
+
+    private File antFile;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    @SuppressWarnings("unchecked")
+    public void run(File antFilename) {
+        this.antFile = antFilename;
+        Hashtable<String, Class<Object>> taskdefs = getProject()
+                .getTaskDefinitions();
+        ArrayList<String> macros = new ArrayList<String>(taskdefs.keySet());
+
+        for (String macroName : macros) {
+            if (macros.contains(macroName + "Macro")
+                    || macros.contains(macroName + "macro"))
+                this.getReporter()
+                        .report(
+                                this.getSeverity(),
+                                macroName + " and " + macroName + "Macro"
+                                        + " found duplicate name",
+                                this.getAntFile(), 0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckDuplicateNames";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckFileName.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,103 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * <code>CheckFileName</code> is used to check the naming convention of the ant
+ * files.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckFileName&quot; severity=&quot;error&quot; enabled=&quot;true&quot; regexp=&quot;([a-z0-9[\\d\\-]]*)&quot;/&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckFileName" category="AntLint"
+ * 
+ */
+public class CheckFileName extends AbstractCheck {
+
+    private String regExp;
+    private File antFile;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) {
+        if (antFilename != null) {
+            this.antFile = antFilename;
+            boolean found = false;
+            Pattern p1 = Pattern.compile(getRegExp());
+            Matcher m1 = p1.matcher(antFilename.getName());
+            while (m1.find()) {
+                found = true;
+            }
+            if (!found) {
+                this.getReporter().report(this.getSeverity(),
+                        "INVALID File Name: " + antFilename.getName(),
+                        this.getAntFile(), 0);
+            }
+        }
+    }
+
+    /**
+     * @param regExp
+     *            the regExp to set
+     */
+    public void setRegExp(String regExp) {
+        this.regExp = regExp;
+    }
+
+    /**
+     * @return the regExp
+     */
+    public String getRegExp() {
+        return regExp;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckFileName";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckIndentation.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,97 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.xml.sax.SAXException;
+import java.io.IOException;
+
+import com.nokia.helium.antlint.AntLintHandler;
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckIndentation</code> is used to check the indentations in the ant
+ * files.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckIndentation&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckIndentation" category="AntLint"
+ * 
+ */
+public class CheckIndentation extends AbstractCheck {
+    private File antFile;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        try {
+            this.antFile = antFilename;
+            SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+            saxFactory.setNamespaceAware(true);
+            saxFactory.setValidating(true);
+            SAXParser parser = saxFactory.newSAXParser();
+            AntLintHandler handler = new AntLintHandler(this);
+            handler.setIndentationCheck(true);
+            parser.parse(antFilename, handler);
+        } catch (ParserConfigurationException e) {
+            throw new AntlintException("Not able to parse XML file "
+                    + e.getMessage());
+        } catch (SAXException e) {
+            throw new AntlintException("Not able to parse XML file "
+                    + e.getMessage());
+        } catch (IOException e) {
+            throw new AntlintException("Not able to find XML file "
+                    + e.getMessage());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckIndentation";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckJythonScript.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,149 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckJepJythonScript</code> is used to check the coding convention in
+ * Jep and Jython scripts
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckJepJythonScript&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckJepJythonScript" category="AntLint"
+ * 
+ */
+public class CheckJythonScript extends AbstractScriptCheck {
+
+    private File outputDir;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            checkScripts(node);
+        }
+
+        if (node.getName().equals("scriptdef")) {
+            String scriptdefname = node.attributeValue("name");
+            String language = node.attributeValue("language");
+            if (language.equals("jython")) {
+                writeJythonFile(scriptdefname, node.getText(), outputDir);
+            }
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkScripts(Element node) {
+        String target = node.attributeValue("name");
+        List<Element> scriptList = node.selectNodes("//target[@name='" + target
+                + "']/descendant::script");
+        for (Element scriptElement : scriptList) {
+            String language = scriptElement.attributeValue("language");
+            if (language.equals("jython")) {
+                writeJythonFile("target_" + target, scriptElement.getText(),
+                        outputDir);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        List<Element> scriptNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", scriptNodes);
+            elementTreeWalk(doc.getRootElement(), "scriptdef", scriptNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : scriptNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /**
+     * @param outputDir
+     *            the outputDir to set
+     */
+    public void setOutputDir(File outputDir) {
+        this.outputDir = outputDir;
+    }
+
+    /**
+     * @return the outputDir
+     */
+    public File getOutputDir() {
+        return outputDir;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckJepJythonScript";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPresetDefMacroDefName.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,149 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckPresetDefMacroDefName</code> is used to check the naming
+ * convention of presetdef and macrodef
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckPresetDefMacroDefName&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckPresetDefMacroDefName" category="AntLint"
+ * 
+ */
+public class CheckPresetDefMacroDefName extends AbstractCheck {
+
+    private String regExp;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    public void run(Element node) {
+        if (node.getName().equals("presetdef")
+                || node.getName().equals("macrodef")) {
+            String text = node.attributeValue("name");
+            if (text != null && !text.isEmpty()) {
+                checkDefName(text);
+
+            }
+
+            List<Element> attributeList = node.elements("attribute");
+            for (Element attributeElement : attributeList) {
+                String attributeName = attributeElement.attributeValue("name");
+                checkDefName(attributeName);
+            }
+        }
+    }
+
+    /**
+     * Check the given text.
+     * 
+     * @param text
+     *            is the text to check.
+     */
+    private void checkDefName(String text) {
+        Pattern p1 = Pattern.compile(getRegExp());
+        Matcher m1 = p1.matcher(text);
+        if (!m1.matches()) {
+            this.getReporter().report(this.getSeverity(),
+                    "INVALID PRESETDEF/MACRODEF Name: " + text,
+                    this.getAntFile(), 0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        List<Element> presetDefNodes = new ArrayList<Element>();
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "presetdef", presetDefNodes);
+            elementTreeWalk(doc.getRootElement(), "macrodef", presetDefNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element presetDefNode : presetDefNodes) {
+            run(presetDefNode);
+        }
+    }
+
+    /**
+     * @param regExp
+     *            the regExp to set
+     */
+    public void setRegExp(String regExp) {
+        this.regExp = regExp;
+    }
+
+    /**
+     * @return the regExp
+     */
+    public String getRegExp() {
+        return regExp;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckPresetDefMacroDefName";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckProjectName.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,140 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckProjectName</code> is used to check the naming convention of
+ * project names.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckProjectName&quot; severity=&quot;error&quot; enabled=&quot;true&quot; regexp=&quot;([a-z0-9[\\d\\-]]*)&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckProjectName" category="AntLint"
+ * 
+ */
+public class CheckProjectName extends AbstractCheck {
+    private String regExp;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @throws SAXException
+     * @throws ParserConfigurationException
+     */
+    public void run(Element node) {
+        if (node.getName().equals("project")) {
+            String text = node.attributeValue("name");
+            if (text != null && !text.isEmpty()) {
+                checkProjectName(text);
+            } else {
+                this.getReporter().report(this.getSeverity(),
+                        "Project name not specified!", this.getAntFile(), 0);
+            }
+
+        }
+    }
+
+    /**
+     * Check the given the project name.
+     * 
+     * @param text
+     *            is the text to check.
+     */
+    private void checkProjectName(String text) {
+        Pattern p1 = Pattern.compile(getRegExp());
+        Matcher m1 = p1.matcher(text);
+        if (!m1.matches()) {
+            this.getReporter().report(this.getSeverity(),
+                    "INVALID Project Name: " + text, this.getAntFile(), 0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            run(doc.getRootElement());
+
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+
+    }
+
+    /**
+     * @param regExp
+     *            the regExp to set
+     */
+    public void setRegExp(String regExp) {
+        this.regExp = regExp;
+    }
+
+    /**
+     * @return the regExp
+     */
+    public String getRegExp() {
+        return regExp;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckProjectName";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPropertyName.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,163 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.dom4j.Document;
+
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckPropertyName</code> is used to check the naming convention of
+ * property names.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckPropertyName&quot; severity=&quot;error&quot; enabled=&quot;true&quot; regexp=&quot;([a-z0-9[\\d\\-]]*)&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckPropertyName" category="AntLint"
+ * 
+ */
+public class CheckPropertyName extends AbstractCheck {
+
+    private ArrayList<String> propertiesVisited = new ArrayList<String>();
+    private String regExp;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("property")) {
+            String text = node.attributeValue("name");
+            if (text != null && !text.isEmpty()) {
+                checkPropertyName(text);
+            }
+        }
+    }
+
+    /**
+     * Check the given property name.
+     * 
+     * @param propertyName
+     *            is the property name to check.
+     */
+    private void checkPropertyName(String propertyName) {
+        Pattern p1 = Pattern.compile(getRegExp());
+        Matcher m1 = p1.matcher(propertyName);
+        if (!m1.matches() && !isPropertyAlreadyVisited(propertyName)) {
+            this.getReporter().report(this.getSeverity(),
+                    "INVALID Property Name: " + propertyName,
+                    this.getAntFile(), 0);
+            markPropertyAsVisited(propertyName);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        List<Element> propertyNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "property", propertyNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element propertyNode : propertyNodes) {
+            run(propertyNode);
+        }
+    }
+
+    /**
+     * Check whether the property is already visited or not.
+     * 
+     * @param propertyName
+     *            is the property to be checked.
+     * @return true, if already been visited; otherwise false
+     */
+    private boolean isPropertyAlreadyVisited(String propertyName) {
+        return propertiesVisited.contains(propertyName);
+    }
+
+    /**
+     * Mark the given property as visited.
+     * 
+     * @param propertyName
+     *            is the property to be marked.
+     */
+    private void markPropertyAsVisited(String propertyName) {
+        propertiesVisited.add(propertyName);
+    }
+
+    /**
+     * @param regExp
+     *            the regExp to set
+     */
+    public void setRegExp(String regExp) {
+        this.regExp = regExp;
+    }
+
+    /**
+     * @return the regExp
+     */
+    public String getRegExp() {
+        return regExp;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckPropertyName";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckPythonTasks.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,161 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckPythonTasks</code> is used to the check the coding convention of
+ * python tasks.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckPythonTasks&quot; severity=&quot;error&quot; enabled=&quot;true&quot; outputDir=&quot;${antlint.test.dir}/output&quot;/&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckPythonTasks" category="AntLint"
+ */
+public class CheckPythonTasks extends AbstractCheck {
+
+    private File outputDir;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            String target = node.attributeValue("name");
+            List<Element> pythonList = node.selectNodes("//target[@name='"
+                    + target + "']/descendant::*[name()=\"hlm:python\"]");
+            int i = 0;
+            for (Element pythonElement : pythonList) {
+                writePythonFile(i + "_" + target, pythonElement.getText());
+                i++;
+            }
+        }
+    }
+
+    /**
+     * Writes the given text to a python file.
+     * 
+     * @param name
+     *            is the name of the file to be written.
+     * @param text
+     *            is the text to be written inside the file.
+     */
+    private void writePythonFile(String name, String text) {
+        if (getOutputDir() == null) {
+            throw new BuildException("'output' attribute for the checker '"
+                    + this.toString() + "' should be specified.");
+        }
+        try {
+            String heliumpath = getOutputDir().getCanonicalPath();
+            new File(heliumpath + File.separator + "python").mkdirs();
+            File file = new File(heliumpath + File.separator + "python"
+                    + File.separator + "target" + name + ".py");
+            PrintWriter output = new PrintWriter(new FileOutputStream(file));
+            if (!text.equals("")) {
+                output.write("def abc():");
+                for (String line : text.split("\n"))
+                    output.write("    " + line + "\n");
+            }
+            output.close();
+        } catch (IOException e) {
+            throw new BuildException(
+                    "IOException:Not able to write python file " + name + ".py");
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /**
+     * @param outputDir
+     *            the outputDir to set
+     */
+    public void setOutputDir(File outputDir) {
+        this.outputDir = outputDir;
+    }
+
+    /**
+     * @return the outputDir
+     */
+    public File getOutputDir() {
+        return outputDir;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckPythonTasks";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckRunTarget.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,145 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.Target;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckRunTarget</code> is used to check whether runtarget calls a target
+ * that has dependencies.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckRunTarget&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckRunTarget" category="AntLint"
+ * 
+ */
+public class CheckRunTarget extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            checkRunTargets(node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkRunTargets(Element node) {
+        if (node.elements("runtarget") != null) {
+            List<Element> runTargetList = node.elements("runtarget");
+            for (Element runTargetElement : runTargetList) {
+                String runTargetName = runTargetElement
+                        .attributeValue("target");
+                if (checkTargetDependency(runTargetName)) {
+                    this.getReporter().report(
+                            this.getSeverity(),
+                            "<runtarget> calls the target " + runTargetName
+                                    + " that has dependencies!",
+                            this.getAntFile(), 0);
+                }
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckRunTarget";
+    }
+
+    /**
+     * Check the availability dependent targets of the given target.
+     * 
+     * @param targetName
+     *            is the target for which dependent targets to be loked up.
+     * @return true, if the dependant targets are available; otherwise false
+     */
+    private boolean checkTargetDependency(String targetName) {
+        boolean dependencyCheck = false;
+        Target targetDependency = (Target) getProject().getTargets().get(
+                targetName);
+        dependencyCheck = targetDependency != null
+                && targetDependency.getDependencies().hasMoreElements();
+        return dependencyCheck;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptCondition.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,139 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckScriptCondition</code> is used to check the coding convention in
+ * script condition
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckScriptCondition&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckScriptCondition" category="AntLint"
+ * 
+ */
+public class CheckScriptCondition extends AbstractScriptCheck {
+
+    private File outputDir;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            checkScriptConditions(node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkScriptConditions(Element node) {
+        String target = node.attributeValue("name");
+        List<Element> scriptList = node.selectNodes("//target[@name='" + target
+                + "']/descendant::scriptcondition");
+        for (Element scriptElement : scriptList) {
+            String language = scriptElement.attributeValue("language");
+            if (language.equals("jython")) {
+                writeJythonFile("scriptcondition_" + target, scriptElement
+                        .getText(), outputDir);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /**
+     * @param outputDir
+     *            the outputDir to set
+     */
+    public void setOutputDir(File outputDir) {
+        this.outputDir = outputDir;
+    }
+
+    /**
+     * @return the outputDir
+     */
+    public File getOutputDir() {
+        return outputDir;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckScriptCondition";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDef.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,205 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckScriptDef</code> is used to check the coding convention in
+ * scriptdef.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckScriptDef&quot; severity=&quot;error&quot; enabled=&quot;true&quot; outputDir=&quot;${antlint.test.dir}/output&quot;/&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckScriptDef" category="AntLint"
+ * 
+ */
+public class CheckScriptDef extends AbstractScriptCheck {
+
+    private File outputDir;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("scriptdef")) {
+            String scriptdefname = node.attributeValue("name");
+            String language = node.attributeValue("language");
+
+            checkScriptDef(scriptdefname, node);
+
+            if (language.equals("beanshell")) {
+                writeBeanshellFile(scriptdefname, node.getText());
+            }
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    public void checkScriptDef(String name, Node node) {
+        List<Node> statements = node.selectNodes("//scriptdef[@name='" + name
+                + "']/attribute");
+        Pattern p1 = Pattern.compile("attributes.get\\([\"']([^\"']*)[\"']\\)");
+        Matcher m1 = p1.matcher(node.getText());
+        ArrayList<String> props = new ArrayList<String>();
+        while (m1.find()) {
+            props.add(m1.group(1));
+        }
+
+        if (!statements.isEmpty() && !props.isEmpty()) {
+            for (Node statement : statements) {
+                if (!props.contains(statement.valueOf("@name"))) {
+                    this.getReporter().report(
+                            this.getSeverity(),
+                            "Scriptdef " + name + " does not use "
+                                    + statement.valueOf("@name"),
+                            this.getAntFile(), 0);
+                }
+            }
+        }
+    }
+
+    /**
+     * Write a bean shell file with the given text.
+     * 
+     * @param scriptdefname
+     *            is the name of the file to be written.
+     * @param text
+     *            is the text to be written inside the file.
+     */
+    private void writeBeanshellFile(String scriptdefname, String text) {
+        if (getOutputDir() == null) {
+            throw new BuildException("'output' attribute for the checker '"
+                    + this.toString() + "' should be specified.");
+        }
+        scriptdefname = "Beanshell" + scriptdefname;
+        try {
+            String heliumpath = getOutputDir().getCanonicalPath();
+            new File(heliumpath + File.separator + "beanshell").mkdirs();
+            File file = new File(heliumpath + File.separator + "beanshell"
+                    + File.separator + scriptdefname + ".java");
+            PrintWriter output = new PrintWriter(new FileOutputStream(file));
+
+            for (String line : text.split("\n")) {
+                if (line.trim().startsWith("import"))
+                    output.write(line + "\n");
+            }
+
+            output.write("/**\n * x\n */\npublic final class " + scriptdefname
+                    + " {\n");
+            output.write("private " + scriptdefname + "() { }\n");
+            output.write("public static void main(String[] args) {\n");
+            for (String line : text.split("\n")) {
+                if (!line.trim().startsWith("import"))
+                    output.write(line + "\n");
+            }
+            output.write("} }");
+            output.close();
+        } catch (IOException e) {
+            throw new BuildException("Not able to write Beanshell File "
+                    + scriptdefname + ".java");
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> scriptDefNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "scriptdef", scriptDefNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element scriptDefNode : scriptDefNodes) {
+            run(scriptDefNode);
+        }
+    }
+
+    /**
+     * @param outputDir
+     *            the outputDir to set
+     */
+    public void setOutputDir(File outputDir) {
+        this.outputDir = outputDir;
+    }
+
+    /**
+     * @return the outputDir
+     */
+    public File getOutputDir() {
+        return outputDir;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckScriptDef";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDefNameAttributes.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,136 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckScriptDefNameAttributes</code> is used to check the naming
+ * convention of scriptdef name attributes
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckScriptDefNameAttributes&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckScriptDefNameAttributes" category="AntLint"
+ */
+public class CheckScriptDefNameAttributes extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("scriptdef")) {
+            String scriptdefname = node.attributeValue("name");
+            checkScriptDefNameAttributes(scriptdefname, node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    public void checkScriptDefNameAttributes(String name, Node node) {
+        List<Node> statements = node.selectNodes("//scriptdef[@name='" + name
+                + "']/attribute");
+        Pattern p1 = Pattern.compile("attributes.get\\([\"']([^\"']*)[\"']\\)");
+        Matcher m1 = p1.matcher(node.getText());
+        ArrayList<String> props = new ArrayList<String>();
+        while (m1.find()) {
+            props.add(m1.group(1));
+        }
+
+        ArrayList<String> attributes = new ArrayList<String>();
+        for (Node statement : statements) {
+            attributes.add(statement.valueOf("@name"));
+        }
+        for (String attribute : props) {
+            if (!attributes.contains(attribute)) {
+                this.getReporter().report(this.getSeverity(),
+                        "Scriptdef " + name + " does not have attribute " + attribute,
+                        this.getAntFile(), 0);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> scriptDefNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "scriptdef", scriptDefNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element scriptDefNode : scriptDefNodes) {
+            run(scriptDefNode);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckScriptDefNameAttributes";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptDefStyle.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,141 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckScriptDefStyle</code> is used to check the coding style of
+ * scriptdef.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckScriptDefStyle&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckScriptDefStyle" category="AntLint"
+ * 
+ */
+public class CheckScriptDefStyle extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("scriptdef")) {
+            String scriptdefname = node.attributeValue("name");
+            checkScriptDefStyle(scriptdefname, node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    public void checkScriptDefStyle(String name, Node node) {
+        List<Node> statements = node.selectNodes("//scriptdef[@name='" + name
+                + "']/attribute");
+        Pattern p1 = Pattern.compile("attributes.get\\([\"']([^\"']*)[\"']\\)");
+        Matcher m1 = p1.matcher(node.getText());
+        ArrayList<String> props = new ArrayList<String>();
+        while (m1.find()) {
+            props.add(m1.group(1));
+        }
+
+        ArrayList<String> attributes = new ArrayList<String>();
+        for (Node statement : statements) {
+            attributes.add(statement.valueOf("@name"));
+        }
+
+        if (!statements.isEmpty() && props.isEmpty()) {
+            this
+                    .getReporter()
+                    .report(
+                            this.getSeverity(),
+                            "Scriptdef "
+                                    + name
+                                    + " doesn't reference attributes directly, poor style",
+                            this.getAntFile(), 0);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> scriptDefNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "scriptdef", scriptDefNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element scriptDefNode : scriptDefNodes) {
+            run(scriptDefNode);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckScriptDefStyle";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckScriptSize.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,131 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckScriptSize</code> is used to check the size of script. By default,
+ * the script should not contain more than 1000 characters.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckScriptSize&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckScriptSize" category="AntLint"
+ * 
+ */
+public class CheckScriptSize extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            checkSizeOfScript(node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkSizeOfScript(Element node) {
+        String target = node.attributeValue("name");
+
+        List<Node> statements = node.selectNodes("//target[@name='" + target
+                + "']/script | //target[@name='" + target
+                + "']/*[name()=\"hlm:python\"]");
+
+        for (Node statement : statements) {
+            int size = statement.getText().length();
+            if (size > 1000) {
+                this
+                        .getReporter()
+                        .report(
+                                this.getSeverity(),
+                                "Target "
+                                        + target
+                                        + " has a script with "
+                                        + size
+                                        + " characters, code should be inside a python file",
+                                this.getAntFile(), 0);
+            }
+        }
+    }
+
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckScriptSize";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTabCharacter.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,134 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.List;
+import java.io.IOException;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.xml.sax.SAXException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+
+import com.nokia.helium.antlint.AntLintHandler;
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckTabCharacter</code> is used to check the tab characters inside the
+ * ant files.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckTabCharacter&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckTabCharacter" category="AntLint"
+ * 
+ */
+public class CheckTabCharacter extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        checkTabsInScript(node);
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkTabsInScript(Element node) {
+        if (node.getName().equals("target")) {
+            String target = node.attributeValue("name");
+
+            List<Node> statements = node.selectNodes("//target[@name='"
+                    + target + "']/script | //target[@name='" + target
+                    + "']/*[name()=\"hlm:python\"]");
+
+            for (Node statement : statements) {
+                if (statement.getText().contains("\t")) {
+                    this.getReporter().report(getSeverity(),
+                            "Target " + target + " has a script with tabs",
+                            getAntFile(), 0);
+                }
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+        try {
+            this.antFile = antFilename;
+            SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+            saxFactory.setNamespaceAware(true);
+            saxFactory.setValidating(true);
+            SAXParser parser = saxFactory.newSAXParser();
+            AntLintHandler handler = new AntLintHandler(this);
+            handler.setTabCharacterCheck(true);
+            parser.parse(antFilename, handler);
+        } catch (ParserConfigurationException e) {
+            throw new AntlintException("Not able to parse XML file "
+                    + e.getMessage());
+        } catch (SAXException e) {
+            throw new AntlintException("Not able to parse XML file "
+                    + e.getMessage());
+        } catch (IOException e) {
+            throw new AntlintException("Not able to find XML file "
+                    + e.getMessage());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckTabCharacter";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckTargetName.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,147 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckTargetName</code> is used to check the naming convention of the
+ * target names.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckTargetName&quot; severity=&quot;error&quot; enabled=&quot;true&quot; regexp=&quot;([a-z0-9[\\d\\-]]*)&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckTargetName" category="AntLint"
+ * 
+ */
+public class CheckTargetName extends AbstractCheck {
+
+    private String regExp;
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            String target = node.attributeValue("name");
+            if (!target.equals("tearDown") && !target.equals("setUp")
+                    && !target.equals("suiteTearDown")
+                    && !target.equals("suiteSetUp")) {
+                checkTargetName(target);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /**
+     * Check the given target name.
+     * 
+     * @param targetName
+     *            is the target name to check.
+     */
+    private void checkTargetName(String targetName) {
+        if (targetName != null && !targetName.isEmpty()) {
+            Pattern p1 = Pattern.compile(getRegExp());
+            Matcher m1 = p1.matcher(targetName);
+            if (!m1.matches()) {
+                this.getReporter().report(this.getSeverity(),
+                        "INVALID Target Name: " + targetName,
+                        this.getAntFile(), 0);
+            }
+        } else {
+            log("Target name not specified!");
+        }
+    }
+
+    /**
+     * @return the regExp
+     */
+    public String getRegExp() {
+        return regExp;
+    }
+
+    /**
+     * @param regExp
+     *            the regExp to set
+     */
+    public void setRegExp(String regExp) {
+        this.regExp = regExp;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckTargetName";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckUseOfEqualsTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,111 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckUseOfEqualsTask</code> is used to check the usage of equals task
+ * as against istrue task.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckUseOfEqualsTask&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckUseOfEqualsTask" category="AntLint"
+ */
+public class CheckUseOfEqualsTask extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("equals")) {
+            String text = node.attributeValue("arg2");
+            if (text.equals("true") || text.equals("yes")) {
+                this.getReporter().report(
+                        this.getSeverity(),
+                        node.attributeValue("arg1")
+                                + " uses 'equals' should use 'istrue' task",
+                        this.getAntFile(), 0);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> equalNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "equals", equalNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element equalNode : equalNodes) {
+            run(equalNode);
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckUseOfEqualsTask";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckUseOfIfInTargets.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,163 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+
+import com.nokia.helium.antlint.ant.AntlintException;
+
+/**
+ * <code>CheckUseOfIfInTargets</code> is used to check the usage of if task as
+ * against the condition task or &lt;target if|unless="property.name"&gt; inside
+ * targets.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       &lt;CheckUseOfIfInTargets&quot; severity=&quot;error&quot; enabled=&quot;true&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ * 
+ * @ant.task name="CheckUseOfIfInTargets" category="AntLint"
+ * 
+ */
+public class CheckUseOfIfInTargets extends AbstractCheck {
+
+    private File antFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run(Element node) {
+        if (node.getName().equals("target")) {
+            checkUseOfIf(node);
+        }
+    }
+
+    /**
+     * Check against the given node.
+     * 
+     * @param node
+     *            is the node to check.
+     */
+    @SuppressWarnings("unchecked")
+    private void checkUseOfIf(Element node) {
+        String target = node.attributeValue("name");
+        String targetxpath = "//target[@name='" + target + "']//if";
+
+        List<Node> statements2 = node.selectNodes(targetxpath);
+        for (Node statement : statements2) {
+            List<Node> conditiontest = statement.selectNodes("./then/property");
+            if (conditiontest != null && conditiontest.size() == 1) {
+                List<Node> conditiontest2 = statement
+                        .selectNodes("./else/property");
+                if (conditiontest2 != null && conditiontest2.size() == 1) {
+                    this
+                            .getReporter()
+                            .report(
+                                    this.getSeverity(),
+                                    "Target "
+                                            + target
+                                            + " poor use of if-else-property statement, use condition task",
+                                    this.getAntFile(), 0);
+                } else if (statement.selectNodes("./else").size() == 0) {
+                    this
+                            .getReporter()
+                            .report(
+                                    this.getSeverity(),
+                                    "Target "
+                                            + target
+                                            + " poor use of if-then-property statement, use condition task",
+                                    this.getAntFile(), 0);
+                }
+            }
+        }
+        List<Node> statements = node.selectNodes("//target[@name='" + target
+                + "']/*");
+        if (!(statements.size() > 1)) {
+            if (node.selectSingleNode(targetxpath + "/else") == null) {
+                if (node.selectSingleNode(targetxpath + "/isset") != null
+                        || node.selectSingleNode(targetxpath + "/not/isset") != null) {
+                    this
+                            .getReporter()
+                            .report(
+                                    this.getSeverity(),
+                                    "Target "
+                                            + target
+                                            + " poor use of if statement, use <target if|unless=\"prop\"",
+                                    this.getAntFile(), 0);
+                }
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#run(java.io.File)
+     */
+    public void run(File antFilename) throws AntlintException {
+
+        List<Element> targetNodes = new ArrayList<Element>();
+
+        this.antFile = antFilename;
+        SAXReader saxReader = new SAXReader();
+        Document doc;
+        try {
+            doc = saxReader.read(antFilename);
+            elementTreeWalk(doc.getRootElement(), "target", targetNodes);
+        } catch (DocumentException e) {
+            throw new AntlintException("Invalid XML file " + e.getMessage());
+        }
+        for (Element targetNode : targetNodes) {
+            run(targetNode);
+        }
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tools.ant.types.DataType#toString()
+     */
+    public String toString() {
+        return "CheckUseOfIfInTargets";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.nokia.helium.antlint.ant.types.Check#getAntFile()
+     */
+    public File getAntFile() {
+        return this.antFile;
+    }
+}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/Checker.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
- * 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.antlint.ant.types;
-
-import org.apache.tools.ant.types.DataType;
-
-/**
- * <code>Checker</code> is a datatype used to hold information related to
- * antlint check configurations.
- * 
- * <pre>
- * Usage:
- *  
- *      &lt;checker name=&quot;CheckTargetName&quot; severity=&quot;warning&quot;&gt;([a-z0-9[\\d\\-]]*)&lt;/checker&gt;
- * </pre>
- * 
- */
-public class Checker extends DataType {
-
-    private String name;
-    private String text;
-    private String severity;
-
-    /**
-     * Set the pattern text.
-     * 
-     * @param text
-     *            is the pattern text to set.
-     */
-    public void addText(String text) {
-        this.text = text;
-    }
-
-    /**
-     * Get the name of the Checker.
-     * 
-     * @return name of the checker.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Set the name of the Checker.
-     * 
-     * @param name
-     *            is the name of the checker to set.
-     * @ant.required
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Get the pattern set for this Checker.
-     * 
-     * @return the pattern.
-     */
-    public String getPattern() {
-        return text;
-    }
-
-    /**
-     * Get the severity.
-     * 
-     * @return the severity
-     */
-    public String getSeverity() {
-        return severity;
-    }
-
-    /**
-     * Set the severity. (Valid values : error|warning)
-     * 
-     * @param severity
-     *            is the severity to set.
-     * @ant.required
-     */
-    public void setSeverity(String severity) {
-        this.severity = severity;
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/CheckstyleXmlReporter.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,161 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.DataType;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.nokia.helium.antlint.ant.Reporter;
+import com.nokia.helium.antlint.ant.Severity;
+
+/**
+ * This reporter will generate a Checkstyle compatible XML to
+ * report Antlint issues.
+ * 
+ * Usage:
+ * 
+ * <pre>
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       
+ *       ...
+ *       
+ *       &lt;antlintCheckstyleReporter file=&quot;report.xml&quot; /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ *    
+ * @ant.type name="antlintCheckstyleReporter" category="AntLint"
+ */
+public class CheckstyleXmlReporter extends DataType implements Reporter {
+
+    private Task task;
+    private Document doc;
+    private File file;
+    private Element currentFileNode;
+    private File currentFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void report(Severity severity, String message, File filename,
+            int lineNo) {
+        if (doc != null) {
+            if (currentFile == null || !currentFile.equals(filename)) {
+                currentFileNode = doc.createElement("file");
+                doc.getDocumentElement().appendChild(currentFileNode);
+                currentFile = filename;
+                currentFileNode.setAttribute("name", currentFile.getAbsolutePath());
+            }
+            Element element = doc.createElement("error");
+            element.setAttribute("severity", severity.getValue());
+            element.setAttribute("message", message);
+            element.setAttribute("line", "" + lineNo);
+            element.setAttribute("source", "antlint");
+            currentFileNode.appendChild(element);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setTask(Task task) {
+        this.task = task;
+    }
+
+    /**
+     * Closing the reporting session. It will generates
+     * the xml file.
+     */
+    @Override
+    public void close() {
+        task.log("Creating " + file);
+        try {
+            // set up a transformer
+            TransformerFactory transfac = TransformerFactory.newInstance();
+            Transformer trans = transfac.newTransformer();
+            trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+            trans.setOutputProperty(OutputKeys.INDENT, "yes");
+
+            // create string from xml tree
+            Writer writer = new FileWriter(file);
+            StreamResult result = new StreamResult(writer);
+            DOMSource source = new DOMSource(doc);
+            trans.transform(source, result);
+        } catch (TransformerException e) {
+            throw new BuildException(e.getMessage(), e);
+        } catch (IOException e) {
+            throw new BuildException(e.getMessage(), e);
+        } finally {
+            task = null;
+        }
+    }
+
+    /**
+     * {@inheritDoc}    
+     */
+    @Override
+    public void open() {
+        if (file == null) {
+            throw new BuildException("'file' attribute is not defined.");
+        }
+        try {
+            DocumentBuilderFactory builder = DocumentBuilderFactory.newInstance();
+            DocumentBuilder docBuilder;
+            docBuilder = builder.newDocumentBuilder();
+            doc = docBuilder.newDocument();
+            Element root = doc.createElement("checkstyle");
+            root.setAttribute("version", "5.0");
+            doc.appendChild(root);
+        } catch (ParserConfigurationException e) {
+            throw new BuildException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * Defines the output file.
+     * @param file
+     * @ant.required
+     */
+    public void setFile(File file) {
+        this.file = file;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/ant/types/ConsoleReporter.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,113 @@
+/*
+ * 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.antlint.ant.types;
+
+import java.io.File;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.DataType;
+
+import com.nokia.helium.antlint.ant.Reporter;
+import com.nokia.helium.antlint.ant.Severity;
+
+/**
+ * This reporter will produce Antlint reporting using ant logging
+ * system.
+ *    
+ * Usage:
+ * 
+ * <pre>
+ *  &lt;antlint&gt;
+ *       &lt;fileset id=&quot;antlint.files&quot; dir=&quot;${antlint.test.dir}/data&quot;&gt;
+ *               &lt;include name=&quot;*.ant.xml&quot;/&gt;
+ *               &lt;include name=&quot;*build.xml&quot;/&gt;
+ *               &lt;include name=&quot;*.antlib.xml&quot;/&gt;
+ *       &lt;/fileset&gt;
+ *       
+ *       ...
+ *       
+ *       &lt;antlintCheckstyleReporter /&gt;
+ *  &lt;/antlint&gt;
+ * </pre>
+ *
+ * @ant.type name="antlintConsoleReporter" category="AntLint"
+ */
+public class ConsoleReporter extends DataType implements Reporter {
+
+    private Task task;
+    private File antFilename;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.nokia.helium.antlint.ant.Reporter#report(com.nokia.helium.antlint
+     * .ant.Severity, java.lang.String, java.io.File, int)
+     */
+    @Override
+    public void report(Severity severity, String message, File filename,
+            int lineNo) {
+        String errorMessage;
+        if (this.antFilename == null) {
+            this.antFilename = filename;
+            task.log("\nError(s)/Warning(s) for: " + this.antFilename);
+            task
+                    .log("----------------------------------------------------------");
+        } else if (!this.antFilename.equals(filename)) {
+            this.antFilename = filename;
+            task.log("\nError(s)/Warning(s) for: " + this.antFilename);
+            task
+                    .log("----------------------------------------------------------");
+        }
+        if (lineNo > 0) {
+            errorMessage = severity.getValue().toUpperCase() + ": " + lineNo
+                    + ": " + message;
+
+        } else {
+            errorMessage = severity.getValue().toUpperCase() + ": " + message;
+        }
+        task.log(errorMessage);
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.nokia.helium.antlint.ant.Reporter#setTask(org.apache.tools.ant.Task)
+     */
+    @Override
+    public void setTask(Task task) {
+        this.task = task;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void close() {
+        this.task = null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void open() {
+    }
+
+}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/AbstractCheck.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,199 +0,0 @@
-/*
- * 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.antlint.checks;
-
-//import java.io.File;
-//import java.util.List;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Target;
-import org.dom4j.Document;
-import org.dom4j.Element;
-//import org.dom4j.Node;
-import org.dom4j.io.SAXReader;
-
-import com.nokia.helium.antlint.AntFile;
-import com.nokia.helium.antlint.ant.types.Checker;
-
-/**
- * <code>AbstractCheck</code> is an abstract implementation of {@link Check}.
- * 
- */
-public abstract class AbstractCheck implements Check {
-
-    private Checker checker;
-    private AntFile antFile;
-    private boolean enabled;
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setChecker(Checker checker) {
-        this.checker = checker;
-        this.enabled = true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setAntFile(AntFile antFile) {
-        this.antFile = antFile;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Checker getChecker() {
-        return this.checker;
-    }
-
-    /**
-     * Return the {@link AntFile} set.
-     * 
-     * @return the {@link AntFile}
-     */
-    protected AntFile getAntFile() {
-        return antFile;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void log(String message) {
-        if (checker.getSeverity() != null
-                && checker.getSeverity().equalsIgnoreCase("error")) {
-            logError(message);
-            antFile.incrementErrorCount();
-        } else {
-            logWarning(message);
-            antFile.incrementWarningCount();
-        }
-    }
-
-    /**
-     * Get the {@link Pattern} associated with current {@link Check}.
-     * 
-     * @return the Pattern.
-     */
-    protected String getPattern() {
-        return checker.getPattern();
-    }
-
-    /**
-     * Get the {@link Project}.
-     * 
-     * @return the {@link Project}
-     */
-    protected Project getProject() {
-        return checker.getProject();
-    }
-
-    /**
-     * Check the availability dependent targets of the given target.
-     * 
-     * @param targetName
-     *            is the target for which dependent targets to be loked up.
-     * @return true, if the dependant targets are available; otherwise false
-     */
-    protected boolean checkTargetDependency(String targetName) {
-        boolean dependencyCheck = false;
-        Target targetDependency = (Target) getProject().getTargets().get(
-                targetName);
-        dependencyCheck = targetDependency != null
-                && targetDependency.getDependencies().hasMoreElements();
-        return dependencyCheck;
-    }
-
-    /**
-     * Check the whether the given property is defined in the data model.
-     * 
-     * @param customerProp
-     *            is the property to check for.
-     */
-    @SuppressWarnings("unchecked")
-    protected void checkPropertyInModel(String customerProp) {
-        SAXReader xmlReader = new SAXReader();
-        Document antDoc = null;
-        
-        // TODO
-
-//        try {
-//            File model = new File(getProject().getProperty("data.model.parsed"));
-//            antDoc = xmlReader.read(model);
-//      } catch (Exception e) {
-//            throw new BuildException("Not able to read data model file "
-//                    + getProject().getProperty("data.model.parsed"));
-//        }
-//
-//        List<Node> statements = antDoc.selectNodes("//property");
-//
-//        for (Node statement : statements) {
-//            if (customerProp.equals(statement.valueOf("name"))) {
-//                return;
-//            }
-//        }
-//        log(customerProp + " not in data model");
-    }
-
-    /**
-     * Log the given message as an error.
-     * 
-     * @param message
-     *            is the message to log.
-     */
-    private void logError(String message) {
-        getProject().log("E: " + message);
-    }
-
-    /**
-     * Log the given message as an warning.
-     * 
-     * @param message
-     *            is the message to log.
-     */
-    private void logWarning(String message) {
-        getProject().log("W: " + message);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        // ignore
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(String text) {
-        // ignore
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run() {
-        // ignore
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/AbstractScriptCheck.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * <code>AbstractScriptCheck</code> is an abstract implementation of
- * {@link Check} and contains some concrete methods related to script.
- * 
- */
-public abstract class AbstractScriptCheck extends AbstractCheck {
-
-    /**
-     * Write a script with the given name and the text.
-     * 
-     * @param name is the name of the script
-     * @param text is the script text.
-     */
-    protected void writeJepFile(String name, String text) {
-        if (text.contains("${")) {
-            log("${ found in " + name);
-        }
-        try {
-            String heliumpath = new File(getProject().getProperty(
-                    "helium.build.dir")).getCanonicalPath();
-            new File(heliumpath + File.separator + "jep").mkdirs();
-            File file = new File(heliumpath + File.separator + "jep"
-                    + File.separator + name + "_jep.py");
-            PrintWriter output = new PrintWriter(new FileOutputStream(file));
-            output.write("def abc():\n");
-            output.write("    attributes = {} # pylint: disable-msg=C0103\n");
-            output.write("    elements = {} # pylint: disable-msg=C0103\n");
-            output.write("    project = None # pylint: disable-msg=C0103\n");
-            output.write("    self = None # pylint: disable-msg=C0103\n");
-            text = text.replace(" File(", " self.File(");
-            for (String t : text.split("\n"))
-                output.write("    " + t + "\n");
-            output.close();
-
-            if (text.contains("import ")) {
-                File file2 = new File(heliumpath + File.separator
-                        + "test_jython.xml");
-                PrintWriter output2 = new PrintWriter(new FileOutputStream(
-                        file2, true));
-                output2.write("try:\n");
-                for (String line : text.split("\n")) {
-                    if (line.trim().startsWith("import ")
-                            || line.trim().startsWith("from "))
-                        output2.write("    " + line + "\n");
-                }
-
-                output2.write("except ImportError, e:\n");
-                output2.write("    print '" + name
-                        + " failed: ' + str(e)\n");
-                output2.close();
-            }
-        } catch (IOException e) {
-            throw new BuildException("Not able to write JEP File "
-                    + name + "_jep.py");
-        }
-    }
-
-    /**
-     * Check for the properties in the given script text.
-     * 
-     * @param text is the script text to lookup.
-     */
-    protected void checkJepPropertiesInText(String text) {
-        Pattern p1 = Pattern
-                .compile("getProperty\\([\"']([a-zA-Z0-9\\.]*)[\"']\\)");
-        Matcher m1 = p1.matcher(text);
-        ArrayList<String> props = new ArrayList<String>();
-        while (m1.find()) {
-            props.add(m1.group(1));
-        }
-        for (String group : props)
-            checkPropertyInModel(group);
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/Check.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import org.dom4j.Element;
-
-import com.nokia.helium.antlint.AntFile;
-import com.nokia.helium.antlint.ant.types.Checker;
-
-/**
- * <code>Check</code> represents a basic antlint component responsible for
- * running the user configured checks.
- * 
- */
-public interface Check {
-
-    /**
-     * Method runs the configured checks. Usually checks which have to be run
-     * only time should be used here.
-     */
-    void run();
-
-    /**
-     * Method runs the configured checks against the given node.
-     * 
-     * @param node
-     *            is the node of the xml to be checked.
-     */
-    void run(Element node);
-
-    /**
-     * Method runs the configured checks against the given ant file.
-     * 
-     * @param fileName
-     *            is the name of the ant file.
-     */
-    void run(String fileName);
-
-    /**
-     * Set the {@link Checker} configured for this check.
-     * 
-     * @param checker
-     *            is the {@link Checker} to set.
-     */
-    void setChecker(Checker checker);
-
-    /**
-     * Set the ant file to hold information about the checks conducted on the
-     * file.
-     * 
-     * @param antFile
-     *            is the {@link AntFile} to set.
-     */
-    void setAntFile(AntFile antFile);
-
-    /**
-     * Return whether this is check is enabled or not.
-     * 
-     * @return true if a checker is available for this check; otherwise false.
-     */
-    boolean isEnabled();
-
-    /**
-     * Log the given message.
-     * 
-     * @param message is the message to be logged.
-     */
-    void log(String message);
-
-    /**
-     * Return the {@link Checker} configured for this {@link Check}.
-     * 
-     * @return the {@link Checker}.
-     */
-    Checker getChecker();
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckAntCall.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckAntCall</code> is used to check whether antcall is used with no param
- * elements and calls the target with no dependencies
- *
- */
-public class CheckAntCall extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkAntCalls(node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkAntCalls(Element node) {
-        if (node.elements("antcall") != null) {
-            List<Element> antcallList = node.elements("antcall");
-            for (Element antcallElement : antcallList) {
-                String antcallName = antcallElement.attributeValue("target");
-                if (((node.elements("param") == null) || (node
-                        .elements("param") != null && node.elements("param")
-                        .isEmpty()))
-                        && !checkTargetDependency(antcallName)) {
-                    log("<antcall> is used with no param elements and calls the target "
-                            + antcallName
-                            + " that has no dependencies! (<runtarget> could be used instead.)");
-                }
-            }
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckDescription.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckDescription</code> is used to check whether project description is
- * present or not.
- * 
- */
-public class CheckDescription extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("project")
-                && node.element("description") == null) {
-            log("Description not specified!");
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckDuplicateNames.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-
-/**
- * <code>CheckDuplicateNames</code> is used to check for duplicate macro names.
- *
- */
-public class CheckDuplicateNames extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public void run() {
-
-        Hashtable<String, Class<Object>> taskdefs = getProject()
-                .getTaskDefinitions();
-        ArrayList<String> macros = new ArrayList<String>(taskdefs.keySet());
-        for (String macroName : macros) {
-            if (macros.contains(macroName + "Macro")
-                    || macros.contains(macroName + "macro"))
-                log(macroName + " and " + macroName + "Macro"
-                        + " found duplicate name");
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckFileName.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.io.File;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * <code>CheckFileName</code> is used to check the naming convention of the ant files.
- *
- */
-public class CheckFileName extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(String arg) {
-        if (arg != null) {
-            boolean found = false;
-            Pattern p1 = Pattern.compile(getPattern());
-            Matcher m1 = p1.matcher(new File(arg).getName());
-            while (m1.find()) {
-                found = true;
-            }
-            if (!found) {
-                log("INVALID File Name: " + arg);
-            }
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckIndentation.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.io.File;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXException;
-import java.io.IOException;
-
-import com.nokia.helium.antlint.AntLintHandler;
-
-/**
- * <code>CheckIndentation</code> is used to check the indentations in the ant files.
- *
- */
-public class CheckIndentation extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(String antFileName) {
-        try {
-            SAXParserFactory saxFactory = SAXParserFactory.newInstance();
-            saxFactory.setNamespaceAware(true);
-            saxFactory.setValidating(true);
-            SAXParser parser = saxFactory.newSAXParser();
-            AntLintHandler handler = new AntLintHandler(this);
-            handler.setIndentationCheck(true);
-            parser.parse(new File(antFileName), handler);
-        } catch (ParserConfigurationException e) {
-            throw new RuntimeException(e);
-        } catch (SAXException e) {
-            throw new RuntimeException(e);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckJepJythonScript.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckJepJythonScript</code> is used to check the coding convention in Jep and
- * Jython scripts
- *
- */
-public class CheckJepJythonScript extends AbstractScriptCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkScripts(node);
-        }
-
-        if (node.getName().equals("scriptdef")) {
-            String scriptdefname = node.attributeValue("name");
-            String language = node.attributeValue("language");
-            if (language.equals("jep") || language.equals("jython")) {
-                writeJepFile(scriptdefname, node.getText());
-            }
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkScripts(Element node) {
-        String target = node.attributeValue("name");
-        List<Element> scriptList = node.selectNodes("//target[@name='" + target
-                + "']/descendant::script");
-        for (Element scriptElement : scriptList) {
-            String language = scriptElement.attributeValue("language");
-            if (language.equals("jep") || language.equals("jython")) {
-                writeJepFile("target_" + target, scriptElement.getText());
-            }
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPresetDefMacroDefName.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckPresetDefMacroDefName</code> is used to check the naming
- * convention of presetdef and macrodef
- * 
- */
-public class CheckPresetDefMacroDefName extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public void run(Element node) {
-        if (node.getName().equals("presetdef")
-                || node.getName().equals("macrodef")) {
-            String text = node.attributeValue("name");
-            if (text != null && !text.isEmpty()) {
-                checkDefName(text);
-            }
-
-            List<Element> attributeList = node.elements("attribute");
-            for (Element attributeElement : attributeList) {
-                String attributeName = attributeElement.attributeValue("name");
-                checkDefName(attributeName);
-            }
-        }
-    }
-
-    /**
-     * Check the given text.
-     * 
-     * @param text
-     *            is the text to check.
-     */
-    private void checkDefName(String text) {
-        Pattern p1 = Pattern.compile(getPattern());
-        Matcher m1 = p1.matcher(text);
-        if (!m1.matches()) {
-            log("INVALID PRESETDEF/MACRODEF Name: " + text);
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckProjectName.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckProjectName</code> is used to check the naming convention of
- * project names.
- * 
- */
-public class CheckProjectName extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("project")) {
-            String text = node.attributeValue("name");
-            if (text != null && !text.isEmpty()) {
-                checkProjectName(text);
-            } else {
-                log("Project name not specified!");
-            }
-
-        }
-    }
-
-    /**
-     * Check the given the project name.
-     * 
-     * @param text is the text to check.
-     */
-    private void checkProjectName(String text) {
-        Pattern p1 = Pattern.compile(getPattern());
-        Matcher m1 = p1.matcher(text);
-        if (!m1.matches()) {
-            log("INVALID Project Name: " + text);
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPropertiesInDataModel.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckPropertiesInDataModel</code> is used to check whether the properties are
- * defined in data model
- *
- */
-public class CheckPropertiesInDataModel extends AbstractScriptCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkInScripts(node);
-            checkInScriptConditions(node);
-            checkInPythonTasks(node);
-        }
-        
-        if (node.getName().equals("scriptdef")) {
-            String language = node.attributeValue("language");
-
-            if (language.equals("jep") || language.equals("jython")) {
-                checkJepPropertiesInText(node.getText());
-            }
-        }
-    }
-
-    /**
-     * Check the properties defined inside script condition.
-     *  
-     * @param node is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkInScriptConditions(Element node) {
-        String target = node.attributeValue("name");
-        List<Element> scriptList = node.selectNodes("//target[@name='" + target
-                + "']/descendant::scriptcondition");
-        for (Element scriptElement : scriptList) {
-            String language = scriptElement.attributeValue("language");
-            if (language.equals("jep") || language.equals("jython")) {
-                checkJepPropertiesInText(scriptElement.getText());
-            }
-        }
-    }
-
-    /**
-     * Check the properties defined inside scripts.
-     *  
-     * @param node is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkInScripts(Element node) {
-        String target = node.attributeValue("name");
-        List<Element> scriptList = node.selectNodes("//target[@name='" + target
-                + "']/descendant::script");
-        for (Element scriptElement : scriptList) {
-            String language = scriptElement.attributeValue("language");
-            if (language.equals("jep") || language.equals("jython")) {
-                checkJepPropertiesInText(scriptElement.getText());
-            }
-        }
-    }
-    
-    /**
-     * Check the properties defined inside python tasks.
-     *  
-     * @param node is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkInPythonTasks(Element node) {
-        String target = node.attributeValue("name");
-        List<Element> pythonList = node.selectNodes("//target[@name='" + target
-                + "']/descendant::*[name()=\"hlm:python\"]");
-        for (Element pythonElement : pythonList) {
-            checkPropertiesInText(pythonElement.getText());
-        }
-    }
-
-    /**
-     * Check for the properties in the given text.
-     * 
-     * @param text is the text to lookup.
-     */
-    private void checkPropertiesInText(String text) {
-        Pattern p1 = Pattern.compile("r[\"']\\$\\{([a-zA-Z0-9\\.]*)\\}[\"']");
-        Matcher m1 = p1.matcher(text);
-        ArrayList<String> props = new ArrayList<String>();
-        while (m1.find()) {
-            props.add(m1.group(1));
-        }
-        for (String group : props)
-            checkPropertyInModel(group);
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPropertyName.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckPropertyName</code> is used to check the naming convention of
- * property names.
- * 
- */
-public class CheckPropertyName extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("property")) {
-            String text = node.attributeValue("name");
-            if (text != null && !text.isEmpty()) {
-                checkPropertyName(text);
-            }
-        }
-    }
-
-    /**
-     * Check the given property name.
-     * 
-     * @param propertyName is the property name to check.
-     */
-    private void checkPropertyName(String propertyName) {
-        Pattern p1 = Pattern.compile(getPattern());
-        Matcher m1 = p1.matcher(propertyName);
-        if (!m1.matches() && !isPropertyAlreadyVisited(propertyName)) {
-            log("INVALID Property Name: " + propertyName);
-            getAntFile().markPropertyAsVisited(propertyName);
-        }
-    }
-
-    /**
-     * Check whether the property is already visited or not.
-     * 
-     * @param propertyName is the property to be checked.
-     * @return true, if already been visited; otherwise false
-     */
-    private boolean isPropertyAlreadyVisited(String propertyName) {
-        return getAntFile().isPropertyVisited(propertyName);
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckPythonTasks.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintWriter;
-import java.util.List;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.dom4j.Element;
-
-/**
- * <code>CheckPythonTasks</code> is used to the check the coding convention of
- * python tasks.
- * 
- */
-public class CheckPythonTasks extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            String target = node.attributeValue("name");
-            List<Element> pythonList = node.selectNodes("//target[@name='"
-                    + target + "']/descendant::*[name()=\"hlm:python\"]");
-            int i = 0;
-            for (Element pythonElement : pythonList) {
-                writePythonFile(i + "_" + target, pythonElement.getText());
-                i++;
-            }
-        }
-    }
-
-    /**
-     * Writes the given text to a python file.
-     * 
-     * @param name
-     *            is the name of the file to be written.
-     * @param text
-     *            is the text to be written inside the file.
-     */
-    private void writePythonFile(String name, String text) {
-        try {
-            String heliumpath = new File(getProject().getProperty(
-                    "helium.build.dir")).getCanonicalPath();
-            new File(heliumpath + File.separator + "python").mkdirs();
-            File file = new File(heliumpath + File.separator + "python"
-                    + File.separator + "target" + name + ".py");
-            PrintWriter output = new PrintWriter(new FileOutputStream(file));
-            if (!text.equals("")) {
-                output.write("def abc():");
-                for (String t : text.split("\n"))
-                    output.write("    " + t + "\n");
-            }
-            output.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new BuildException("IOException:Not able to write python file " + name
-                    + ".py");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckRunTarget.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckRunTarget</code> is used to check whether runtarget calls a target
- * that has dependencies.
- * 
- */
-public class CheckRunTarget extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkRunTargets(node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkRunTargets(Element node) {
-        if (node.elements("runtarget") != null) {
-            List<Element> runTargetList = node.elements("runtarget");
-            for (Element runTargetElement : runTargetList) {
-                String runTargetName = runTargetElement
-                        .attributeValue("target");
-                if (checkTargetDependency(runTargetName)) {
-                    log("<runtarget> calls the target " + runTargetName
-                            + " that has dependencies!");
-                }
-            }
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptCondition.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckScriptCondition</code> is used to check the coding convention in
- * script condition
- * 
- */
-public class CheckScriptCondition extends AbstractScriptCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkScriptConditions(node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkScriptConditions(Element node) {
-        String target = node.attributeValue("name");
-        List<Element> scriptList = node.selectNodes("//target[@name='" + target
-                + "']/descendant::scriptcondition");
-        for (Element scriptElement : scriptList) {
-            String language = scriptElement.attributeValue("language");
-            if (language.equals("jep") || language.equals("jython")) {
-                writeJepFile("scriptcondition_" + target, scriptElement
-                        .getText());
-            }
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptDef.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.dom4j.Element;
-import org.dom4j.Node;
-
-/**
- * <code>CheckScriptDef</code> is used to check the coding convention in
- * scriptdef.
- * 
- */
-public class CheckScriptDef extends AbstractScriptCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("scriptdef")) {
-            String scriptdefname = node.attributeValue("name");
-            String language = node.attributeValue("language");
-
-            checkScriptDef(scriptdefname, node);
-
-            if (language.equals("beanshell")) {
-                writeBeanshellFile(scriptdefname, node.getText());
-            }
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    public void checkScriptDef(String name, Node node) {
-        List<Node> statements = node.selectNodes("//scriptdef[@name='" + name
-                + "']/attribute");
-        Pattern p1 = Pattern.compile("attributes.get\\([\"']([^\"']*)[\"']\\)");
-        Matcher m1 = p1.matcher(node.getText());
-        ArrayList<String> props = new ArrayList<String>();
-        while (m1.find()) {
-            props.add(m1.group(1));
-        }
-
-        if (!statements.isEmpty() && !props.isEmpty()) {
-            for (Node statement : statements) {
-                if (!props.contains(statement.valueOf("@name"))) {
-                    // for (String x : props)
-                    // log(x);
-                    log("Scriptdef " + name + " does not use "
-                            + statement.valueOf("@name"));
-                }
-            }
-        }
-    }
-
-    /**
-     * Write a bean shell file with the given text.
-     * 
-     * @param scriptdefname
-     *            is the name of the file to be written.
-     * @param text
-     *            is the text to be written inside the file.
-     */
-    private void writeBeanshellFile(String scriptdefname, String text) {
-        scriptdefname = "Beanshell" + scriptdefname;
-        try {
-            String heliumpath = new File(getProject().getProperty(
-                    "helium.build.dir")).getCanonicalPath();
-            new File(heliumpath + File.separator + "beanshell").mkdirs();
-            File file = new File(heliumpath + File.separator + "beanshell"
-                    + File.separator + scriptdefname + ".java");
-            PrintWriter output = new PrintWriter(new FileOutputStream(file));
-
-            for (String line : text.split("\n")) {
-                if (line.trim().startsWith("import"))
-                    output.write(line + "\n");
-            }
-
-            output.write("/**\n * x\n */\npublic final class " + scriptdefname
-                    + " {\n");
-            output.write("private " + scriptdefname + "() { }\n");
-            output.write("public static void main(String[] args) {\n");
-            for (String line : text.split("\n")) {
-                if (!line.trim().startsWith("import"))
-                    output.write(line + "\n");
-            }
-            output.write("} }");
-            output.close();
-        } catch (IOException e) {
-            throw new BuildException("Not able to write Beanshell File "
-                    + scriptdefname + ".java");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptDefNameAttributes.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-import org.dom4j.Node;
-
-/**
- * <code>CheckScriptDefNameAttributes</code> is used to check the naming
- * convention of scriptdef name attributes
- * 
- */
-public class CheckScriptDefNameAttributes extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("scriptdef")) {
-            String scriptdefname = node.attributeValue("name");
-            checkScriptDefNameAttributes(scriptdefname, node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    public void checkScriptDefNameAttributes(String name, Node node) {
-        List<Node> statements = node.selectNodes("//scriptdef[@name='" + name
-                + "']/attribute");
-        Pattern p1 = Pattern.compile("attributes.get\\([\"']([^\"']*)[\"']\\)");
-        Matcher m1 = p1.matcher(node.getText());
-        ArrayList<String> props = new ArrayList<String>();
-        while (m1.find()) {
-            props.add(m1.group(1));
-        }
-
-        ArrayList<String> attributes = new ArrayList<String>();
-        for (Node statement : statements) {
-            attributes.add(statement.valueOf("@name"));
-        }
-        for (String x : props) {
-            if (!attributes.contains(x)) {
-                log("Scriptdef " + name + " does not have attribute " + x);
-            }
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptDefStyle.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-import org.dom4j.Node;
-
-/**
- * <code>CheckScriptDefStyle</code> is used to check the coding style of
- * scriptdef.
- * 
- */
-public class CheckScriptDefStyle extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("scriptdef")) {
-            String scriptdefname = node.attributeValue("name");
-            checkScriptDefStyle(scriptdefname, node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    public void checkScriptDefStyle(String name, Node node) {
-        List<Node> statements = node.selectNodes("//scriptdef[@name='" + name
-                + "']/attribute");
-        Pattern p1 = Pattern.compile("attributes.get\\([\"']([^\"']*)[\"']\\)");
-        Matcher m1 = p1.matcher(node.getText());
-        ArrayList<String> props = new ArrayList<String>();
-        while (m1.find()) {
-            props.add(m1.group(1));
-        }
-
-        ArrayList<String> attributes = new ArrayList<String>();
-        for (Node statement : statements) {
-            attributes.add(statement.valueOf("@name"));
-        }
-
-        if (!statements.isEmpty() && props.isEmpty()) {
-            log("Scriptdef " + name
-                    + " doesn't reference attributes directly, poor style");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckScriptSize.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-
-import org.dom4j.Element;
-import org.dom4j.Node;
-
-/**
- * <code>CheckScriptSize</code> is used to check the size of script. By default,
- * the script should not contain more than 1000 characters.
- * 
- */
-public class CheckScriptSize extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkSizeOfScript(node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkSizeOfScript(Element node) {
-        String target = node.attributeValue("name");
-
-        List<Node> statements = node.selectNodes("//target[@name='" + target
-                + "']/script | //target[@name='" + target
-                + "']/*[name()=\"hlm:python\"]");
-
-        for (Node statement : statements) {
-            int size = statement.getText().length();
-            if (size > 1000) {
-                log("Target " + target + " has a script with " + size
-                        + " characters, code should be inside a python file");
-            }
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckTabCharacter.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.io.File;
-import java.util.List;
-import java.io.IOException;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXException;
-import org.dom4j.Element;
-import org.dom4j.Node;
-
-import com.nokia.helium.antlint.AntLintHandler;
-
-/**
- * <code>CheckTabCharacter</code> is used to check the tab characters inside the
- * ant files.
- * 
- */
-public class CheckTabCharacter extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        checkTabsInScript(node);
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkTabsInScript(Element node) {
-        if (node.getName().equals("target")) {
-            String target = node.attributeValue("name");
-
-            List<Node> statements = node.selectNodes("//target[@name='"
-                    + target + "']/script | //target[@name='" + target
-                    + "']/*[name()=\"hlm:python\"]");
-
-            for (Node statement : statements) {
-                if (statement.getText().contains("\t")) {
-                    log("Target " + target + " has a script with tabs");
-                }
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(String antFileName) {
-        try {
-            SAXParserFactory saxFactory = SAXParserFactory.newInstance();
-            saxFactory.setNamespaceAware(true);
-            saxFactory.setValidating(true);
-            SAXParser parser = saxFactory.newSAXParser();
-            AntLintHandler handler = new AntLintHandler(this);
-            handler.setTabCharacterCheck(true);
-            parser.parse(new File(antFileName), handler);
-        } catch (ParserConfigurationException e) {
-            throw new RuntimeException(e);
-        } catch (SAXException e) {
-            throw new RuntimeException(e);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckTargetName.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckTargetName</code> is used to check the naming convention of the
- * target names.
- * 
- */
-public class CheckTargetName extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            String target = node.attributeValue("name");
-            checkTargetName(target);
-        }
-    }
-
-    /**
-     * Check the given target name.
-     * 
-     * @param targetName
-     *            is the target name to check.
-     */
-    private void checkTargetName(String targetName) {
-        if (targetName != null && !targetName.isEmpty()) {
-            Pattern p1 = Pattern.compile(getPattern());
-            Matcher m1 = p1.matcher(targetName);
-            if (!m1.matches()) {
-                log("INVALID Target Name: " + targetName);
-            }
-        } else {
-            log("Target name not specified!");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckUseOfEqualsTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import org.dom4j.Element;
-
-/**
- * <code>CheckUseOfEqualsTask</code> is used to check the usage of equals task
- * as against istrue task.
- * 
- */
-public class CheckUseOfEqualsTask extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("equals")) {
-            String text = node.attributeValue("arg2");
-            if (text.equals("true") || text.equals("yes")) {
-                log(node.attributeValue("arg1")
-                        + " uses 'equals' should use 'istrue' task");
-            }
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/src/com/nokia/helium/antlint/checks/CheckUseOfIfInTargets.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * 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.antlint.checks;
-
-import java.util.List;
-
-import org.dom4j.Element;
-import org.dom4j.Node;
-
-/**
- * <code>CheckUseOfIfInTargets</code> is used to check the usage of if task as
- * against the condition task or &lt;target if|unless="property.name"&gt; inside
- * targets.
- * 
- */
-public class CheckUseOfIfInTargets extends AbstractCheck {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void run(Element node) {
-        if (node.getName().equals("target")) {
-            checkUseOfIf(node);
-        }
-    }
-
-    /**
-     * Check against the given node.
-     * 
-     * @param node
-     *            is the node to check.
-     */
-    @SuppressWarnings("unchecked")
-    private void checkUseOfIf(Element node) {
-        String target = node.attributeValue("name");
-        String targetxpath = "//target[@name='" + target + "']//if";
-
-        List<Node> statements2 = node.selectNodes(targetxpath);
-        for (Node statement : statements2) {
-            List<Node> conditiontest = statement.selectNodes("./then/property");
-            if (conditiontest != null && conditiontest.size() == 1) {
-                List<Node> conditiontest2 = statement
-                        .selectNodes("./else/property");
-                if (conditiontest2 != null && conditiontest2.size() == 1) {
-                    log("Target "
-                            + target
-                            + " poor use of if-else-property statement, use condition task");
-                } else if (statement.selectNodes("./else").size() == 0) {
-                    log("Target "
-                            + target
-                            + " poor use of if-then-property statement, use condition task");
-                }
-            }
-        }
-        List<Node> statements = node.selectNodes("//target[@name='" + target
-                + "']/*");
-        if (!(statements.size() > 1)) {
-            if (node.selectSingleNode(targetxpath + "/else") == null) {
-                if (node.selectSingleNode(targetxpath + "/isset") != null
-                        || node.selectSingleNode(targetxpath + "/not/isset") != null) {
-                    log("Target "
-                            + target
-                            + " poor use of if statement, use <target if|unless=\"prop\"");
-                }
-            }
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/antlint/tests/antunit/test_antlint.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/antunit/test_antlint.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -27,86 +27,307 @@
     
     <import file="${antlint.test.dir}/data/sample.ant.xml" />
 
+    <taskdef resource="com/nokia/helium/antlint/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+
     <property name="data.model.parsed" location="${antlint.test.dir}/data/datamodel.out"/>
     
     <!-- is called prior to the test -->
     <target name="setUp">
-        <echo>-------------------------------------------------------------------------------</echo>
-        <delete dir="../output" failonerror="false" />
+        <delete dir="${antlint.test.dir}/data/output" failonerror="false" />
+        <mkdir dir="${antlint.test.dir}/data/output" />
     </target>
 
     <!-- is called after the test, even if that caused an error -->
     <target name="tearDown">
-        <delete dir="../output" failonerror="false" />
-        <echo>-------------------------------------------------------------------------------</echo>
+        <delete dir="${antlint.test.dir}/data/output" failonerror="false" />
     </target>
 
+    <target name="test-check-tab-character">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="build.xml"/>
+            </fileset>
+            <hlm:checkTabCharacter severity="warning" enabled="true"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: 25: Tabs should not be used!" level="info"/>
+        <au:assertLogContains text="WARNING: 29: Tabs should not be used!" level="info"/>
+    </target>
     
-    <target name="test-antlint">
-        <au:expectfailure>
-            <runtarget target="antlint"/>    
-            <au:assertLogContains text="W: Description not specified!" level="info"/>
-            <au:assertLogContains text="W: Project name not specified!" level="info"/>
-            <au:assertLogContains text="W: INVALID File Name:" level="info"/>
-            <au:assertLogContains text="E: 234: Bad indentation!" level="info"/>
-            <au:assertLogContains text="E: 229: Tabs should not be used!" level="info"/>
-            <au:assertLogContains text="W: INVALID Project Name: Sample" level="info"/>
-            <au:assertLogContains text="W: INVALID Property Name: check-property-name" level="info"/>
-            <au:assertLogContains text="W: INVALID PRESETDEF/MACRODEF Name: check_PresetDef.Name" level="info"/>
-            <au:assertLogContains text="W: INVALID Target Name: Check_target.Name" level="info"/>
-            <au:assertLogContains text="runtarget> calls the target smile that has dependencies!" level="info"/>
-            <au:assertLogContains text="antcall> is used with no param elements and calls the target hello that has no dependencies!" level="info"/>
-            <au:assertLogContains text="W: Target check-script-size has a script with 1098 characters, code should be inside a python file" level="info"/>
-            <au:assertLogContains text="W: Target check-use-of-if-in-targets poor use of if statement, use " level="info"/>
-            <au:assertLogContains text="W: Target check-use-of-if-else-in-targets poor use of if-else-property statement, use condition task" level="info"/>
-            <au:assertLogContains text="W: Target check-use-of-if-then-in-targets poor use of if-then-property statement, use condition task" level="info"/>
-            <au:assertLogContains text="W: test.script.property not in data model" level="info"/>
-            <au:assertLogContains text="W: Target check-prop-in-scriptcondition poor use of if-else-property statement, use condition task" level="info"/>
-            <au:assertLogContains text="W: build.errors.total not in data model" level="info"/>
-            <au:assertLogContains text="W: s60.getenv.path not in data model" level="info"/>
-            <au:assertLogContains text="W: test.boolean1 uses 'equals' should use 'istrue' task" level="info"/>
-            <au:assertLogContains text="W: test.boolean2 uses 'equals' should use 'istrue' task" level="info"/>
-            <au:assertLogContains text="E: ${ found in target_check-jython-script" level="info"/>
-            <au:assertLogContains text="W: ${ found in scriptcondition_check-scriptcondition" level="info"/>
-            <au:assertLogContains text="W: Target check-scriptcondition poor use of if-else-property statement, use condition task" level="info"/>
-            <au:assertLogContains text="W: INVALID PRESETDEF/MACRODEF Name: foo_Macro" level="info"/>
-            <au:assertLogContains text="W: test.scriptdef.property not in data model" level="info"/>
-            <au:assertLogContains text="E: Scriptdef check-scriptdef does not use attr2" level="info"/>
-            <au:assertLogContains text="W: Scriptdef check-scriptdef-style doesn't reference attributes directly, poor style" level="info"/>
-            <au:assertLogContains text="E: ${ found in check-script" level="info"/>
-            <au:assertLogContains text="E: Scriptdef check-scriptdef-attributes does not have attribute target" level="info"/>
-        </au:expectfailure>
+    <target name="test-check-property-name">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkPropertyName severity="warning" enabled="true" regexp="([a-z0-9[\\d\\_\\.\\@\\{\\}\\$]]*)" />
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: INVALID Property Name: check-property-name" level="info"/>
+    </target>
+    
+    <target name="test-check-target-name">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkTargetName severity="warning" enabled="true" regexp="([a-z0-9[\\d\\-]]*)" />
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: INVALID Target Name: Check_target.Name" level="info"/>
+    </target>
+    
+    <target name="test-check-indentation">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkIndentation severity="warning" enabled="true"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: 248: Bad indentation" level="info"/>
+    </target>
+    
+   <target name="test-check-presetdef-macrodef-name">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.antlib.xml"/>
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkPresetDefMacroDefName enabled="true" severity="warning" regexp="([a-z0-9][a-zA-Z0-9]*)"/>       
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: INVALID PRESETDEF/MACRODEF Name: check_PresetDef.Name" level="info"/>
+        <au:assertLogContains text="WARNING: INVALID PRESETDEF/MACRODEF Name: foo_Macro" level="info"/>
+    </target>
+    
+    <target name="test-check-project-name">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+                <include name="invalid.build.xml"/>
+            </fileset>
+            <hlm:checkProjectName enabled="true" severity="warning" regexp="([a-z0-9[\\d\\.\\_\\-]]*)"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: INVALID Project Name: Sample" level="info"/>
+        <au:assertLogContains text="WARNING: Project name not specified!" level="info"/>
+    </target>
+    
+    <target name="test-check-description">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="build.xml"/>
+            </fileset>
+            <hlm:checkDescription enabled="true" severity="warning"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: Description not specified!" level="info"/>
     </target>
     
-    <target name="antlint">
+    <target name="test-check-runtarget">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkRunTarget enabled="true" severity="warning"/>
+        </hlm:antlint>
+        <au:assertLogContains text="runtarget> calls the target smile that has dependencies!" level="info"/>
+    </target>
+    
+    <target name="test-check-antcall">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkAntCall enabled="true" severity="warning"/>
+        </hlm:antlint>
+        <au:assertLogContains text="antcall> is used with no param elements and calls the target hello that has no dependencies!" level="info"/>
+    </target>
+    
+    <target name="test-check-script-size">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkScriptSize enabled="true" severity="warning"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: Target check-script-size has a script with 1098 characters, code should be inside a python file" level="info"/>
+    </target>
+    
+    <target name="test-check-use-of-if-in-targets">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkUseOfIfInTargets enabled="true" severity="warning"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: Target check-use-of-if-in-targets poor use of if statement, use " level="info"/>
+        <au:assertLogContains text="WARNING: Target check-use-of-if-else-in-targets poor use of if-else-property statement, use condition task" level="info"/>
+        <au:assertLogContains text="WARNING: Target check-use-of-if-then-in-targets poor use of if-then-property statement, use condition task" level="info"/>
+        <au:assertLogContains text="WARNING: Target check-prop-in-scriptcondition poor use of if-else-property statement, use condition task" level="info"/>
+        <au:assertLogContains text="WARNING: Target check-scriptcondition poor use of if-else-property statement, use condition task" level="info"/>
+    </target>
+    
+    <target name="test-check-jython-script">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+                <include name="sample.antlib.xml"/>
+            </fileset>
+            <hlm:checkJythonScript enabled="true" severity="warning" outputDir="${antlint.test.dir}/data/output"/>
+        </hlm:antlint>
+        <au:assertLogContains text="found in target_check-jython-script" level="info"/>
+        <au:assertLogContains text="found in check-script" level="info"/>
+    </target>
+    
+    <target name="test-check-use-of-equals-task">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+            </fileset>
+            <hlm:checkUseOfEqualsTask severity="warning" enabled="true"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: test.boolean1 uses 'equals' should use 'istrue' task" level="info"/>
+        <au:assertLogContains text="WARNING: test.boolean2 uses 'equals' should use 'istrue' task" level="info"/>
+    </target>
+    
+    <target name="test-check-script-condition">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.ant.xml"/>
+                <include name="sample.antlib.xml"/>
+            </fileset>
+            <hlm:checkScriptCondition enabled="true" severity="warning" outputDir="${antlint.test.dir}/data/output"/> 
+        </hlm:antlint>
+        <au:assertLogContains text="found in scriptcondition_check-scriptcondition" level="info"/>
+    </target>
+    
+    <target name="test-check-python-tasks">
         <hlm:antlint>
             <fileset id="antlint.files" dir="${antlint.test.dir}/data">
                 <include name="*.xml"/>
                 <include name="*.ant.xml"/>
-                <include name="*build.xml"/>
+                <include name="build.xml"/>
+                <include name="*.antlib.xml"/>
+            </fileset>
+            <hlm:checkPythonTasks severity="warning" enabled="true" outputDir="${antlint.test.dir}/data/output"/>
+        </hlm:antlint>
+        <au:assertFileExists file="${antlint.test.dir}/data/output/python/target0_check-prop-in-pythontask.py"/>
+        <au:assertFileExists file="${antlint.test.dir}/data/output/python/target0_check-script-size.py"/>
+    </target>
+    
+    <target name="test-check-scriptdef-name-attributes">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.antlib.xml"/>
+            </fileset>
+            <hlm:checkScriptDefNameAttributes severity="warning" enabled="true" />
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: Scriptdef check-scriptdef-attributes does not have attribute target" level="info"/>
+    </target>
+    
+    
+    <target name="test-check-scriptdef-style">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.antlib.xml"/>
+            </fileset>
+            <hlm:checkScriptDefStyle severity="warning" enabled="true" />
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: Scriptdef check-scriptdef-style doesn't reference attributes directly, poor style" level="info"/>
+    </target>
+    
+    <target name="test-check-scriptdef">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="sample.antlib.xml"/>
+            </fileset>
+            <hlm:checkScriptDef severity="warning" enabled="true" outputDir="${antlint.test.dir}/data/output"/>
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: Scriptdef check-scriptdef does not use attr2" level="info"/>
+        <au:assertLogContains text="WARNING: Scriptdef check-scriptdef-beanshell does not use attr2" level="info"/>
+    </target>
+    
+    <target name="test-check-duplicate-names">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="*.xml"/>
+                <include name="*.ant.xml"/>
+                <include name="build.xml"/>
                 <include name="*.antlib.xml"/>
             </fileset>
-            <hlm:checker name="CheckTabCharacter" severity="error" />
-            <hlm:checker name="CheckPropertyName" severity="warning">([a-z0-9[\\d\\_\\.\\@\\{\\}\\$]]*)</hlm:checker>
-            <hlm:checker name="CheckTargetName" severity="warning">([a-z0-9[\\d\\-]]*)</hlm:checker>
-            <hlm:checker name="CheckIndentation" severity="error"/>
-            <hlm:checker name="CheckPresetDefMacroDefName" severity="warning">([a-z0-9][a-zA-Z0-9]*)</hlm:checker>       
-            <hlm:checker name="CheckProjectName" severity="warning">([a-z0-9[\\d\\.\\_\\-]]*)</hlm:checker>
-            <hlm:checker name="CheckDescription" severity="warning"/>
-            <hlm:checker name="CheckFileName" severity="warning" >^build.xml$|ant.xml$|antlib.xml$</hlm:checker>
-            <hlm:checker name="CheckRunTarget" severity="warning"/>
-            <hlm:checker name="CheckAntCall" severity="warning"/>
-            <hlm:checker name="CheckScriptSize" severity="warning"/>
-            <hlm:checker name="CheckUseOfIfInTargets" severity="warning"/>
-            <hlm:checker name="CheckJepJythonScript" severity="error" />
-            <hlm:checker name="CheckPropertiesInDataModel" severity="warning"/>
-            <hlm:checker name="CheckScriptCondition" severity="warning"/>
-            <hlm:checker name="CheckPythonTasks" severity="warning"/>
-            <hlm:checker name="CheckUseOfEqualsTask" severity="warning"/>
-            <hlm:checker name="CheckScriptDefNameAttributes" severity="error"/>
-            <hlm:checker name="CheckScriptDefStyle" severity="warning"/>
-            <hlm:checker name="CheckScriptDef" severity="error"/>
-            <hlm:checker name="CheckDuplicateNames" severity="warning"/>
+            <hlm:checkDuplicateNames enabled="true" severity="warning"/>
         </hlm:antlint>
     </target>
+    
+    <target name="test-check-filename">
+        <hlm:antlint>
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="invalid.build.xml"/>
+            </fileset>
+            <hlm:checkFileName severity="warning" enabled="true" regexp="^build.xml$|ant.xml$|antlib.xml$" />
+        </hlm:antlint>
+        <au:assertLogContains text="WARNING: INVALID File Name:" level="info"/>
+    </target>
+    
+    <target name="test-antlint-failonerror-false">
+        <hlm:antlint failonerror="false">
+            <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                <include name="*.xml"/>
+                <include name="*.ant.xml"/>
+                <include name="build.xml"/>
+                <include name="*.antlib.xml"/>
+            </fileset>
+            <hlm:checkTabCharacter severity="error" enabled="true"/>
+            <hlm:checkProjectName enabled="true" severity="error" regexp="([a-z0-9[\\d\\.\\_\\-]]*)"/>
+            <hlm:checkScriptDefNameAttributes severity="error" enabled="true" />
+        </hlm:antlint>
+        <au:assertLogContains text="ERROR: Scriptdef check-scriptdef-attributes does not have attribute target" level="info"/>
+        <au:assertLogContains text="ERROR: Project name not specified!" level="info"/>
+    </target> 
+    
+    <target name="test-antlint-failonerror-true">
+        <au:expectfailure>
+            <hlm:antlint>
+                <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                    <include name="*.xml"/>
+                    <include name="*.ant.xml"/>
+                    <include name="build.xml"/>
+                    <include name="*.antlib.xml"/>
+                </fileset>
+                <hlm:checkTabCharacter severity="error" enabled="true"/>
+                <hlm:checkProjectName enabled="true" severity="error" regexp="([a-z0-9[\\d\\.\\_\\-]]*)"/>
+                <hlm:checkScriptDefNameAttributes severity="error" enabled="true" />
+            </hlm:antlint>
+        </au:expectfailure>
+        <au:assertLogContains text="ERROR: Scriptdef check-scriptdef-attributes does not have attribute target" level="info"/>
+        <au:assertLogContains text="ERROR: Project name not specified!" level="info"/>
+    </target>
+    
+    <target name="test-antlint-console-and-xml-reporting">
+        <au:expectfailure>
+            <hlm:antlint>
+                <fileset id="antlint.files" dir="${antlint.test.dir}/data">
+                    <include name="*.xml"/>
+                    <include name="*.ant.xml"/>
+                    <include name="build.xml"/>
+                    <include name="*.antlib.xml"/>
+                </fileset>
+                <hlm:checkTabCharacter severity="error" enabled="true"/>
+                <hlm:checkProjectName enabled="true" severity="error" regexp="([a-z0-9[\\d\\.\\_\\-]]*)"/>
+                <hlm:checkScriptDefNameAttributes severity="error" enabled="true" />
+                
+                <!-- reporters -->
+                <hlm:antlintCheckstyleReporter file="${antlint.test.dir}/data/output/report.xml" />
+                <hlm:antlintConsoleReporter />
+            </hlm:antlint>
+        </au:expectfailure>
+        <au:assertLogContains text="ERROR: Scriptdef check-scriptdef-attributes does not have attribute target" level="info"/>
+        <au:assertLogContains text="ERROR: Project name not specified!" level="info"/>
+        <au:assertFileExists file="${antlint.test.dir}/data/output/report.xml" />
+        <loadfile property="report.xml" srcfile="${antlint.test.dir}/data/output/report.xml" />
+        <echo>${report.xml}</echo>
+        <au:assertTrue>
+            <and>
+                <contains string="${report.xml}" substring="&lt;error" />
+                <contains string="${report.xml}" substring="Scriptdef check-scriptdef-attributes does not have attribute target" />
+                <contains string="${report.xml}" substring="Project name not specified!" />
+            </and>
+        </au:assertTrue>
+    </target>
+    
+    
 </project>
--- a/buildframework/helium/sf/java/antlint/tests/data/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/data/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,4 +22,8 @@
 -->
 <project name="sample.build">
 
+	<target name="test">
+		<echo> Test target </echo>
+	</target>
+		
 </project>
--- a/buildframework/helium/sf/java/antlint/tests/data/invalid.build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/data/invalid.build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -21,5 +21,8 @@
 ============================================================================
 -->
 <project name="">
+    <description>
+        Testing for invalid file name
+    </description>
 
 </project>
--- a/buildframework/helium/sf/java/antlint/tests/data/sample.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/data/sample.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -26,7 +26,15 @@
     </description>
     
     <taskdef resource="net/sf/antcontrib/antlib.xml"/>
-   
+    
+        
+    <macrodef name="pow" uri="http://www.nokia.com/helium">
+        <sequential>
+            <echo>pow</echo>
+        </sequential>
+    </macrodef>
+    
+    
     
     <property name="check-property-name" value="test"/>
     <property name="helium.build.dir" value="output"/>
@@ -35,6 +43,13 @@
         <echo>check PresetDef Name </echo>
     </presetdef>
     
+    <macrodef name="duplicateMacro" uri="http://www.nokia.com/helium">
+        <attribute name="parameter" default="default"/>
+        <sequential>
+            <echo>@{parameter}</echo>
+        </sequential>
+    </macrodef>
+    
     <target name="hello">
         <echo>Hello Checking Tab Character</echo>
     </target>
@@ -231,4 +246,6 @@
     <target name="check-indentation">
         <echo>checking indentation</echo>
      </target>
+     
+     
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/antlint/tests/data/sample.antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antlint/tests/data/sample.antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -31,11 +31,7 @@
         </sequential>
     </macrodef>
     
-    <macrodef name="pow" uri="http://www.nokia.com/helium">
-        <sequential>
-            <echo>pow</echo>
-        </sequential>
-    </macrodef>
+    
     
     <scriptdef  name="check-prop-in-scriptdef" language="jython">
 result = None
@@ -47,6 +43,12 @@
         <attribute name="attr0"/>
         <attribute name="attr2"/>
 target = str(attributes.get('attr0'))    
+    </scriptdef>
+    
+    <scriptdef name="check-scriptdef-beanshell" language="beanshell">
+        <attribute name="attr0"/>
+        <attribute name="attr2"/>
+target = str(attributes.get('attr0'))    
     </scriptdef>    
     
     <scriptdef name="check-scriptdef-style" language="jython" uri="http://www.nokia.com/helium">
@@ -67,4 +69,8 @@
     <scriptdef name="check-scriptdef-attributes" language="jython">
 target = str(attributes.get('target'))    
     </scriptdef>
+    
+    <scriptdef name="check-scriptdef-attributes" language="beanshell">
+target = str(attributes.get('target'))    
+    </scriptdef>
 </antlib>
--- a/buildframework/helium/sf/java/antunit/src/com/nokia/helium/antunit/ant/types/CustomListener.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/antunit/src/com/nokia/helium/antunit/ant/types/CustomListener.java	Wed Jun 16 16:51:40 2010 +0300
@@ -110,9 +110,9 @@
     @Override
     public void startTest(String name) {
         listeners.clear();
-        for (Listener l : listenerDefinitions) {
-            BuildListener bl = l.instantiate();
-            l.setProject(currentProject);
+        for (Listener listener : listenerDefinitions) {
+            BuildListener bl = listener.instantiate();
+            listener.setProject(currentProject);
             if (bl != null) {
                 listeners.add(bl);
                 bl.buildStarted(new BuildEvent(currentProject));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="helium-ccmtask">
+    <description>Helium Antlib Legacy build file.</description>
+    
+    <import file="${builder.dir}/java/macros.ant.xml" />
+    
+</project>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+============================================================================ 
+Name        : ivy.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================  
+-->
+<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+    <info
+        organisation="com.nokia.helium"
+        module="helium-ccmtask"
+        status="integration"/>
+    <dependencies>
+        <dependency org="org.python" name="jython" rev="2.5" conf="default" />
+        <dependency org="com.nokia.helium" name="pythoncore" rev="latest.integration" conf="default" />
+    </dependencies>
+</ivy-module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : antlib.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<antlib>
+    <taskdef name="ccm" classname="com.nokia.helium.ccmtask.ant.taskdefs.CcmTask" />
+    <typedef name="session" classname="com.nokia.helium.ccmtask.ant.types.Session" /> 
+    <typedef name="sessionset" classname="com.nokia.helium.ccmtask.ant.types.SessionSet" /> 
+</antlib>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/AddTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* 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.ccmtask.ant.commands;
+
+import java.util.Vector;
+
+import com.nokia.helium.ccmtask.ant.types.Task;
+
+/**
+ * This object creates new ccm task and contains all the Tasks in a list.
+ *
+ */
+public class AddTask extends CcmCommand
+{
+    private String folder;
+    private Vector<Task> tasks = new Vector<Task>();
+
+    /**
+     * Get the dest folder.
+     * @return the dest folder, or null if not defined.
+     */
+    public String getFolder()
+    {
+        return folder;
+    }
+
+    /**
+     * Define the folder to add the task in.
+     * @param folder
+     */
+    public void setFolder(String folder)
+    {
+        this.folder = folder;
+    }
+    
+    /**
+     * Add a nested task element.
+     * @return a Task element
+     */
+    public Task createTask() {
+        Task task = new Task();
+        tasks.add(task);
+        return task;
+    }
+    
+    /**
+     * Get all nested tasks
+     * @return an array of nested tasks
+     */
+    public Task[] getTasks() {
+        return tasks.toArray(new Task[tasks.size()]);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/CcmCommand.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* 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.ccmtask.ant.commands;
+
+import com.nokia.helium.ccmtask.ant.taskdefs.CcmTask;
+
+/**
+ * Creates command string based on runtime class name.
+ *
+ */
+public class CcmCommand
+{
+    private CcmTask task;
+
+    /**
+     * @return the task
+     */
+    public CcmTask getTask()
+    {
+        return task;
+    }
+
+    /**
+     * @param task
+     *            the task to set
+     */
+    public void setTask(CcmTask task)
+    {
+        this.task = task;
+    }
+    
+    
+    public String getName()
+    {
+        String className = getClass().getName();
+        String commandName = className.substring(className.lastIndexOf('.') + 1).toLowerCase();
+        return commandName;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/ChangeReleaseTag.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object contains the current release tag.
+ *
+ */
+public class ChangeReleaseTag extends CcmCommand
+{
+    private String folder;
+    private String newreleasetag;
+    
+    /**
+     * Get the folder to scan.
+     * @return the folder, or null if not defined.
+     */
+    public String getFolder()
+    {
+        return folder;
+    }
+
+    /**
+     * Set the folder to update the task.
+     * @param folder
+     */
+    public void setFolder(String folder)
+    {
+        this.folder = folder;
+    }
+    
+    /**
+     * Get the release to re-tag the tasks with.
+     * @param newreleasetag
+     */
+    public String getReleaseTag()
+    {
+        return newreleasetag;
+    }
+
+    /**
+     * Set the release to re-tag the tasks with.
+     * @param newreleasetag
+     */
+    public void setReleasetag(String newreleasetag)
+    {
+        this.newreleasetag = newreleasetag;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Checkout.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object is used to check out a ccm project.
+ *
+ */
+public class Checkout extends CcmCommand
+{
+    private String project;
+    private String release;
+    private String version;
+    private String purpose;
+    private String wa;
+    private boolean recursive;
+    private boolean relative;
+
+    /**
+     * Get the project to checkout.
+     * @return
+     */
+    public String getProject()
+    {
+        return project;
+    }
+
+    /**
+     * Set the project to checkout.
+     * @return the project four part name
+     */
+    public void setProject(String project)
+    {
+        this.project = project;
+    }
+    
+    /**
+     * Get the release to use for the checkout.
+     * @return
+     */
+    public String getRelease()
+    {
+        return release;
+    }
+
+    /**
+     * Set the release to use for the checkout.
+     * @return the release
+     */
+    public void setRelease(String release)
+    {
+        this.release = release;
+    }
+    
+    /**
+     * Get the version to set while checking out.
+     * @return
+     */
+    public String getVersion()
+    {
+        return version;
+    }
+
+    /**
+     * Set the version
+     * @param version
+     */
+    public void setVersion(String version)
+    {
+        this.version = version;
+    }
+
+    /**
+     * Get the purpose of the checkout
+     */
+    public String getPurpose()
+    {
+        return purpose;
+    }
+
+    /**
+     * Set the purpose of the checkout
+     * @param purpose
+     */
+    public void setPurpose(String purpose)
+    {
+        this.purpose = purpose;
+    }
+
+    /**
+     * Get the workarea location
+     * @return
+     */
+    public String getWa()
+    {
+        return wa;
+    }
+
+    /**
+     * Set the workarea location
+     * @param wa
+     */
+    public void setWa(String wa)
+    {
+        this.wa = wa;
+    }
+
+    /**
+     * Shall it be a recursive checkout
+     * @return
+     */
+    public boolean getRecursive()
+    {
+        return recursive;
+    }
+
+    /**
+     * Set if the checkout should be a recursive.
+     * @param recursive
+     */
+    public void setRecursive(boolean recursive)
+    {
+        this.recursive = recursive;
+    }
+
+    /**
+     * Shall subprojects workarea be maintained relatively to the parent.
+     * @return
+     */
+    public boolean getRelative()
+    {
+        return relative;
+    }
+
+    /**
+     * Set if the subprojects workarea be maintained relatively to the parent.
+     * @param relative
+     */
+    public void setRelative(boolean relative)
+    {
+        this.relative = relative;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Close.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* 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.ccmtask.ant.commands;
+/**
+ * To close the ccm session
+ *
+ */
+public class Close extends CcmCommand
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/CreateReleaseTag.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object stores the new releast tag creation information.
+ *
+ */
+public class CreateReleaseTag extends CcmCommand
+{
+    private String newtag;
+    
+    private String release;
+    
+    private String project;
+    
+    public String getProject()
+    {
+        return project;
+    }
+    
+    /*
+     * Helper function to set the project information for creating the new release.
+     * @param prj - project info to be set for creating a new release tag.
+     */
+    public void setProject(String prj) {
+        project = prj;
+    }
+
+    /*
+     * Helper function to get the release information for creating the new release tag.
+     * @return  - release info to be used to create the new release tag.
+     */
+    public String getRelease()
+    {
+        return release;
+    }
+
+    /*
+     * Helper function to set the release information for creating the new release tag.
+     * @param rel  - release info to be used to create the new release tag.
+     */
+    public void setRelease(String rel)
+    {
+        release = rel;
+    }
+
+    /**
+     * Get the release tag to be created.
+     * @return newreleasetag to create it.
+     */
+    public String getNewTag()
+    {
+        return newtag;
+    }
+
+    /**
+     * Set the new release tag to be used. 
+     * @param newtag
+     */
+    public void setNewTag(String tag)
+    {
+        newtag = tag;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/DeleteReleaseTag.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object contains info requred to delete the release tag.
+ *
+ */
+public class DeleteReleaseTag extends CcmCommand
+{
+    
+    private String newtag;
+    
+    private String release;
+    
+    private String purpose;
+    
+    private String project;
+
+    /*
+     * Helper function to get the project information for delete the new release tag.
+     * @return the project used for creating new release tag.
+     */
+    public String getProject()
+    {
+        return project;
+    }
+    
+    /*
+     * Helper function to set the project information for delete the new release tag.
+     * @param prj - project info to be set for deleting a new release tag.
+     */
+    public void setProject(String prj) {
+        project = prj;
+    }
+
+    /*
+     * Helper function to get the release information for delete the new release tag.
+     * @param prj - project info to be set for deleting a new release tag.
+     */
+    public String getRelease()
+    {
+        return release;
+    }
+
+    /*
+     * Helper function to set the release information for delete the new release tag.
+     * @param rel - project info to be set for deleting a new release tag.
+     */
+    public void setRelease(String rel)
+    {
+        release = rel;
+    }
+
+    /**
+     * Get the new release tag info.
+     * @return newtag
+     */
+    public String getNewTag()
+    {
+        return newtag;
+    }
+
+    /**
+     * Set the new release tag info.
+     * @param tag - newtag information to be used to create the new release tag. 
+     */
+    public void setNewTag(String tag)
+    {
+        newtag = tag;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Reconcile.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object is used to reconcile a ccm project.
+ *
+ */
+public class Reconcile extends CcmCommand
+{
+    private String project;
+
+    /**
+     * Get the project to reconcile.
+     * @return
+     */
+    public String getProject()
+    {
+        return project;
+    }
+
+    /**
+     * Set the project to reconcile.
+     * @param project
+     */
+    public void setProject(String project)
+    {
+        this.project = project;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Role.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object is used to switch synergy role.
+ *
+ */
+public class Role extends CcmCommand {
+    private String role;
+
+    /**
+     * Set the role to switch to.
+     * @param role
+     */
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    /**
+     * Get the role to switch to.
+     * @return
+     */
+    public String getRole() {
+        return role;
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Snapshot.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object is used to snap shot a ccm project.
+ *
+ */
+public class Snapshot extends CcmCommand
+{
+    private String project;
+    private String dir;
+    private boolean recursive;
+    private boolean fast;
+
+    /**
+     * Get the project to snapshot.
+     * @return
+     */
+    public String getProject()
+    {
+        return project;
+    }
+
+    /**
+     * Set the project to snapshot.
+     * @param project
+     */
+    public void setProject(String project)
+    {
+        this.project = project;
+    }
+    
+    /**
+     * Get the location where to snapshot
+     * @return
+     */
+    public String getDir()
+    {
+        return dir;
+    }
+
+    /**
+     * Set the location where to snapshot
+     * @param dir
+     */
+    public void setDir(String dir)
+    {
+        this.dir = dir;
+    }
+    
+    /**
+     * Shall  sub-projects be snapshotted?
+     * @return
+     */
+    public boolean getRecursive()
+    {
+        return recursive;
+    }
+
+    /**
+     * Set if sub-projects should be snapshotted.
+     * @return
+     */
+    public void setRecursive(boolean recursive)
+    {
+        this.recursive = recursive;
+    }
+    
+    /**
+     * Shall multi-threaded snapshot be used.?
+     * @return
+     */
+    public boolean getFast()
+    {
+        return fast;
+    }
+
+    /**
+     * Set if multi-threaded snapshot should be used.
+     * @param fast
+     */
+    public void setFast(boolean fast)
+    {
+        this.fast = fast;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Synchronize.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object is used to Synchronize a ccm project.
+ *
+ */
+public class Synchronize extends CcmCommand
+{
+    private String project;
+    private boolean recursive = true;
+    
+
+    /**
+     * Get the project to checkout.
+     * @return
+     */
+    public String getProject()
+    {
+        return project;
+    }
+
+    /**
+     * Set the project to checkout.
+     * @return the project four part name
+     */
+    public void setProject(String project)
+    {
+        this.project = project;
+    }
+    
+    /**
+     * Shall subprojects workarea be maintained relatively to the parent.
+     * @return
+     */
+    public boolean getRecursive()
+    {
+        return recursive;
+    }
+
+    /**
+     * Set if the checkout should be a recursive.
+     * @param recursive
+     */
+    public void setRecursive(boolean recursive)
+    {
+        this.recursive = recursive;
+    } 
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Update.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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.ccmtask.ant.commands;
+
+/**
+ * This object is used to update a ccm project.
+ *
+ */
+public class Update extends CcmCommand
+{
+    private String project;
+
+    /**
+     * Get the project to update
+     * @return
+     */
+    public String getProject()
+    {
+        return project;
+    }
+
+    /**
+     * De
+     * @param project
+     */
+    public void setProject(String project)
+    {
+        this.project = project;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/commands/Workarea.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,102 @@
+/*
+* 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.ccmtask.ant.commands;
+/**
+ * Creates interface to get\set workarea informations for a given project.
+ *
+ */
+public class Workarea extends CcmCommand
+{
+    private String project;
+    private String path;
+    private String pst;
+    private boolean maintain;
+    private boolean recursive;
+    private boolean relative;
+    private boolean wat;
+
+    public String getProject()
+    {
+        return project;
+    }
+
+    public void setProject(String project)
+    {
+        this.project = project;
+    }
+    
+    public boolean getMaintain()
+    {
+        return maintain;
+    }
+
+    public void setMaintain(boolean maintain)
+    {
+        this.maintain = maintain;
+    }
+    
+    public boolean getRecursive()
+    {
+        return recursive;
+    }
+
+    public void setRecursive(boolean recursive)
+    {
+        this.recursive = recursive;
+    }
+
+    public boolean getRelative()
+    {
+        return relative;
+    }
+
+    public void setRelative(boolean relative)
+    {
+        this.relative = relative;
+    }
+
+    public String getPath()
+    {
+        return path;
+    }
+
+    public void setPath(String path)
+    {
+        this.path = path;
+    }
+
+    public String getPst()
+    {
+        return pst;
+    }
+
+    public void setPst(String pst)
+    {
+        this.pst = pst;
+    }
+
+    public boolean getWat()
+    {
+        return wat;
+    }
+
+    public void setWat(boolean wat)
+    {
+        this.wat = wat;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/CcmTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,238 @@
+/*
+* 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.ccmtask.ant.taskdefs;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+import org.python.util.PythonInterpreter;
+
+import com.nokia.helium.ccmtask.ant.commands.AddTask;
+import com.nokia.helium.ccmtask.ant.commands.CcmCommand;
+import com.nokia.helium.ccmtask.ant.commands.ChangeReleaseTag;
+import com.nokia.helium.ccmtask.ant.commands.Checkout;
+import com.nokia.helium.ccmtask.ant.commands.Close;
+import com.nokia.helium.ccmtask.ant.commands.Reconcile;
+import com.nokia.helium.ccmtask.ant.commands.Role;
+import com.nokia.helium.ccmtask.ant.commands.Snapshot;
+import com.nokia.helium.ccmtask.ant.commands.Synchronize;
+import com.nokia.helium.ccmtask.ant.commands.Update;
+import com.nokia.helium.ccmtask.ant.commands.Workarea;
+import com.nokia.helium.ccmtask.ant.types.SessionSet;
+import com.nokia.helium.ccmtask.ant.commands.CreateReleaseTag;
+import com.nokia.helium.ccmtask.ant.commands.DeleteReleaseTag;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+/**
+ * Synergy task.
+ * <pre>
+ * &lt;hlm:createSessionMacro database="to1tobet" reference="test.session" /&gt;
+ * &lt;hlm:ccm verbose="false"&gt;
+ *     &lt;hlm:sessionset refid="test.session" /&gt;
+ *     &lt;hlm:addtask folder="tr1test1#2079"&gt;
+ *         &lt;task name="tr1test1#5310" /&gt;
+ *     &lt;/hlm:addtask&gt;
+ *     &lt;hlm:snapshot project="helium-to1tobet#helium_3.0:project:vc1s60p1#1" dir="c:\test" fast="true" recursive="true" /&gt;
+ *     &lt;hlm:synchronize project="helium-to1tobet#helium_3.0:project:vc1s60p1#1" recursive="true" /&gt;
+ *     &lt;hlm:close /&gt;
+ * &lt;/hlm:ccm&gt;
+ * </pre>
+ * @ant.task category="SCM"
+ */
+public class CcmTask extends Task
+{
+    private String username;
+
+    private String password;
+
+    private List<CcmCommand> commands = new ArrayList<CcmCommand>();
+    private Vector<SessionSet> sessionSets = new Vector<SessionSet>();
+    private boolean verbose;
+
+    public void setVerbose(boolean value) {
+        verbose = value;
+    }
+    
+    public boolean getVerbose() {
+        return verbose;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public final void setUsername(final String username)
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public final void setPassword(final String password)
+    {
+        this.password = password;
+    }
+
+    public CcmCommand[] getCommands()
+    {
+        return commands.toArray(new CcmCommand[commands.size()]);
+    }
+
+    public void addUpdate(Update a)
+    {
+        addCommand(a);
+    }
+    
+    public void addSynchronize(Synchronize a)
+    {
+        addCommand(a);
+    }
+    
+    public void addReconcile(Reconcile a)
+    {
+        addCommand(a);
+    }
+    
+    public void addSnapshot(Snapshot a)
+    {
+        addCommand(a);
+    }
+    
+    public void addChangeReleaseTag(ChangeReleaseTag a)
+    {
+        addCommand(a);
+    }
+
+    public void addCreateReleaseTag(CreateReleaseTag a)
+    {
+        addCommand(a);
+    }
+
+    public void addDeleteReleaseTag(DeleteReleaseTag a)
+    {
+        addCommand(a);
+    }
+
+    public void addCheckout(Checkout a)
+    {
+        addCommand(a);
+    }
+
+    public void addWorkarea(Workarea a)
+    {
+        addCommand(a);
+    }
+
+    public void addRole(Role a)
+    {
+        addCommand(a);
+    }
+
+    private void addCommand(CcmCommand cmd)
+    {
+        cmd.setTask(this);
+        commands.add(cmd);
+    }
+
+    public AddTask createAddTask()
+    {
+        AddTask cmd = new AddTask();
+        addCommand(cmd);
+        return cmd;
+    }
+
+    public Role createRole()
+    {
+        Role cmd = new Role();
+        addCommand(cmd);
+        return cmd;
+    }
+
+    public Close createClose()
+    {
+        Close cmd = new Close();
+        addCommand(cmd);
+        return cmd;
+    }
+
+    public SessionSet createSessionSet()
+    {
+        SessionSet sessionSet = new SessionSet();
+        sessionSets.add(sessionSet);
+        return sessionSet;
+    }
+    
+    public SessionSet[] getSessionSets() {
+        SessionSet[] result = new SessionSet[sessionSets.size()];
+        sessionSets.copyInto(result);
+        return result; 
+    }
+
+    public final void execute()
+    {
+        File jar = getJarFile();
+        if (jar == null) {
+            throw new BuildException("Could not find the jar file for class " + this.getClass().getCanonicalName());
+        }
+        try {
+            JarFile jarFile = new JarFile(jar);
+            String entryName = this.getClass().getPackage().getName().replace('.', '/') + "/ccmtask.py";
+            ZipEntry entry = jarFile.getEntry(entryName);
+            if (entry == null) {
+                throw new BuildException("CcmTask internal error: Could not find the following entry: " + entryName);
+            }
+            PythonInterpreter pi = new PythonInterpreter();
+            pi.set("java_ccmtask", this);
+            pi.set("project", getProject());
+            pi.execfile(jarFile.getInputStream(entry), "ccmtask.py");
+        } catch (IOException e) {
+            throw new BuildException(e.getMessage(), e);
+        }
+    }
+    
+    /**
+     * Returns the jar file name containing this class
+     * @return a File object or null if not found.
+     * @throws IMakerException
+     */
+    protected File getJarFile() {
+        URL url = this.getClass().getClassLoader().getResource(this.getClass().getName().replace('.', '/') + ".class");
+        if (url.getProtocol().equals("jar") && url.getPath().contains("!/")) {
+            String fileUrl = url.getPath().split("!/")[0];
+            try {
+                return new File(new URL(fileUrl).getPath());
+            } catch (MalformedURLException e) {
+                throw new BuildException("Error determining the jar file where "
+                        + this.getClass().getName() + " is located.", e);
+            }
+        }
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/taskdefs/ccmtask.py	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,260 @@
+#============================================================================ 
+#Name        : ccmtask.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 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:
+#===============================================================================
+""" Script to process Ant <ccm> task commands. """
+
+import ccm
+import ccm.extra
+import sys
+import logging
+import ant
+import string
+
+logging.basicConfig(level=logging.INFO)
+antlogger = ant.AntHandler(java_ccmtask)
+rlogger = logging.getLogger('')
+# replacing default handler by Ant one.
+if len(rlogger.handlers) > 0:
+    rlogger.removeHandler(rlogger.handlers[0])
+rlogger.addHandler(antlogger)
+logging.getLogger("ccm").setLevel(logging.INFO)
+logger = logging.getLogger("ccm.ant")
+session = None
+
+def execute_update(command):
+    java_ccmtask.log(str('Updating project: ' + command.getProject()))
+    project = session.create(command.getProject())
+    project.update()
+
+def execute_role(command):
+    if not command.getRole():
+        raise Exception("The 'role' attribute has not been defined.")
+    java_ccmtask.log(str('Updating role: ' + command.getRole()))
+    session.role = command.getRole()
+    
+def execute_synchronize(command):
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    java_ccmtask.log(str('Synchronizing project: ' + command.getProject()))
+    java_ccmtask.log(str("Recursive: %s" % command.getRecursive()))
+    project = session.create(command.getProject())
+    project.sync(command.getRecursive())    
+        
+def execute_reconcile(command):
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    java_ccmtask.log(str('Reconciling project: ' + command.getProject()))
+    project = session.create(command.getProject())
+    project.reconcile()
+
+def execute_snapshot(command):
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    if not command.getDir():
+        raise Exception("The 'dir' attribute has not been defined.")
+    java_ccmtask.log(str('Snapshot of project: ' + command.getProject() + ' to ' + command.getDir()))
+    project = session.create(command.getProject())
+    if command.getFast()== True:
+        ccm.extra.FastSnapshot(project, command.getDir())        
+    else:
+        project.snapshot(command.getDir(), command.getRecursive())
+
+def execute_changereleasetag(command):
+    if not command.getFolder():
+        raise Exception("The 'folder' attribute has not been defined.")
+    if not command.getReleaseTag():
+        raise Exception("The 'releaseTag' attribute has not been defined.")
+    java_ccmtask.log(str('Changing release tag for all tasks in the folder : ' + command.getFolder() + ' as ' + command.getReleaseTag()))
+    #Search all task from the folder    
+    folder = session.create("Folder " + str(command.getFolder()))
+    for task in folder.tasks:
+        if task.release != str(command.getReleaseTag()):
+            task.release = str(command.getReleaseTag())
+            
+def execute_checkout(command):
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    java_ccmtask.log(str('Checking out project: ' + command.getProject() + ' with release tag ' + command.getRelease()))
+    project = session.create(command.getProject())
+    if (command.getRelease()):
+        if command.getWa():
+            wa = command.getWa()
+        else:
+            wa = None
+        if command.getRecursive():
+            recursive = command.getRecursive()
+        else:
+            recursive = None
+        if command.getRelative():
+            relative = command.getRelative()
+        else:
+            relative = None
+        if command.getVersion():
+            version = command.getVersion()
+        else:
+            version = None
+        if command.getPurpose():
+            purpose = command.getPurpose()
+        else:
+            purpose = None
+        project.checkout(session.create(command.getRelease()), version, purpose, recursive)
+
+def execute_createreleasetag(command):
+    java_ccmtask.log(str('creating a release tag'))
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    project = session.create(command.getProject())
+    if (command.getNewTag()):
+        new_release_tag = command.getNewTag();
+        project.create_release_tag(command.getRelease(), new_release_tag)
+
+def execute_deletereleasetag(command):
+    java_ccmtask.log(str('deleting a release tag'))
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    project = session.create(command.getProject())
+    if (command.getNewTag()):
+        new_release_tag = command.getNewTag();
+        project.delete_release_tag(command.getRelease(), new_release_tag)
+
+def execute_workarea(command):
+    if not command.getProject():
+        raise Exception("The 'project' attribute has not been defined.")
+    java_ccmtask.log(str('Modifying work area for the project : ' + command.getProject()))
+    project = session.create(command.getProject())
+    if command.getMaintain():
+        maintain = command.getMaintain()
+    else:
+        maintain = None
+    if command.getRecursive():
+        recursive = command.getRecursive()
+    else:
+        recursive = None
+    if command.getRelative():
+        relative = command.getRelative()
+    else:
+        relative = None
+    if command.getPath():
+        path = command.getPath()
+    else:
+        path = None
+    if command.getPst():
+        pst = command.getPst()
+    else:
+        pst = None
+    if command.getWat():
+        wat = command.getWat()
+    else:
+        wat = None
+    project.work_area(maintain, recursive, relative, path, pst, wat)
+
+def execute_addtask(command):
+    if command.getFolder() != None:
+        tasks = []        
+        ccmfolder = session.create("Folder " + command.getFolder())
+        role = find_folder_information(command)
+        if role == "build_mgr":
+            java_ccmtask.log("Changing role to %s" % role)
+            session.role = "build_mgr"
+
+        folder = session.create("Folder %s" % str(command.getFolder()))
+        for task in folder.tasks:
+            folder.remove(task)
+        
+        java_ccmtask.log("Adding task to folder %s" % ccmfolder)
+        tasks.extend(map(lambda task: session.create("Task " + task.getName()), command.getTasks()))
+        for task in tasks:
+            ccmfolder.append(task)
+    
+def find_folder_information(command):
+    cmdline = "folder -sh i " + command.getFolder()    
+    result = session.execute(cmdline)
+    result_array = str(result).split('\r')
+    for ldata in result_array :        
+        if ldata.find('Writable By:') > 0:
+            wb,wd = ldata.split(':',1)
+            if wd.lstrip() == "Build Manager":
+                return "build_mgr"
+            else:
+                return "developer"
+
+def execute_exists(command):
+    fpn = None
+    if command.getObject() != None:
+        fpn = command.getObject()
+    elif command.getFolder() != None:
+		fpn = "Folder " + command.getFolder()
+    elif command.getTask() != None:
+		fpn = "Task " + command.getTask()
+
+    if fpn == None:
+        raise Exception("You need to define either a 'task'/'folder'/'object' attribute.")
+    ccmo = session.create(fpn)
+    if ccmo.exists():
+        java_ccmtask.log("'%s' exists." % ccmo)
+    else:
+        raise Exception("Could not find '%s'." % ccmo)
+
+def execute_close(command):
+    global session
+    java_ccmtask.log(str("Closing session %s." % session))
+    session.close_on_exit = True
+    session.close()
+    session = None
+    
+def referenceToObject(obj):
+    if obj.isReference() == 1:
+        ref = project.getReference(str(obj.getRefid().getRefId()))
+        if ref == None:
+            raise Exception("Could not find reference '%s'" % str(obj.getRefid().getRefId()))
+        return ref
+    else:
+        return obj        
+        
+sessionIds = [] 
+for session_set in java_ccmtask.getSessionSets():
+    sessionIds.extend(map(lambda session: session.getAddr(), referenceToObject(session_set).getSessions()))
+
+print "Session list: ", sessionIds
+if len(sessionIds) > 0:
+    sessionid = sessionIds.pop()
+    session = ccm.Session(username=None, engine=None, dbpath=None, ccm_addr=sessionid, close_on_exit=False)
+else:
+   username = java_ccmtask.getUsername()
+   password = java_ccmtask.getPassword()
+   session = ccm.open_session(username=username, password=password)
+
+if java_ccmtask.getVerbose() == 1:
+    logging.getLogger("ccm").setLevel(logging.DEBUG)
+
+#print dir(sys.modules['__main__'] )
+ccm_commands = java_ccmtask.getCommands()
+for command in ccm_commands:
+    print "Running command '%s'" % command.getName()
+    method_name = 'execute_' + command.getName()
+    method = sys.modules['__main__'].__dict__[method_name]
+    try:
+        method(command)
+    except Exception, e:
+        if java_ccmtask.getVerbose() == 1:
+            import traceback
+            logger.error(traceback.print_exc(file=sys.stdout))
+            if 'result' in e:
+                logger.error(e.result)
+        logger.error(e)
+        raise e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/Session.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* 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.ccmtask.ant.types;
+
+import org.apache.tools.ant.types.DataType;
+
+/**
+ * This class abstract a synergy session.
+ * It store the address to an already existing session.
+ * @ant.type name="session" category="SCM"
+ */
+public class Session extends DataType {
+    // store the ccm_addr value
+    private String addr;
+    
+    /**
+     * Sets the synergy address.
+     * @param addr string representing the ccm_addr
+     */
+    public void setAddr(String addr) {
+        this.addr = addr;
+    }
+    
+    /**
+     * Get the synergy address.
+     * @return string representing the ccm_addr
+     */
+    public String getAddr() {
+        return this.addr;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/SessionSet.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* 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.ccmtask.ant.types;
+
+import org.apache.tools.ant.types.DataType;
+import java.util.Vector;
+
+/**
+ * This class implement an Ant Datatype that represents a set of
+ * synergy sessions.
+ * @ant.type name="sessionset" category="SCM"
+ */
+public class SessionSet extends DataType {
+    private Vector<Session> sessions = new Vector<Session>();
+    
+    /**
+     * Create and register a Session object. 
+     * @return a Session object.
+     */
+    public Session createSession() {
+        Session session = new Session();
+        sessions.add(session);
+        return session;
+    }
+    
+    /**
+     * Returns an array of Session object.
+     * @returns an array of Session object
+     */
+    public Session[] getSessions() {
+        Session[] result = new Session[sessions.size()];
+        sessions.copyInto(result);
+        return result; 
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/Task.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* 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.ccmtask.ant.types;
+
+import org.apache.tools.ant.types.DataType;
+
+/**
+ * This class abstract a synergy session.
+ * It store the address to an already existing session. 
+ */
+public class Task extends DataType {
+    // store the ccm_addr value
+    private String name;
+    
+    /**
+     * Sets the synergy address.
+     * @param name string representing the ccm_addr
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+    
+    /**
+     * Get the synergy address.
+     * @return string representing the ccm_addr
+     */
+    public String getName() {
+        return name;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/src/com/nokia/helium/ccmtask/ant/types/TaskSet.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* 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.ccmtask.ant.types;
+
+import org.apache.tools.ant.types.DataType;
+import java.util.Vector;
+
+/**
+ * This class abstract a synergy session.
+ * It store the address to an already existing session. 
+ */
+public class TaskSet extends DataType {
+    // store the Task objects
+    private Vector<Task> tasks = new Vector<Task>();
+    
+    /**
+     * Create and register a Session object. 
+     * @return a Session object.
+     */
+    public Task createTask() {
+        Task task = new Task();
+        tasks.add(task);
+        return task;
+    }
+    
+    /**
+     * Returns an array of Session object.
+     * @returns an array of Session object
+     */
+    public Task[] getSessions() {
+        Task[] result = new Task[tasks.size()];
+        tasks.copyInto(result);
+        return result; 
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/antunit/test_ccmtask.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_ccmtask.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test_ccmtask" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+         Testing the ccm task
+    </description>
+    
+    <taskdef resource="com/nokia/helium/ccmtask/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    
+    <target name="setUp">
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <target name="tearDown">
+        <delete dir="${test.temp.dir}" />
+    </target>
+
+    <hlm:sessionset id="ccm.session">
+        <session addr="FAKESESSION:9999:192.168.0.1" />
+    </hlm:sessionset>
+
+    <!-- Verify that task don't fail if there is nothing to be achieved. -->
+    <target name="test-ccm-no-commands">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+        </hlm:ccm>
+    </target>
+
+    <!-- Simple test of role switching. -->
+    <target name="test-ccm-role">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <role role="developer" />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'role'" />
+        <au:assertLogContains text="Updating role: developer" />
+    </target>
+
+    <!-- Simple test of role switching. -->
+    <target name="test-ccm-close">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <close />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'close'" />
+        <au:assertLogContains text="Closing session FAKESESSION:9999:192.168.0.1" />
+    </target>
+
+    <!-- Simple test of role switching without role, the task must fail. -->
+    <target name="test-ccm-role-no-param">
+        <au:expectfailure message="The 'role' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <role />
+            </hlm:ccm>
+        </au:expectfailure>
+    </target>
+
+    <!-- Verify that workarea fails if project is missing. -->
+    <target name="test-ccm-workarea-no-attribs">
+        <au:expectfailure message="The 'project' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <workarea />
+            </hlm:ccm>
+        </au:expectfailure>
+    </target>
+
+    <!-- Verify that snapshot fails if project is missing. -->
+    <target name="test-ccm-snapshot-no-attribs">
+        <au:expectfailure message="The 'project' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <snapshot />
+            </hlm:ccm>
+        </au:expectfailure>
+    </target>
+
+    <!-- Verify that checkout fails if project is missing. -->
+    <target name="test-ccm-checkout-no-attribs">
+        <au:expectfailure message="The 'project' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <checkout />
+            </hlm:ccm>
+        </au:expectfailure>
+    </target>
+
+    <!-- Verify that reconcile fails if project is missing. -->
+    <target name="test-ccm-reconcile-no-attribs">
+        <au:expectfailure message="The 'project' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <reconcile />
+            </hlm:ccm>
+        </au:expectfailure>
+        <au:assertLogContains text="Running command 'reconcile'" />
+    </target>
+
+    <!-- Verify that synchronize fails if project is missing. -->
+    <target name="test-ccm-synchronize-no-attribs">
+        <au:expectfailure message="The 'project' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <synchronize />
+            </hlm:ccm>
+        </au:expectfailure>
+        <au:assertLogContains text="Running command 'synchronize'" />
+    </target>
+
+
+    <!-- Verify that simple project synchronize do not fail. -->
+    <target name="test-ccm-synchronize">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <synchronize project="projectname-version:project:instance#1" />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'synchronize'" />
+    </target>
+
+    <!-- Verify that simple project update do not fail. -->
+    <target name="test-ccm-update">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <update project="projectname-version:project:instance#1" />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'update'" />
+    </target>
+
+    <!-- Verify that simple project snapshot do not fail. -->
+    <target name="test-ccm-snapshot">
+        <au:expectfailure message="The 'dir' attribute has not been defined.">
+            <hlm:ccm verbose="false">
+                <hlm:sessionset refid="ccm.session" />
+                <snapshot project="projectname-version:project:instance#1" />
+            </hlm:ccm>
+        </au:expectfailure>
+        <au:assertLogContains text="Running command 'snapshot'" />
+    </target>
+
+
+    <!-- Verify that addtask does not fail the build if no parameter are given. -->
+    <target name="test-ccm-addtask">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <addtask />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'addtask'" />
+    </target>
+
+    <!-- Verify that addtask does not fail the build if only folder is given. -->
+    <target name="test-ccm-addtask-folder">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <addtask folder="database#1234" />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'addtask'" />
+        <au:assertLogContains text="Adding task to folder 1234-1:folder:database" />
+    </target>
+
+    <!-- Verify that addtask does not fail the build if only folder is given. -->
+    <target name="test-ccm-addtask-folder-tasks">
+        <hlm:ccm verbose="false">
+            <hlm:sessionset refid="ccm.session" />
+            <addtask folder="database#1234">
+                <task name="database#1" />
+                <task name="database#2" />
+            </addtask>
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'addtask'" />
+        <au:assertLogContains text="Adding task to folder 1234-1:folder:database" />
+    </target>
+
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/bld.sh	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# Copyright (c) 2009 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: 
+#
+
+if [ -f ~/.bashrc ] ; then
+    . ~/.bashrc
+fi
+
+# Adding custom mock up tools to the path
+export PATH=$(dirname $(readlink /proc/$$/fd/255))/ccm_mock:$PATH
+
+ant $*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/build.bat	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,35 @@
+@echo off
+
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: 
+rem
+
+setlocal
+if not defined JAVA_6_HOME (
+set TESTED_JAVA=C:\Apps\j2sdk_1.6.0_02
+) ELSE  set TESTED_JAVA=%JAVA_6_HOME%
+if exist %TESTED_JAVA% (set JAVA_HOME=%TESTED_JAVA%)
+
+REM Adding custom mock up tools to the path
+set PATH=%~dp0ccm_mock;%PATH%
+
+call ant %*
+if "%ERRORLEVEL%" neq "0" (goto error)
+endlocal
+goto :eof
+
+:error
+endlocal
+if "%OS%"=="Windows_NT" color 00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="helium-ccmtask" xmlns:au="antlib:org.apache.ant.antunit">
+    <description>Helium antlib legacy tests.</description>
+    
+    <import file="${builder.dir}/java/test-macros.ant.xml"/>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/ccm_mock/ccm	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+#
+# Copyright (c) 2009 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: 
+#
+
+if [ -f ~/.bashrc ] ; then
+    . ~/.bashrc
+fi
+
+unset PYTHONPATH
+python $(dirname $(readlink -f $0))/ccm_mock.py $*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/ccm_mock/ccm.bat	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,21 @@
+@echo off
+
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: 
+rem
+setlocal
+set PYTHONPATH=
+@python %~dp0ccm_mock.py %*
+endlocal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/ccmtask/tests/ccm_mock/ccm_mock.py	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,34 @@
+#============================================================================ 
+#Name        : ccmtask.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 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:
+#===============================================================================
+import sys
+
+if len(sys.argv) == 4 and sys.argv[1] == 'set' and sys.argv[2] == 'role':
+    sys.exit(0)
+elif len(sys.argv) == 2 and sys.argv[1] == 'status':
+    print """Sessions for user wbernard:
+
+Command Interface @ FAKESESSION:9999:192.168.0.1 (current session)
+Database: /path/to/db/database
+
+Current project could not be identified.
+"""
+elif len(sys.argv) == 6 and sys.argv[1] == 'folder':
+    print "Added 1 task to " + sys.argv[5]
+
+sys.exit(0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/demo/build.bat	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,27 @@
+@echo off
+
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: 
+rem
+
+setlocal
+if not defined JAVA_6_HOME (
+set TESTED_JAVA=C:\Apps\j2sdk_1.6.0_02
+) ELSE  set TESTED_JAVA=%JAVA_6_HOME%
+if exist %TESTED_JAVA% (set JAVA_HOME=%TESTED_JAVA%)
+set ANT_ARGS= -lib %CD%\..\..\..\..\external\antlibs2 -lib %HELIUM_HOME%\build\components\helium-core\bin\helium-core.jar
+ant %*
+endlocal
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/demo/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="helium-core-demo" xmlns:hlm="http://www.nokia.com/helium" xmlns:ac="antlib:net.sf.antcontrib">
+    <description>Helium java core demo.</description>
+
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    
+    <property name="current.dir" value="."/>
+    <target name="getfreedrive-subst">
+        <ac:for list="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" param="drive.variable">
+            <sequential>
+                <antcall target="getfreedrive-subst-1"/>
+            </sequential>
+        </ac:for>
+    </target>
+
+    <target name="getfreedrive-subst-1">
+        <ac:trycatch property="subst.exception">
+            <ac:try>
+                <hlm:getfreedrive property="drive.variable"/>
+            </ac:try>
+            <ac:catch>
+                <echo message="Error: ${subst.exception}" />
+                <fail/>
+            </ac:catch>
+        </ac:trycatch>
+        <echo>${drive.variable} is substituted</echo>
+        <exec osfamily="windows" executable="subst.exe" failonerror="true">
+            <arg value="${drive.variable}"/>
+            <arg value="${current.dir}"/>
+        </exec>
+    </target>
+
+    <target name="getfreedrive-unsubst">
+        <ac:for list="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" param="drive.letter">
+            <sequential>
+                <echo>Letters @{drive.letter} is unsubstituted</echo>
+                <exec osfamily="windows" executable="subst.exe" failonerror="false">
+                    <arg value="@{drive.letter}:"/>
+                    <arg value="/D"/>
+                </exec>
+            </sequential>
+        </ac:for>
+    </target>
+
+    <target name="getfreedrive-unsubst-1">
+        <exec osfamily="windows" executable="subst.exe" failonerror="false">
+            <arg value="${drive.letter}:"/>
+            <arg value="/D"/>
+        </exec>
+    </target>
+
+</project>
--- a/buildframework/helium/sf/java/core/ivy.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -33,6 +33,7 @@
     <dependency org="org.codehaus.plexus" name="plexus-utils" rev="1.5.6"  />
     <dependency org="javax.mail" name="mail" rev="1.4.1"  />
     <dependency org="org.apache.commons" name="commons-io" rev="1.4"  />
+    <dependency org="org.apache.commons" name="commons-lang" rev="2.4"  />
     <dependency org="net.sourceforge.fmpp" name="fmpp" rev="0.9.13"  />
     <dependency org="dom4j" name="dom4j" rev="latest.integration"  />
   </dependencies>
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/EmailDataSender.java	Wed Jun 16 16:51:40 2010 +0300
@@ -268,6 +268,9 @@
                 try {
                     InternetAddress fromAddress = getFromAddress(); 
                     message.setFrom(fromAddress);
+                } catch (HlmAntLibException e) {
+                    // We are Ignoring the errors as no need to fail the build.
+                    log.debug("Error retrieving current user email address: " + e.getMessage(), e);                    
                 } catch (javax.mail.internet.AddressException e) {
                     // We are Ignoring the errors as no need to fail the build.
                     log.debug("Error retrieving current user email address: " + e.getMessage(), e);
@@ -358,9 +361,11 @@
             NamingEnumeration<SearchResult> en = ctx.search("", "uid=" + username, controls);
             if (en.hasMore()) {
                 SearchResult sr = en.next();
-                String email = (String) sr.getAttributes().get("mail").get();
-                log.debug("getUserEmail:" + email);
-                return email;
+                if (sr.getAttributes().get("mail") != null) {
+                    String email = (String) sr.getAttributes().get("mail").get();
+                    log.debug("getUserEmail:" + email);
+                    return email;
+                }
             }
         } catch (javax.naming.NameNotFoundException ex) {
             throw new HlmAntLibException("Error finding user email for " + username );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/FileUtils.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * 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.core;
+
+import java.io.File;
+
+/**
+ * This tool class provides file or system functionalities:
+ *   - Find executable location
+ *
+ */
+public final class FileUtils {
+    
+    private FileUtils() {
+    }
+    
+    /**
+     * Find an executable based on given name from the PATH. PATHEXT will be used on windows plaform
+     * to search by extension.
+     * @param executableName the executable name
+     * @return the executable as a File, or null if not found.
+     */
+    public static File findExecutableOnPath(String executableName) {
+        String systemPath = System.getenv("PATH");
+        String[] pathDirs = systemPath.split(File.pathSeparator);
+        return findExecutableOnPath(executableName, pathDirs); 
+    }
+
+    /**
+     * Find an executable based on given name from the PATH. PATHEXT will be used on windows plaform
+     * to search by extension.
+     * @param executableName the executable name.
+     * @param pathDirs array of directory to look for
+     * @return the executable as a File, or null if not found.
+     */
+    public static File findExecutableOnPath(String executableName, String[] pathDirs) {
+        String[] extensions = {""};
+        
+        // Using PATHEXT to get the supported extensions on windows platform
+        if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
+            extensions = System.getenv("PATHEXT").split(File.pathSeparator);
+        }
+        
+        for (String extension : extensions) {
+            String checkName = executableName;
+            if (System.getProperty("os.name").toLowerCase().startsWith("win") && !executableName.toLowerCase().endsWith(extension.toLowerCase())) {
+                checkName = executableName + extension;
+            }
+
+            File file = new File(checkName);
+            if (file.isAbsolute()) {
+                if (file.isFile()) {
+                    return file;
+                }
+            }
+            for (String pathDir : pathDirs) {
+                file = new File(pathDir, checkName);
+                if (file.isFile()) {
+                    return file;
+                }
+            }
+        }
+        return null;
+    }
+
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/AntCall.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* 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.core.ant;
+
+import org.apache.tools.ant.taskdefs.Ant;
+import org.apache.tools.ant.taskdefs.CallTarget;
+
+/**
+ * This task extends current AntCall task by
+ * supporting any kind of Reference object.
+ * 
+ * @ant.task name="antcall" category="Core"
+ */
+public class AntCall extends CallTarget {
+
+    /**
+     * Add a Reference object.
+     * @param ref the reference object.
+     */
+    public void add(Ant.Reference ref) {
+        this.addReference(ref);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/MappedVariable.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* 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.core.ant;
+
+/**
+ * This interface describe the methods a Mapped 
+ * parameter must implement. 
+ */
+public interface MappedVariable extends Variable {
+
+    /**
+     * Get the name of the parameter.
+     * @return the parameter name
+     */
+    String getName();
+    
+    /**
+     * Get the value of the parameter 
+     * @return the value.
+     */
+    String getValue();
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/Variable.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,42 @@
+/*
+* 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.core.ant;
+
+/**
+ * This interface describe the methods a command line variable
+ * must implement.
+ */
+public interface Variable
+{
+    
+    /**
+     * Get the command line parameter. It uses '=' character as the default
+     * separator.
+     * @return the parameter as a command line string
+     */
+    String getParameter();
+
+    /**
+     * Get the command line parameter. Use custom parameter for joining
+     * the mapped parameters.
+     * @param separator mapped value separator
+     * @return the parameter as a command line string
+     */
+    String getParameter(String separator);
+
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/VariableIFImpl.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* 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.core.ant;
-
-import org.apache.tools.ant.types.DataType;
-import com.nokia.helium.core.ant.types.Variable;
-import java.util.Collection;
-
-/**
- * Interface to get the list of variables of type VariableSet
- */
-public class VariableIFImpl extends DataType 
-{
-
-    
-    /**
-     * Get the name of the variable.
-     * @return name.
-     */
-    public Collection<Variable> getVariables() {
-        //Implemented by sub class
-        return null;
-    }
-
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/VariableInterface.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* 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.core.ant;
-
-import com.nokia.helium.core.ant.types.Variable;
-import java.util.Collection;
-
-/**
- * Interface to get the list of variables of type VariableSet
- */
-public interface VariableInterface
-{
-
-    
-    /**
-     * Get the name of the variable.
-     * @return name.
-     */
-    Collection<Variable> getVariables();
-
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/VariableMap.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,35 @@
+/*
+* 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.core.ant;
+
+import java.util.Collection;
+
+/**
+ * This interface describe the method a Map of variable must
+ * implements.
+ */
+public interface VariableMap 
+{
+    
+    /**
+     * Get the name of the variable.
+     * @return name.
+     */
+    Collection<MappedVariable> getVariables();
+
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,17 +23,18 @@
 <antlib>
     <!-- Task definition -->
     <taskdef name="path2file" classname="com.nokia.helium.core.ant.taskdefs.SerializePathTask"/>
-    <taskdef name="countSeverity" classname="com.nokia.helium.core.ant.taskdefs.XMLLogCount"/>
-    <taskdef name="getVariableValue" classname="com.nokia.helium.core.ant.taskdefs.GetValueFromVariableSet"/>
+    <taskdef name="countSeverity" classname="com.nokia.helium.core.ant.taskdefs.XMLLogCountTask"/>
+    <taskdef name="getVariableValue" classname="com.nokia.helium.core.ant.taskdefs.GetValueFromVariableSetTask"/>
     <taskdef name="python" classname="com.nokia.helium.core.ant.taskdefs.PythonTask"/>
     <taskdef name="retry" classname="com.nokia.helium.core.ant.taskdefs.RetryTask"/>
+    <taskdef name="getfreedrive" classname="com.nokia.helium.core.ant.taskdefs.GetFreeDriveTask"/>
     
     <!-- Type definition -->
     <typedef name="hasSeverity" classname="com.nokia.helium.core.ant.conditions.XMLLogCondition"/>
-    <typedef name="ldapauthenticate" classname="com.nokia.helium.core.ant.taskdefs.ValidateUserLogin" />
-    <typedef name="ldap" classname="com.nokia.helium.core.ant.taskdefs.LDAP" />
+    <typedef name="ldapauthenticate" classname="com.nokia.helium.core.ant.taskdefs.ValidateUserLoginTask" />
+    <typedef name="ldap" classname="com.nokia.helium.core.ant.taskdefs.LDAPTask" />
     
-    <typedef name="arg" classname="com.nokia.helium.core.ant.types.Variable"/>
+    <typedef name="arg" classname="com.nokia.helium.core.ant.types.VariableImpl"/>
     <typedef name="argSet" classname="com.nokia.helium.core.ant.types.VariableSet"/>
     <typedef name="resourceSet" classname="com.nokia.helium.core.ant.types.ResourceSet"/>
 
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/listener/TargetTimesLogGeneratorListener.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/listener/TargetTimesLogGeneratorListener.java	Wed Jun 16 16:51:40 2010 +0300
@@ -92,8 +92,8 @@
                             targetTimesLogCsv, true);
                     timesLogOut = new DataOutputStream(timesLogFileStream);
                     // Display (sorted) hashtable.
-                    for (String s : targetTimesTable)
-                        timesLogOut.writeBytes(s + "\n");
+                    for (String targetTime : targetTimesTable)
+                        timesLogOut.writeBytes(targetTime + "\n");
                     timesLogOut.close();
                 }
             } catch (java.io.FileNotFoundException ex) {
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/AntCall.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* 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.core.ant.taskdefs;
-
-import org.apache.tools.ant.taskdefs.Ant;
-import org.apache.tools.ant.taskdefs.CallTarget;
-
-/**
- * This task extends current AntCall task by
- * supporting any kind of Reference object.
- * 
- * @ant.task name="antcall" category="Core"
- */
-public class AntCall extends CallTarget {
-
-    /**
-     * Add a Reference object.
-     * @param ref the reference object.
-     */
-    public void add(Ant.Reference ref) {
-        this.addReference(ref);
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetFreeDriveTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010-2011 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.core.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import java.io.File;
+import org.apache.tools.ant.taskdefs.condition.Os;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Returns Next Free Drive available to use
+ * 
+ * <pre>
+ * Usage: &lt;hlm:getfreedrive property="build.drive"/&gt;
+ * </pre>
+ * @ant.task name="getfreedrive" category="Core"
+ */
+public class GetFreeDriveTask extends Task {
+    // property to set with the available drive
+    private String property;
+
+    /**
+     * To find the free drives available to use
+     * 
+     * @return First free drive available
+     */
+    private String getNextFreeDrive() {
+        List<File> drives = new ArrayList<File>(Arrays.asList(File.listRoots()));
+        for (char i = 'Z'; i >= 'A'; i--) {
+            File file = new File(i + ":" + File.separator);
+            if (!drives.contains(file)) {
+                return i + ":";
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Name of the property to be set.
+     * 
+     * @param property
+     *            the property name
+     * @ant.required
+     */
+    public void setProperty(String property) {
+        this.property = property;
+    }
+
+    @Override
+    public void execute() {
+        if (property == null) {
+            throw new BuildException("'property' attribute is not defined");
+        }
+        if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
+            throw new BuildException("Task getfreedrive is supported only on windows");
+        }
+        String returnValue = getNextFreeDrive();
+        if (returnValue != null) {
+            getProject().setNewProperty(property, returnValue);
+        }
+        else {
+            throw new BuildException("No free drive available");
+        }
+            
+        
+    }
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetValueFromVariableSet.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-/*
-* 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.core.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import java.util.Vector;
-import java.util.Collection;
-import com.nokia.helium.core.ant.VariableIFImpl;
-import org.apache.tools.ant.Task;
-import com.nokia.helium.core.ant.types.Variable;
-
-
-/**
- * To retrive a variable value from a collection of variable set based on name, which contains property-value in pair.
- *  
- * <pre>
- * Example:
- * 
- * &lt;hlm:argSet id="test.variableSet"&gt;
- * &lt;variable name="v1" value="the_value_1"/&gt;
- *     &lt;variable name="v2" value="the_value_2"/&gt;
- *      &lt;variable name="v3" value="the_value_3"/&gt;
- * &lt;/hlm:argSet&gt;
- *       
- *  &lt;hlm:getVariableValue name="v3" property="v1.value"&gt;
- * &lt;hlm:argSet refid="test.variableSet"/&gt;
- * &lt;/hlm:getVariableValue&gt;
- * </pre>
- * @ant.task name="getVariableValue"
- */
-public class GetValueFromVariableSet extends Task {
-    private String name;
-    private String property;
-    private boolean failOnError = true;
-    
-   private Vector<VariableIFImpl> variableIntefaces = new Vector<VariableIFImpl>();
-    
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Helper function to set failonerror attribute for the task. 
-     * @param failStatus, if true will fail the build if no variable is found for 
-     * matching name.
-     */
-    public void setFailOnError(boolean failStatus) {
-        failOnError = failStatus;
-    }
-
-    /**
-     * Helper function to store the name of the property where the value to be stored
-     * @param property name of the property where the result to be stored
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-    /**
-     * Helper function to create the VariableIFImpl object. 
-     * @return created VariableIFImpl instance
-     */
-    public VariableIFImpl createVariableIFImpl() {
-        VariableIFImpl var = new VariableIFImpl();
-        add(var);
-        return var;
-    }
-
-    
-    /**
-     * Helper function to add the newly created variable set. Called by ant.
-     * @param vs variable set to be added.
-     */
-    public void add(VariableIFImpl vs) {
-        variableIntefaces.add(vs);
-    }
-
-    public VariableIFImpl getVariableInterface() {
-        if (variableIntefaces.isEmpty()) {
-            throw new BuildException("variable interface cannot be null");
-        }
-        if (variableIntefaces.size() > 1 ) {
-            throw new BuildException("maximum one variable interface can be set");
-        }
-        return variableIntefaces.elementAt(0);
-    }
-    
-
-    /**
-     * Task to get the name / value pair
-     * @return return the name / value pair for the variable set.
-     */
-    public void execute() {
-        if (name == null)
-            throw new BuildException("'name' attribute has not been defined.");
-        if (property == null)
-            throw new BuildException(
-                    "'property' attribute has not been defined.");
-        VariableIFImpl varInterface = getVariableInterface();
-        Collection<Variable> variables = varInterface.getVariables();
-        for (Variable var : variables) {
-            if (var.getName().equals(name)) {
-                getProject().setProperty(property, var.getValue());
-                return;
-            }
-        }
-        if (failOnError) {
-            throw new BuildException("Could not find '" + name + "' variable.");
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/GetValueFromVariableSetTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,126 @@
+/*
+* 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.core.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+import java.util.Vector;
+
+import com.nokia.helium.core.ant.MappedVariable;
+import com.nokia.helium.core.ant.VariableMap;
+import org.apache.tools.ant.Task;
+import com.nokia.helium.core.ant.types.VariableSet;
+
+
+/**
+ * To retrive a variable value from a collection of variable set based on name, which contains property-value in pair.
+ *  
+ * <pre>
+ * Example:
+ * 
+ * &lt;hlm:argSet id="test.variableSet"&gt;
+ * &lt;variable name="v1" value="the_value_1"/&gt;
+ *     &lt;variable name="v2" value="the_value_2"/&gt;
+ *      &lt;variable name="v3" value="the_value_3"/&gt;
+ * &lt;/hlm:argSet&gt;
+ *       
+ *  &lt;hlm:getVariableValue name="v3" property="v1.value"&gt;
+ * &lt;hlm:argSet refid="test.variableSet"/&gt;
+ * &lt;/hlm:getVariableValue&gt;
+ * </pre>
+ * @ant.task name="getVariableValue"
+ */
+public class GetValueFromVariableSetTask extends Task {
+    private String name;
+    private String property;
+    private boolean failOnError = true;
+    
+   private Vector<VariableMap> variableMaps = new Vector<VariableMap>();
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Helper function to set failonerror attribute for the task. 
+     * @param failStatus, if true will fail the build if no variable is found for 
+     * matching name.
+     */
+    public void setFailOnError(boolean failStatus) {
+        failOnError = failStatus;
+    }
+
+    /**
+     * Helper function to store the name of the property where the value to be stored
+     * @param property name of the property where the result to be stored
+     */
+    public void setProperty(String property) {
+        this.property = property;
+    }
+
+    /**
+     * Helper function to create the VariableIFImpl object. 
+     * @return created VariableIFImpl instance
+     */
+    public VariableSet createVariableIFImpl() {
+        VariableSet var = new VariableSet();
+        add(var);
+        return var;
+    }
+
+    
+    /**
+     * Helper function to add the newly created variable set. Called by ant.
+     * @param vs variable set to be added.
+     */
+    public void add(VariableMap vs) {
+        variableMaps.add(vs);
+    }
+
+    public VariableMap getVariableInterface() {
+        if (variableMaps.isEmpty()) {
+            throw new BuildException("variable interface cannot be null");
+        }
+        if (variableMaps.size() > 1 ) {
+            throw new BuildException("maximum one variable interface can be set");
+        }
+        return variableMaps.elementAt(0);
+    }
+    
+
+    /**
+     * Task to get the name / value pair
+     * @return return the name / value pair for the variable set.
+     */
+    public void execute() {
+        if (name == null)
+            throw new BuildException("'name' attribute has not been defined.");
+        if (property == null)
+            throw new BuildException(
+                    "'property' attribute has not been defined.");
+        VariableMap variableMap = getVariableInterface();
+        for (MappedVariable var : variableMap.getVariables()) {
+            if (var.getName().equals(name)) {
+                getProject().setProperty(property, var.getValue());
+                return;
+            }
+        }
+        if (failOnError) {
+            throw new BuildException("Could not find '" + name + "' variable.");
+        }
+    }
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/LDAP.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-/*
- * 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.core.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
-
-/**
- * Task is to search data from LDAP server.
- * 
- * <pre>
- * Usage: &lt;hlm:ldap url=&quot;${ldap.server.url}&quot; 
- *                  rootdn=&quot;${ldap.root.dn}&quot; 
- *                  filter=&quot;uid=${env.USERNAME}&quot; 
- *                  outputproperty=&quot;email.from&quot; 
- *                  key=&quot;mail&quot;/&gt;
- * </pre>
- * @ant.task name="ldap" category="Core" 
- */
-public class LDAP extends Task {
-    private String url;
-    private String rootdn;
-    private String filter;
-    private String key;
-    private String property;
-
-    /**
-     * Method executes current task.
-     */
-    public void execute() {
-        if (url == null)
-            throw new BuildException("'url' attribute is not defined");
-        if (rootdn == null)
-            throw new BuildException("'rootdn' attribute is not defined");
-        if (filter == null)
-            throw new BuildException("'filter' attribute is not defined");
-        if (property == null)
-            throw new BuildException("'property' attribute is not defined");
-        if (key == null)
-            throw new BuildException("'key' attribute is not defined");
-
-        // Set up environment for creating initial context
-        Hashtable<String, String> env = new Hashtable<String, String>();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, url + "/" + rootdn);
-
-        // Create initial context
-        try {
-            DirContext ctx = new InitialDirContext(env);
-            SearchControls controls = new SearchControls();
-            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-            NamingEnumeration<SearchResult> en = ctx.search("", filter,
-                    controls);
-            if (en.hasMore()) {
-                SearchResult sr = en.next();
-                getProject().setProperty(property,
-                        (String) sr.getAttributes().get(key).get());
-                return;
-            }
-        } catch (NamingException exc) {
-            throw new BuildException(exc.getMessage());
-        } 
-    }
-
-    /**
-     * Return the LDAP server URL.
-     * 
-     * @return the LDAP server URL.
-     */
-    public String getUrl() {
-        return url;
-    }
-
-    /**
-     * Set LDAP server URL.
-     * 
-     * @param url is the LDAP server URL to set.
-     * @ant.required
-     */
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    /**
-     * Return LDAP root distinguished name.
-     * 
-     * @return LDAP root distinguished name
-     */
-    public String getRootdn() {
-        return rootdn;
-    }
-
-    /**
-     * Set LDAP root distinguished name.
-     * 
-     * @param rootdn is the LDAP root distinguished name to set.
-     * @ant.required
-     */
-    public void setRootdn(String rootdn) {
-        this.rootdn = rootdn;
-    }
-
-    /**
-     * Return object name to search in the LDAP.
-     * 
-     * @return the object name to search in the LDAP
-     */
-    public String getFilter() {
-        return filter;
-    }
-
-    /**
-     * Set the object name to search in the LDAP.
-     * 
-     * @param filter is the object name to set.
-     * @ant.required
-     */
-    public void setFilter(String filter) {
-        this.filter = filter;
-    }
-
-    /**
-     * Return the output property to set.
-     * 
-     * @return is the output property to set.
-     */
-    public String getOutputProperty() {
-        return property;
-    }
-
-    /**
-     * Set the output property if the user found.
-     * 
-     * @param property is the property to be set.
-     * @ant.required
-     */
-    public void setOutputProperty(String property) {
-        this.property = property;
-    }
-
-    /**
-     * Return the key search element to search user information.
-     * 
-     * @return the key search element.
-     */
-    public String getKey() {
-        return key;
-    }
-
-    /**
-     * Set the key search element to search the user information.
-     * 
-     * @param key is the key search element to set.
-     * @ant.required
-     */
-    public void setKey(String key) {
-        this.key = key;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/LDAPTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,178 @@
+/*
+ * 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.core.ant.taskdefs;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import javax.naming.*;
+import javax.naming.directory.*;
+import java.util.Hashtable;
+
+/**
+ * Task is to search data from LDAP server.
+ * 
+ * <pre>
+ * Usage: &lt;hlm:ldap url=&quot;${ldap.server.url}&quot; 
+ *                  rootdn=&quot;${ldap.root.dn}&quot; 
+ *                  filter=&quot;uid=${env.USERNAME}&quot; 
+ *                  outputproperty=&quot;email.from&quot; 
+ *                  key=&quot;mail&quot;/&gt;
+ * </pre>
+ * @ant.task name="ldap" category="Core" 
+ */
+public class LDAPTask extends Task {
+    private String url;
+    private String rootdn;
+    private String filter;
+    private String key;
+    private String property;
+
+    /**
+     * Method executes current task.
+     */
+    public void execute() {
+        if (url == null)
+            throw new BuildException("'url' attribute is not defined");
+        if (rootdn == null)
+            throw new BuildException("'rootdn' attribute is not defined");
+        if (filter == null)
+            throw new BuildException("'filter' attribute is not defined");
+        if (property == null)
+            throw new BuildException("'property' attribute is not defined");
+        if (key == null)
+            throw new BuildException("'key' attribute is not defined");
+
+        // Set up environment for creating initial context
+        Hashtable<String, String> env = new Hashtable<String, String>();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, url + "/" + rootdn);
+
+        // Create initial context
+        try {
+            DirContext ctx = new InitialDirContext(env);
+            SearchControls controls = new SearchControls();
+            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+            NamingEnumeration<SearchResult> en = ctx.search("", filter,
+                    controls);
+            if (en.hasMore()) {
+                SearchResult sr = en.next();
+                getProject().setProperty(property,
+                        (String) sr.getAttributes().get(key).get());
+                return;
+            }
+        } catch (NamingException exc) {
+            throw new BuildException(exc.getMessage());
+        } 
+    }
+
+    /**
+     * Return the LDAP server URL.
+     * 
+     * @return the LDAP server URL.
+     */
+    public String getUrl() {
+        return url;
+    }
+
+    /**
+     * Set LDAP server URL.
+     * 
+     * @param url is the LDAP server URL to set.
+     * @ant.required
+     */
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    /**
+     * Return LDAP root distinguished name.
+     * 
+     * @return LDAP root distinguished name
+     */
+    public String getRootdn() {
+        return rootdn;
+    }
+
+    /**
+     * Set LDAP root distinguished name.
+     * 
+     * @param rootdn is the LDAP root distinguished name to set.
+     * @ant.required
+     */
+    public void setRootdn(String rootdn) {
+        this.rootdn = rootdn;
+    }
+
+    /**
+     * Return object name to search in the LDAP.
+     * 
+     * @return the object name to search in the LDAP
+     */
+    public String getFilter() {
+        return filter;
+    }
+
+    /**
+     * Set the object name to search in the LDAP.
+     * 
+     * @param filter is the object name to set.
+     * @ant.required
+     */
+    public void setFilter(String filter) {
+        this.filter = filter;
+    }
+
+    /**
+     * Return the output property to set.
+     * 
+     * @return is the output property to set.
+     */
+    public String getOutputProperty() {
+        return property;
+    }
+
+    /**
+     * Set the output property if the user found.
+     * 
+     * @param property is the property to be set.
+     * @ant.required
+     */
+    public void setOutputProperty(String property) {
+        this.property = property;
+    }
+
+    /**
+     * Return the key search element to search user information.
+     * 
+     * @return the key search element.
+     */
+    public String getKey() {
+        return key;
+    }
+
+    /**
+     * Set the key search element to search the user information.
+     * 
+     * @param key is the key search element to set.
+     * @ant.required
+     */
+    public void setKey(String key) {
+        this.key = key;
+    }
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/ValidateUserLogin.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/*
-* 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.core.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import java.util.Hashtable;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-
-/**
- * Task is to validate noe user with LDAP server.
- * <pre>
- * Usage: &lt;hlm:ldapauthenticate url="${email.ldap.server}" 
-                                rootdn="${email.ldap.rootdn}" 
-                                searchdn="${ldap.organization.unit.rootdn}, ${ldap.people.rootdn}" 
-                                filter="uid=${env.USERNAME}" 
-                                outputproperty="is.authentication.sucess" 
-                                key="employeeNumber"
-                                password="${noe.password}"/&gt;
-   </pre>
-   <pre>
- * Usage:   &lt;condition property="is.authentication.sucess" &gt;
-                &lt;hlm:ldapauthenticate url="${email.ldap.server}" 
-                                rootdn="${email.ldap.rootdn}" 
-                                searchdn="${ldap.organization.unit.rootdn}, ${ldap.people.rootdn}" 
-                                filter="uid=${env.USERNAME}" 
-                                key="employeeNumber"
-                                password="${noe.password}"/&gt;
-            &lt;condition/&gt;
-   </pre>
-   @ant.task name="ldapauthenticate" category="Core" 
- */
-public class ValidateUserLogin extends Task implements Condition
-{
-    private String url;
-    private String rootdn;
-    private String filter;
-    private String key;
-    private String property;
-    private String searchdn;
-    private String password;
-        
-    public void execute()
-    {
-        
-        if (property == null)
-            throw new BuildException("'property' attribute is not defined");
-        validateParameters(url, rootdn, filter, key, searchdn, password);
-        log("Authenticating the user...");
-        if (authenticateUser(url, searchUser(url, rootdn, filter, key, searchdn))) {
-            getProject().setProperty(property, "true");
-        }
-        else {
-            getProject().setProperty(property, "false");
-        }
-    }
-    
-    public boolean eval() {
-        
-        validateParameters(url, rootdn, filter, key, searchdn, password);
-        return authenticateUser(url, searchUser(url, rootdn, filter, key, searchdn)); 
-         
-    }
-    
-    public String searchUser(String url, String rootdn, String filter, String key, String searchdn) {
-        
-        String userSearchDN = null;
-        // Set up environment for creating initial context
-        Hashtable<String, String> env = new Hashtable<String, String>();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, url + "/" + rootdn);
-
-        // Create initial context
-        env.put(Context.SECURITY_AUTHENTICATION, "simple");
-        DirContext ctx = null;
-        NamingEnumeration results = null;
-        try {
-            ctx = new InitialDirContext(env);
-            SearchControls controls = new SearchControls();
-            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-            results = ctx.search("", filter, controls);
-            while (results.hasMore()) {
-                SearchResult searchResult = (SearchResult) results.next();
-                Attributes attributes = searchResult.getAttributes();
-                Attribute attr = attributes.get(key);
-                userSearchDN = key + "=" + (String) attr.get() + ", " + searchdn + ", " + rootdn;
-            }
-        } catch (NamingException e) {
-            e.printStackTrace(); 
-            throw new BuildException("LDAP Naming exception"); 
-        }
-        return userSearchDN;
-    }
-    
-    public void validateParameters(String url, String rootdn, String filter, String key, String searchdn, String password) {
-        
-        if (url == null)
-            throw new BuildException("'url' attribute is not defined");
-        if (rootdn == null)
-            throw new BuildException("'rootdn' attribute is not defined");
-        if (filter == null)
-            throw new BuildException("'filter' attribute is not defined");
-        if (key == null)
-            throw new BuildException("'key' attribute is not defined");
-        if (searchdn == null)
-            throw new BuildException("'searchdn' attribute is not defined");
-        if (password == null)
-            throw new BuildException("'password' attribute is not defined");
-    }
-    
-    public boolean authenticateUser(String ldapurl, String rooTdn) {
-    
-        Hashtable<String, String> env = new Hashtable<String, String>(11);
-        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, ldapurl);
-        env.put(Context.SECURITY_AUTHENTICATION, "simple");
-        env.put(Context.SECURITY_PRINCIPAL, rooTdn);
-        env.put(Context.SECURITY_CREDENTIALS, password);
-        try {
-            DirContext authContext = new InitialDirContext(env);
-            return true;
-        } catch (NamingException e) {
-            // We are Ignoring the errors as no need to fail the build.
-            log("Not able to validate the user. " + e.getMessage(), Project.MSG_DEBUG);
-            return false;  
-        }
-
-    }
-    public String getUrl() 
-    {
-        return url;
-    }
-    /**
-     * ldap URL
-     * @ant.required
-     */
-    public void setUrl(String url) 
-    {
-        this.url = url;
-    }
-    
-
-    public String getRootdn() 
-    {
-        return rootdn;
-    }
-    /**
-     * user password to authenticate
-     * @ant.required
-     */
-    public void setpassword(String password) 
-    {
-        this.password = password;
-    }
-    
-    public String getpassword() 
-    {
-        return password;
-    }
-    /**
-     * ldap root distinguished name to search user.
-     * @ant.required
-     */
-    public void setRootdn(String rootdn) 
-    {
-        this.rootdn = rootdn;
-    }
-    
-    public String getsearchdn() 
-    {
-        return searchdn;
-    }
-    /**
-     * ldap distinguished name to search user
-     * @ant.required
-     */
-    public void setsearchdn(String searchdn) 
-    {
-        this.searchdn = searchdn;
-    }
-
-    public String getFilter() 
-    {
-        return filter;
-    }
-    /**
-     * object name to search in the ldap.
-     * @ant.required
-     */
-    public void setFilter(String filter) 
-    {
-        this.filter = filter;
-    }
-
-    public String getOutputProperty() 
-    {
-        return property;
-    }
-    /**
-     * output property to set if the user found.
-     * @ant.required
-     */
-    public void setOutputProperty(String property) 
-    {
-        this.property = property;
-    }
-
-    public String getKey() 
-    {
-        return key;
-    }
-    /**
-     * key to search the user information
-     * @ant.required
-     */
-    public void setKey(String key) 
-    {
-        this.key = key;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/ValidateUserLoginTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,239 @@
+/*
+* 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.core.ant.taskdefs;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import javax.naming.*;
+import javax.naming.directory.*;
+import java.util.Hashtable;
+import org.apache.tools.ant.taskdefs.condition.Condition;
+
+/**
+ * Task is to validate noe user with LDAP server.
+ * <pre>
+ * Usage: &lt;hlm:ldapauthenticate url="${email.ldap.server}" 
+                                rootdn="${email.ldap.rootdn}" 
+                                searchdn="${ldap.organization.unit.rootdn}, ${ldap.people.rootdn}" 
+                                filter="uid=${env.USERNAME}" 
+                                outputproperty="is.authentication.sucess" 
+                                key="employeeNumber"
+                                password="${noe.password}"/&gt;
+   </pre>
+   <pre>
+ * Usage:   &lt;condition property="is.authentication.sucess" &gt;
+                &lt;hlm:ldapauthenticate url="${email.ldap.server}" 
+                                rootdn="${email.ldap.rootdn}" 
+                                searchdn="${ldap.organization.unit.rootdn}, ${ldap.people.rootdn}" 
+                                filter="uid=${env.USERNAME}" 
+                                key="employeeNumber"
+                                password="${noe.password}"/&gt;
+            &lt;condition/&gt;
+   </pre>
+   @ant.task name="ldapauthenticate" category="Core" 
+ */
+public class ValidateUserLoginTask extends Task implements Condition
+{
+    private String url;
+    private String rootdn;
+    private String filter;
+    private String key;
+    private String property;
+    private String searchdn;
+    private String password;
+        
+    public void execute()
+    {
+        
+        if (property == null)
+            throw new BuildException("'property' attribute is not defined");
+        validateParameters(url, rootdn, filter, key, searchdn, password);
+        log("Authenticating the user...");
+        if (authenticateUser(url, searchUser(url, rootdn, filter, key, searchdn))) {
+            getProject().setProperty(property, "true");
+        }
+        else {
+            getProject().setProperty(property, "false");
+        }
+    }
+    
+    public boolean eval() {
+        
+        validateParameters(url, rootdn, filter, key, searchdn, password);
+        return authenticateUser(url, searchUser(url, rootdn, filter, key, searchdn)); 
+         
+    }
+    
+    public String searchUser(String url, String rootdn, String filter, String key, String searchdn) {
+        
+        String userSearchDN = null;
+        // Set up environment for creating initial context
+        Hashtable<String, String> env = new Hashtable<String, String>();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, url + "/" + rootdn);
+
+        // Create initial context
+        env.put(Context.SECURITY_AUTHENTICATION, "simple");
+        DirContext ctx = null;
+        NamingEnumeration results = null;
+        try {
+            ctx = new InitialDirContext(env);
+            SearchControls controls = new SearchControls();
+            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+            results = ctx.search("", filter, controls);
+            while (results.hasMore()) {
+                SearchResult searchResult = (SearchResult) results.next();
+                Attributes attributes = searchResult.getAttributes();
+                Attribute attr = attributes.get(key);
+                userSearchDN = key + "=" + (String) attr.get() + ", " + searchdn + ", " + rootdn;
+            }
+        } catch (NamingException e) {
+            e.printStackTrace(); 
+            throw new BuildException("LDAP Naming exception"); 
+        }
+        return userSearchDN;
+    }
+    
+    public void validateParameters(String url, String rootdn, String filter, String key, String searchdn, String password) {
+        
+        if (url == null)
+            throw new BuildException("'url' attribute is not defined");
+        if (rootdn == null)
+            throw new BuildException("'rootdn' attribute is not defined");
+        if (filter == null)
+            throw new BuildException("'filter' attribute is not defined");
+        if (key == null)
+            throw new BuildException("'key' attribute is not defined");
+        if (searchdn == null)
+            throw new BuildException("'searchdn' attribute is not defined");
+        if (password == null)
+            throw new BuildException("'password' attribute is not defined");
+    }
+    
+    public boolean authenticateUser(String ldapurl, String rooTdn) {
+    
+        Hashtable<String, String> env = new Hashtable<String, String>(11);
+        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, ldapurl);
+        env.put(Context.SECURITY_AUTHENTICATION, "simple");
+        env.put(Context.SECURITY_PRINCIPAL, rooTdn);
+        env.put(Context.SECURITY_CREDENTIALS, password);
+        try {
+            DirContext authContext = new InitialDirContext(env);
+            return true;
+        } catch (NamingException e) {
+            // We are Ignoring the errors as no need to fail the build.
+            log("Not able to validate the user. " + e.getMessage(), Project.MSG_DEBUG);
+            return false;  
+        }
+
+    }
+    public String getUrl() 
+    {
+        return url;
+    }
+    /**
+     * ldap URL
+     * @ant.required
+     */
+    public void setUrl(String url) 
+    {
+        this.url = url;
+    }
+    
+
+    public String getRootdn() 
+    {
+        return rootdn;
+    }
+    /**
+     * user password to authenticate
+     * @ant.required
+     */
+    public void setpassword(String password) 
+    {
+        this.password = password;
+    }
+    
+    public String getpassword() 
+    {
+        return password;
+    }
+    /**
+     * ldap root distinguished name to search user.
+     * @ant.required
+     */
+    public void setRootdn(String rootdn) 
+    {
+        this.rootdn = rootdn;
+    }
+    
+    public String getsearchdn() 
+    {
+        return searchdn;
+    }
+    /**
+     * ldap distinguished name to search user
+     * @ant.required
+     */
+    public void setsearchdn(String searchdn) 
+    {
+        this.searchdn = searchdn;
+    }
+
+    public String getFilter() 
+    {
+        return filter;
+    }
+    /**
+     * object name to search in the ldap.
+     * @ant.required
+     */
+    public void setFilter(String filter) 
+    {
+        this.filter = filter;
+    }
+
+    public String getOutputProperty() 
+    {
+        return property;
+    }
+    /**
+     * output property to set if the user found.
+     * @ant.required
+     */
+    public void setOutputProperty(String property) 
+    {
+        this.property = property;
+    }
+
+    public String getKey() 
+    {
+        return key;
+    }
+    /**
+     * key to search the user information
+     * @ant.required
+     */
+    public void setKey(String key) 
+    {
+        this.key = key;
+    }
+}
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/XMLLogCount.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * 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.core.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import com.nokia.helium.core.ant.conditions.XMLLogCondition;
-
-/**
- * This class sets a property to the number of matching severity inside a XML log.
- * 
- * @ant.task name="countSeverity" category="Core"
- */
-public class XMLLogCount extends Task {
-
-    private File fileName;
-    private String severity;
-    private String logRegexp;
-    private String property;
-
-    /**
-     * File to be parsed.
-     * 
-     * @param filename
-     * @ant.required
-     */
-    public void setFile(File filename) {
-        fileName = filename;
-    }
-
-    /**
-     * Defines the severity name to be counted.
-     * 
-     * @param severity
-     * @ant.required
-     */
-    public void setSeverity(String severity) {
-        this.severity = severity;
-    }
-
-    /**
-     * Name of the property to be set.
-     * @param property the property name
-     * @ant.required
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-    /**
-     * Regular expression which used to match a specific log filename.
-     * @param regex
-     * @ant.not-required
-     */
-    public void setLogMatcher(String regex) {
-        this.logRegexp = regex;
-    }
-    
-    /**
-     *  Execute the task. Set the property with number of severities.  
-     * @throws BuildException
-     */
-    public void execute() {
-        if (property == null)
-            throw new BuildException("'property' attribute is not defined");
-        
-        XMLLogCondition cond = new XMLLogCondition();
-        cond.setFile(fileName);
-        cond.setLogMatcher(logRegexp);
-        cond.setSeverity(severity);
-        getProject().setNewProperty(property, "" + cond.getSeverity());
-    }
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/taskdefs/XMLLogCountTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,90 @@
+/*
+ * 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.core.ant.taskdefs;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import com.nokia.helium.core.ant.conditions.XMLLogCondition;
+
+/**
+ * This class sets a property to the number of matching severity inside a XML log.
+ * 
+ * @ant.task name="countSeverity" category="Core"
+ */
+public class XMLLogCountTask extends Task {
+
+    private File fileName;
+    private String severity;
+    private String logRegexp;
+    private String property;
+
+    /**
+     * File to be parsed.
+     * 
+     * @param filename
+     * @ant.required
+     */
+    public void setFile(File filename) {
+        fileName = filename;
+    }
+
+    /**
+     * Defines the severity name to be counted.
+     * 
+     * @param severity
+     * @ant.required
+     */
+    public void setSeverity(String severity) {
+        this.severity = severity;
+    }
+
+    /**
+     * Name of the property to be set.
+     * @param property the property name
+     * @ant.required
+     */
+    public void setProperty(String property) {
+        this.property = property;
+    }
+
+    /**
+     * Regular expression which used to match a specific log filename.
+     * @param regex
+     * @ant.not-required
+     */
+    public void setLogMatcher(String regex) {
+        this.logRegexp = regex;
+    }
+    
+    /**
+     *  Execute the task. Set the property with number of severities.  
+     * @throws BuildException
+     */
+    public void execute() {
+        if (property == null)
+            throw new BuildException("'property' attribute is not defined");
+        
+        XMLLogCondition cond = new XMLLogCondition();
+        cond.setFile(fileName);
+        cond.setLogMatcher(logRegexp);
+        cond.setSeverity(severity);
+        getProject().setNewProperty(property, "" + cond.getSeverity());
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/Variable.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* 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.core.ant.types;
-
-import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.BuildException;
-import org.apache.log4j.Logger;
-
-/**
- * Helper class to store the command line variables
- * with name / value pair.
- * @ant.type name="arg" category="Core"
- * @ant.type name="makeOption" category="Core"
- */
-public class Variable extends DataType
-{
-    private static Logger log = Logger.getLogger(Variable.class);
-    private String name;
-    private String value;
-    private String cmdLine;
-
-    
-    public Variable() {
-    }
-    
-    /**
-     * Set the name of the variable.
-     * @param name
-     */
-    public void setName(String nm) {
-        name = nm;
-    }
-
-    
-    /**
-     * Get the name of the variable.
-     * @return name.
-     */
-    public String getName() {
-        if ( cmdLine == null) {
-            if (name == null ) { 
-                throw new BuildException( "name should not be null");
-            }
-            if (value == null) {
-                throw new BuildException( "value should not be null");
-            }
-            return name;
-        } else {
-            if (name != null  && value != null) { 
-                throw new BuildException( "you can define either name, value or line attribute and not both");
-            }
-            String cmdPart = cmdLine.trim();
-            String[] cmdArgs = cmdPart.split(" ");
-            return cmdArgs[0];
-        }
-    }
-
-    /**
-     * Set the value of the variable.
-     * @param value
-     */
-    public void setValue(String vlue) {
-        value = vlue;
-    }
-
-    /**
-     * Helper function to set the command line string
-     * @param line, string as input to command line.
-     */
-    public void setLine(String line) {
-        cmdLine = line;
-    }
-    
-    /**
-     * Get the value of the variable.
-     * @return value.
-     */
-    public String getValue() {
-        if ( cmdLine == null) {
-            if (name == null ) { 
-                throw new BuildException( "name should not be null");
-            }
-            if (value == null) {
-                throw new BuildException( "value should not be null");
-            }
-            return value;
-        } else {
-            if (name != null  && value != null) { 
-                throw new BuildException( "you can define either name, value or line attribute and not both");
-            }
-            return cmdLine;
-        }
-    }
-    /**
-     * Get the command line parameter
-     * @return command line string.
-     */
-    public String getParameter() {
-        if ( cmdLine == null) {
-            if (name == null ) { 
-                throw new BuildException( "name should not be null");
-            }
-            if (value == null) {
-                throw new BuildException( "value should not be null");
-            }
-            return name + "=" + value;
-        } else {
-            if (name != null  && value != null) { 
-                throw new BuildException( "you can define either name, value or line attribute and not both");
-            }
-            return cmdLine;
-        }
-    }
-
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableImpl.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* 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.core.ant.types;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.BuildException;
+import org.apache.commons.lang.StringUtils;
+
+import com.nokia.helium.core.ant.MappedVariable;
+import java.util.Arrays;
+
+/**
+ * Helper class to store the command line variables
+ * with name / value pair.
+ * @ant.type name="arg" category="Core"
+ * @ant.type name="makeOption" category="Core"
+ */
+public class VariableImpl extends DataType implements MappedVariable
+{
+    private String name;
+    private String value;
+    private String cmdLine;
+    
+    /**
+     * Set the name of the variable.
+     * @param name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Get the name of the variable. Will return name is name attribute is set
+     * or first command line parameter if line is used.
+     * @return name.
+     */
+    public String getName() {
+        if ( cmdLine == null) {
+            if (name == null ) { 
+                throw new BuildException( "'name' attribute must be defined");
+            }
+            if (value == null) {
+                throw new BuildException( "'value' attribute must be defined");
+            }
+            return name;
+        } else {
+            if (name != null  && value != null) { 
+                throw new BuildException( "You can define either name, value or line attribute and not both");
+            }
+            String cmdPart = cmdLine.trim();
+            String[] cmdArgs = cmdPart.split(" ");
+            return cmdArgs[0];
+        }
+    }
+
+    /**
+     * Set the value of the variable.
+     * @param value
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * Helper function to set the command line string
+     * @param line, string as input to command line.
+     */
+    public void setLine(String line) {
+        cmdLine = line;
+    }
+    
+    /**
+     * Get the value of the variable. Returns value if name/value are used, or the line attribute minus 
+     * the first command line parameter. 
+     * @return value.
+     */
+    public String getValue() {
+        if ( cmdLine == null) {
+            if (name == null ) { 
+                throw new BuildException( "'name' attribute must be defined");
+            }
+            if (value == null) {
+                throw new BuildException( "'value' attribute must be defined");
+            }
+            return value;
+        } else {
+            if (name != null  && value != null) { 
+                throw new BuildException( "You can define either name, value or line attribute but not both");
+            }
+            
+            String cmdPart = cmdLine.trim();
+            List<String> cmdList = new ArrayList<String>(Arrays.asList(cmdPart.split(" ")));
+            if (cmdList.size() > 0) {
+                cmdList.remove(0);
+            }
+            return StringUtils.join(cmdList.toArray(), " "); // "-c armv5 -c foobar" : " armv5 -c foobar"
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getParameter() {
+        return getParameter("=");
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public String getParameter(String separator) {
+        if ( cmdLine == null) {
+            if (name == null ) { 
+                throw new BuildException( "'name' attribute must be defined");
+            }
+            if (value == null) {
+                throw new BuildException( "'value' attribute must be defined");
+            }
+            return name + separator + value;
+        } else {
+            if (name != null  && value != null) { 
+                throw new BuildException( "You can define either name, value or line attribute but not both");
+            }
+            return cmdLine;
+        }
+    }
+
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableSet.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/src/com/nokia/helium/core/ant/types/VariableSet.java	Wed Jun 16 16:51:40 2010 +0300
@@ -17,48 +17,27 @@
  
 package com.nokia.helium.core.ant.types;
 
-import java.util.Vector;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
-import com.nokia.helium.core.ant.VariableIFImpl;
-import java.util.Collection;
-import org.apache.tools.ant.types.Reference;
+
+import com.nokia.helium.core.ant.MappedVariable;
+import com.nokia.helium.core.ant.Variable;
+import com.nokia.helium.core.ant.VariableMap;
+
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.DataType;
 import java.util.ArrayList;
-import org.apache.log4j.Logger;
 
 /**
  * Helper class to store the variable set (list of variables
  * with name / value pair)
  * @ant.type name="argSet" category="Core"
  */
-public class VariableSet extends VariableIFImpl {
-
-    private static Logger log = Logger.getLogger(VariableSet.class);
-    
-    private HashMap<String, Variable> variablesMap = new HashMap<String, Variable>();
-
-    private List<Variable> variables = new ArrayList<Variable> ();
-
-    private Vector<VariableSet> varSets = new Vector<VariableSet>();
+public class VariableSet extends DataType implements Variable, VariableMap {
     
-    private VariableSet currentSet;
-
-    /**
-     * Constructor
-     */
-    public VariableSet() {
-    }    
-
-    /**
-     * Helper function to add the created varset
-     * @param filter to be added to the varset
-     */
-    public void add(VariableSet varSet) {
-        currentSet = null;
-        if (varSet != null) {
-            varSets.add(varSet);
-        }
-    }
+    private List<Variable> variables = new ArrayList<Variable>();
 
     /**
      * Creates an empty variable element and adds 
@@ -66,9 +45,9 @@
      * @return empty Variable pair
      */
     public VariableSet createArgSet() {
-        VariableSet varSet =  new VariableSet();
-        add(varSet);
-        return varSet;
+        VariableSet variableSet =  new VariableSet();
+        variables.add(variableSet);
+        return variableSet;
     }
 
     /**
@@ -77,25 +56,17 @@
      * @return empty Variable pair
      */
     public Variable createArg() {
-        Variable var =  new Variable();
-        add(var);
-        return var;
+        Variable variable =  new VariableImpl();
+        variables.add(variable);
+        return variable;
     }
-    
-    private void addVariable(Variable var) {
-        variables.add(var);
-    }
-    
+        
     /**
      * Add a given variable to the list 
      * @param var variable to add
      */
-    public void add(Variable var) {
-        if ( currentSet == null) {
-            currentSet = new VariableSet();
-            varSets.add(currentSet);
-        }
-        currentSet.addVariable(var);
+    public void add(Variable variable) {
+        variables.add(variable);
     }
 
     /**
@@ -106,49 +77,81 @@
         return variables;
     }
     
+    /**
+     * Get the list of nested VariableSet.
+     * @return the list of VariableSet.
+     */
     public List<VariableSet> getVariableSets() {
-        return varSets;
+        List<VariableSet> variableSets = new ArrayList<VariableSet>();
+        for (Variable variable : variables) {
+            if (variable instanceof VariableSet) {
+                variableSets.add((VariableSet)variable);
+            }
+        }
+        return variableSets;
     }
-
-
-    /**
-     * Helper function to return the list of variables and its references
-     * @return variable list for this set and its references.
-     */
-    public Collection<Variable> getVariables() {
-        HashMap<String, Variable> varMap =   getVariablesMap();
-        //if (varMap.isEmpty()) {
-        //    throw new BuildException("Variable should not be empty and should contain one arg");
-        //}
-        return getVariablesMap().values();
-    }
+        
     /**
      * Returns the list of variables available in the VariableSet 
      * @return variable list
      */
-    public HashMap<String, Variable> getVariablesMap() {
-        HashMap<String, Variable> allVariables = new HashMap<String, Variable>();
-        // Then filters as reference in filterset
-        Reference refId = getRefid();
-        Object varSetObject = null;
-        if (refId != null) {
-            varSetObject = refId.getReferencedObject();
+    public HashMap<String, MappedVariable> getVariablesMap() {
+        if (this.isReference()) {
+            Object varSetObject = this.getRefid().getReferencedObject();
             if (varSetObject != null && varSetObject instanceof VariableSet) {
-                HashMap<String, Variable> varSetMap = ((VariableSet)varSetObject).getVariablesMap();
-                allVariables.putAll(varSetMap);
+                return ((VariableSet)varSetObject).getVariablesMap();
+            } else {
+                throw new BuildException("The '" + this.getRefid().getRefId() + "' reference is not referencing a VariableSet");
             }
+        } else {
+            HashMap<String, MappedVariable> allVariables = new HashMap<String, MappedVariable>();
+            for (Variable variable : variables) {
+                if (variable instanceof MappedVariable) {
+                    allVariables.put(((MappedVariable)variable).getName(), (MappedVariable)variable);
+                } else if (variable instanceof VariableSet)
+                    allVariables.putAll(((VariableSet)variable).getVariablesMap());
+            }
+            return allVariables;
         }
-        if (varSets != null && (!varSets.isEmpty())) {
-            for (VariableSet varSet : varSets) {
-                HashMap<String, Variable> variablesMap = varSet.getVariablesMap();
-                allVariables.putAll(variablesMap);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getParameter() {
+        return getParameter("=");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getParameter(String separator) {
+        if (this.isReference()) {
+            Object varSetObject = this.getRefid().getReferencedObject();
+            if (varSetObject != null && varSetObject instanceof VariableSet) {
+                return ((VariableSet)varSetObject).getParameter(separator);
+            } else {
+                throw new BuildException("The '" + this.getRefid().getRefId() + "' reference is not referencing a VariableSet");
             }
+        } else {
+            String parameter = "";
+            for (Variable variable : variables) {
+                
+                parameter += " " + variable.getParameter(separator);
+            }
+            return parameter; 
         }
-        if (variables != null && !variables.isEmpty()) {
-            for (Variable var : variables) {
-                allVariables.put(var.getName(), var);
-            }
-        }
-        return allVariables;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Collection<MappedVariable> getVariables() {
+        return this.getVariablesMap().values();
+    }
+    
+    
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/core/tests/antunit/ldap/test_ldap.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/antunit/ldap/test_ldap.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,7 +23,6 @@
 <project name="test-ldap" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium antlib core ldap tests.</description>
 
-    <typedef name="ldap" classname="com.nokia.helium.core.ant.taskdefs.LDAP"/>
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     
--- a/buildframework/helium/sf/java/core/tests/antunit/pythontask/test_pythontask.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/antunit/pythontask/test_pythontask.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,7 +23,6 @@
 <project name="test-pythontask" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium antlib core ldap tests.</description>
 
-    <typedef name="python" classname="com.nokia.helium.core.ant.taskdefs.PythonTask"/>
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <target name="test-python-task-case-default">
--- a/buildframework/helium/sf/java/core/tests/antunit/retrytask/test_retrytask.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/antunit/retrytask/test_retrytask.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,7 +23,6 @@
 <project name="test-retrytask" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium antlib core ldap tests.</description>
 
-    <typedef name="retry" classname="com.nokia.helium.core.ant.taskdefs.RetryTask"/>
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     
     <target name="test-retry-task-case-retrycount-set">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/tests/antunit/test_getfreedrive.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_getFreeDrive.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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 Core -->
+<project name="test_getFreeDrive" xmlns:hlm="http://www.nokia.com/helium" xmlns:au="antlib:org.apache.ant.antunit">
+    <description>
+        Testing getFreeDrive targets
+    </description>
+
+    <property name="current.dir" value="."/>
+    
+    <condition property="is.windows">
+        <os family="windows"/>
+    </condition>
+    
+    <target name="test-getfreedrive" if="is.windows">
+        <hlm:getfreedrive property="build.drive"/>
+         <au:assertTrue>
+            <isset property="build.drive"/>
+        </au:assertTrue>   
+    </target>
+
+    <target name="test-getfreedrive-missed-param" if="is.windows">
+        <au:expectfailure expectedMessage="'property' attribute is not defined">
+            <hlm:getfreedrive/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-getfreedrive-validation" if="is.windows">
+        <hlm:getfreedrive property="build.drive"/>
+        <exec osfamily="windows" executable="subst.exe" failonerror="false">
+            <arg value="${build.drive}"/>
+            <arg value="${current.dir}"/>
+        </exec>
+        <au:assertTrue>
+           <hasfreespace partition="${build.drive}" needed="1M"/>
+        </au:assertTrue>
+        <exec osfamily="windows" executable="subst.exe" failonerror="false">
+            <arg value="${build.drive}"/>
+            <arg value="/D"/>
+        </exec>
+    </target>
+
+</project>
+
--- a/buildframework/helium/sf/java/core/tests/antunit/variableset/test_variableset.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/core/tests/antunit/variableset/test_variableset.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,12 +23,11 @@
 <project name="test-variableset" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium antlib core variableset tests.</description>
 
-    <typedef name="arg" classname="com.nokia.helium.core.ant.types.Variable"/>
+    <typedef name="arg" classname="com.nokia.helium.core.ant.types.VariableImpl"/>
     <typedef name="argSet" classname="com.nokia.helium.core.ant.types.VariableSet"/>
 
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef name="getVariableValue" classname="com.nokia.helium.core.ant.taskdefs.GetValueFromVariableSet"/>
-
+    
     <argSet id="common.argset">
         <arg line="-c tools_rel -c tools2_rel" />
         <arg name="-j" value="1" />
@@ -55,9 +54,9 @@
     </argSet>
 
     <target name="test-var-value-test1">
-        <getVariableValue name="-j" property="test.var">
+        <hlm:getVariableValue name="-j" property="test.var">
             <argSet refid="common.argset" />
-        </getVariableValue>
+        </hlm:getVariableValue>
         <echo message="test.var: ${test.var}" />
         <au:assertTrue>
             <equals arg1="${test.var}" arg2="1"/>
@@ -66,16 +65,16 @@
 
     <target name="test-var-invalid-ref">
         <au:expectfailure>
-            <getVariableValue name="-j" property="test.var">
+            <hlm:getVariableValue name="-j" property="test.var">
                 <argSet refid="common.target" />
-            </getVariableValue>
+            </hlm:getVariableValue>
         </au:expectfailure>
     </target>
 
     <target name="test-var-override-test1">
-        <getVariableValue name="-j" property="test.var">
+        <hlm:getVariableValue name="-j" property="test.var">
             <argSet refid="override.argset.thread" />
-        </getVariableValue>
+        </hlm:getVariableValue>
         <echo message="test.var: ${test.var}" />
         <au:assertTrue>
             <equals arg1="${test.var}" arg2="10"/>
@@ -83,9 +82,9 @@
     </target>
 
     <target name="test-var-load-order1">
-        <getVariableValue name="--engine" property="test.var">
+        <hlm:getVariableValue name="--engine" property="test.var">
             <argSet refid="load.order1" />
-        </getVariableValue>
+        </hlm:getVariableValue>
         <echo message="test.var: ${test.var}" />
         <au:assertTrue>
             <equals arg1="${test.var}" arg2="emake"/>
@@ -94,33 +93,33 @@
 
     <target name="test-var-invalid-name">
         <au:expectfailure>
-            <getVariableValue name="--engine" property="test.var">
+            <hlm:getVariableValue name="--engine" property="test.var">
                 <argSet refid="common.argset" />
-            </getVariableValue>
+            </hlm:getVariableValue>
         </au:expectfailure>
     </target>
 
     <target name="test-var-invalid-arg1">
         <au:expectfailure>
-            <getVariableValue name="--engine" property="test.var">
+            <hlm:getVariableValue name="--engine" property="test.var">
                 <argSet refid="common.invalid.arg1" />
-            </getVariableValue>
+            </hlm:getVariableValue>
         </au:expectfailure>
     </target>
 
     <target name="test-var-invalid-arg2">
         <au:expectfailure>
-            <getVariableValue name="--engine" property="test.var">
+            <hlm:getVariableValue name="--engine" property="test.var">
                 <argSet refid="common.invalid.arg2" />
-            </getVariableValue>
+            </hlm:getVariableValue>
         </au:expectfailure>
     </target>
 
     <target name="test-var-invalid-arg3">
         <au:expectfailure>
-            <getVariableValue name="--engine" property="test.var">
+            <hlm:getVariableValue name="--engine" property="test.var">
                 <argSet refid="common.invalid.arg3" />
-            </getVariableValue>
+            </hlm:getVariableValue>
         </au:expectfailure>
     </target>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/core/tests/src/com/nokia/helium/core/tests/TestFileUtils.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* 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.core.tests;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.nokia.helium.core.FileUtils;
+
+public class TestFileUtils {
+
+    /**
+     * This test search the foobar excutable that should not exists.
+     */
+    @Test
+    public void findNonExistingBinary() {
+        assertTrue(FileUtils.findExecutableOnPath("foobar") == null);
+    }
+
+    /**
+     * This test is looking for ant executable, which must exists as
+     * we are running the test through Ant.
+     */
+    @Test
+    public void findExistingBinary() {
+        assertTrue(FileUtils.findExecutableOnPath("ant") != null);
+    }
+}
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsClient.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsClient.java	Wed Jun 16 16:51:40 2010 +0300
@@ -197,6 +197,10 @@
                 postMethod = getPostMethod(fileName, strURL);
                 result = processPostMethodResult(httpClient
                         .executeMethod(postMethod));
+            } catch (IllegalArgumentException e) {
+                // Catching this exception is needed because it is raised by httpclient
+                // library if the server is under update.
+                log.error("sendData:The final data via http not sent because errors:IllegalArgumentException ", e);
             } catch (DiamondsException e) {
                 log.error("sendData:The final data via http not sent because errors:DiamondsException ", e);
             } catch (IOException e) {
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/DiamondsListenerImpl.java	Wed Jun 16 16:51:40 2010 +0300
@@ -126,10 +126,10 @@
                         + "diamonds-full-results.xml");
                 FileUtils.getFileUtils().copyFile(first, fullResultsFile);
                 XMLMerger merger = new XMLMerger(fullResultsFile);
-                HashSet<File> h = new HashSet<File>(finalLogList);
-                for (File f : h) {
+                HashSet<File> fileHash = new HashSet<File>(finalLogList);
+                for (File file : fileHash) {
                     try {
-                        merger.merge(f);
+                        merger.merge(file);
                     } catch (XMLMerger.XMLMergerException xe) {
                         log.debug("Error during the merge: ", xe);
                     }
--- 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	Wed Jun 16 16:51:40 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<String, Stage> stageTargetEndMap = new HashMap<String, Stage>();
 
+    private Map<String, String> stageStartTargetMap = new HashMap<String, String>();
+
+    private Map<String, Date> stageStartTargetTimeMap = new HashMap<String, Date>();
+
     private boolean isTargetMapInitialized;
 
     private Project project;
 
-    private String currentStartTargetName;
-
     private List<Stage> 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,104 +79,150 @@
             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<Map<String, Date>> listIter = stageTargetBeginList.iterator(); listIter
+        .hasNext();) {
+            Map<String, Date> stageMap = listIter.next();
+            if (stageMap.get(startTargetName) != null) {
+                Set<String> 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());
+    }
 
+    private Stage getStageBasedOnEndTarget(String targetName, int hashCode) {
+        Stage stage = stageTargetEndMap.get(targetName);
+        if (stage != null) {
+            String currentStageTargetName = stageStartTargetMap.get(
+                    stage.getStartTargetName() + "-" + hashCode);
+            log.debug("getStageBasedOnEndTarget: currentStargetTargetName" + currentStageTargetName);
+            if (currentStageTargetName != null) {
+                return stage;
+            }
+        }
+        return null;
+    }
     @SuppressWarnings("unchecked")
     public void targetEnd(BuildEvent buildEvent) throws DiamondsException {
-        if (currentStartTargetName != null) {
-            String targetName = buildEvent.getTarget().getName();
-            Stage stage = stageTargetEndMap.get(targetName);
-            if (stage != null && getIsInitialized() ) {
-                //initDiamondsClient();
-                String stageName = stage.getStageName();
-                String sourceFile = stage.getSourceFile();
-                log
-                        .debug("diamonds:StageDiamondsListener: finished recording for stage: "
-                                + stageName);
-                if (sourceFile == null) {
-                    sourceFile = getSourceFile(stageName);
-                }
-                project.setProperty("logical.stage", stageName);
-                project.setProperty("stage.start.time", getTimeFormat()
-                        .format(currentStartTargetTime));
-                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);
-                if (stageTemplateFile.exists()) {
-                    String output = DiamondsConfig.getOutputDir()
-                            + File.separator + stageName + ".xml";
-                    try {
-                        List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
-                        sourceList.add(new PropertiesSource("ant", project
-                                .getProperties()));
-                        sourceList
-                                .add(new XMLTemplateSource("doc", new File(sourceFile)));
-                        getTemplateProcessor().convertTemplate(DiamondsConfig
-                                .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
-                                .getDiamondsProperties().getDiamondsBuildID());
-                    } catch (com.nokia.helium.core.TemplateProcessorException e1) {
-                        throw new DiamondsException(
-                                "template conversion error for stage: "
-                                        + stageName + " : " + e1.getMessage());
-                    }
-                } else {
-                    log.debug("diamonds:StageDiamondsListener:tempalte file: "
-                            + stageTemplateFile + " does not exist");
-                }
-
-                String output = DiamondsConfig.getOutputDir() + File.separator
-                        + stageName + "-time.xml";
-                // Store the time for the current stage and send it
-                stageTemplateFileName = "diamonds_stage.xml.ftl";
+        String targetName = buildEvent.getTarget().getName();
+        project = buildEvent.getProject();
+        int hashCode = project.hashCode();
+        String targetNameWithHashCode = targetName + "-" + hashCode;
+        log.debug("targetEnd: targetNamewith-hashcode: " + targetNameWithHashCode);
+        
+        Stage stage = getStageBasedOnEndTarget(targetName, hashCode);
+        if (stage != null && getIsInitialized() ) {
+            //initDiamondsClient();
+            String stageName = stage.getStageName();
+            String sourceFile = stage.getSourceFile();
+            log.debug("targetEnd: stageName: " + stageName);
+            log
+                    .debug("diamonds:StageDiamondsListener: finished recording for stage: "
+                            + stageName);
+            if (sourceFile == null) {
+                sourceFile = getSourceFile(stageName);
+            }
+            log.debug("targetEnd: logical.stage: " +  stageName);
+            Date startTime = getStartTime(stage, hashCode); 
+            log.debug("targetEnd: starttime: " +  startTime);
+            log.debug("targetEnd: endtime: " +  
+                    getTimeFormat().format(new Date()));
+            project.setProperty("logical.stage", stageName);
+            project.setProperty("stage.start.time", getTimeFormat()
+                    .format(startTime));
+            project.setProperty("stage.end.time", getTimeFormat()
+                    .format(new Date()));
+            // Look for template file with stage name
+            String stageTemplateFileName = stageName + ".xml.ftl";
+            File stageTemplateFile = new File(stageTemplateFileName);
+            if (stageTemplateFile.exists()) {
+                String output = DiamondsConfig.getOutputDir()
+                        + File.separator + stageName + ".xml";
                 try {
                     List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
                     sourceList.add(new PropertiesSource("ant", project
                             .getProperties()));
-                    sourceList.add(new XMLTemplateSource("doc", new File(sourceFile)));
+                    sourceList
+                            .add(new XMLTemplateSource("doc", new File(sourceFile)));
                     getTemplateProcessor().convertTemplate(DiamondsConfig
-                            .getTemplateDir(), stageTemplateFileName, output,
-                            sourceList);
+                            .getTemplateDir(), stageTemplateFileName,
+                            output, sourceList);
                     mergeToFullResults(new File(output));
-                    // List filesToMerge = new ArrayList();
-
-                    // mergedFile = mergeFiles(output);
+                    log.info("Sending data to diamonds for stage: "
+                            + stageName);
                     getDiamondsClient().sendData(output, DiamondsConfig
                             .getDiamondsProperties().getDiamondsBuildID());
                 } catch (com.nokia.helium.core.TemplateProcessorException e1) {
-                    throw new DiamondsException("template conversion error while sending data for stage: "
-                            + stageName + " : " + e1.getMessage());
+                    throw new DiamondsException(
+                            "template conversion error for stage: "
+                                    + stageName + " : " + e1.getMessage());
                 }
+            } else {
+                log.debug("diamonds:StageDiamondsListener:tempalte file: "
+                        + stageTemplateFile + " does not exist");
+            }
+
+            String output = DiamondsConfig.getOutputDir() + File.separator
+                    + stageName + "-time.xml";
+            log.debug("targetEnd: output " + output);
+            // Store the time for the current stage and send it
+            stageTemplateFileName = "diamonds_stage.xml.ftl";
+            try {
+                List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
+                sourceList.add(new PropertiesSource("ant", project
+                        .getProperties()));
+                sourceList.add(new XMLTemplateSource("doc", new File(sourceFile)));
+                getTemplateProcessor().convertTemplate(DiamondsConfig
+                        .getTemplateDir(), stageTemplateFileName, output,
+                        sourceList);
+                mergeToFullResults(new File(output));
+                // List filesToMerge = new ArrayList();
+
+                // mergedFile = mergeFiles(output);
+                getDiamondsClient().sendData(output, DiamondsConfig
+                        .getDiamondsProperties().getDiamondsBuildID());
+            } catch (com.nokia.helium.core.TemplateProcessorException e1) {
+                throw new DiamondsException("template conversion error while sending data for stage: "
+                        + stageName + " : " + e1.getMessage());
             }
         }
     }
 
-    private void findAndSetStartTimeForTargetInStageList(String targetName)
-            throws DiamondsException {
+    private void findAndSetStartTimeForTargetInStageList(String targetName,
+            String targetNameWithHashCode) throws DiamondsException {
         for (Iterator<Map<String, Date>> listIter = stageTargetBeginList.iterator(); listIter
                 .hasNext();) {
             Map<String, Date> 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 +234,7 @@
             // stage begin process
             Stage stage = iter.next();
             String startTargetName = stage.getStartTargetName();
-            Map<String, Date> stageMap = new HashMap<String, Date>();
+            Map<String, Date> stageMap = new LinkedHashMap<String, Date>();
             Vector<Target> arrayList = null;
             try {
                 arrayList = project.topoSort(startTargetName, project
@@ -211,6 +256,13 @@
                 // stage end process
                 String endTargetName = stage.getEndTargetName();
                 // fast lookup
+                Stage existingStage = stageTargetEndMap.get(endTargetName); 
+                if (existingStage != null) {
+                    throw new BuildException("Not supported: two stages with" +
+                            "same ending target defined by:stage1: " + 
+                            existingStage.getStageName() +
+                            "stage2: " + stage.getStageName());
+                }
                 stageTargetEndMap.put(endTargetName, stage);
                 log.debug("   - End target: " + endTargetName);
             }
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java	Wed Jun 16 16:51:40 2010 +0300
@@ -100,22 +100,22 @@
     @SuppressWarnings("unchecked")
     protected void mergeNode(Element dest, Element src) {
         for (Iterator<Element> node = src.elements().iterator(); node.hasNext();) {
-            Element e = node.next();
+            Element element = node.next();
             
-            List<Element> ses = dest.elements(e.getName());
+            List<Element> ses = dest.elements(element.getName());
             boolean add = true;
             for (Element se : ses) {
-                if (areSame(se, e)) {
-                    log.debug("Element " + e.getName() + " already found in dest.");
+                if (areSame(se, element)) {
+                    log.debug("Element " + element.getName() + " already found in dest.");
                     add = false;
                 }
             }
             if (add) {
-                log.debug("Adding node " + e.getName() + " to " + dest.getName());
-                dest.add(e.detach());
+                log.debug("Adding node " + element.getName() + " to " + dest.getName());
+                dest.add(element.detach());
             } else if (ses.size() > 0) {
-                log.debug("Merging " + ses.get(0).getName() + " to " + e.getName());
-                mergeNode(ses.get(0), e);
+                log.debug("Merging " + ses.get(0).getName() + " to " + element.getName());
+                mergeNode(ses.get(0), element);
             }
         }
     }
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/ant/HeliumListener.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/ant/HeliumListener.java	Wed Jun 16 16:51:40 2010 +0300
@@ -229,9 +229,9 @@
     private void cleanup() {
         String loggingoutputfile = project.getProperty("logging.output.file");
         if (loggingoutputfile != null) {
-            File f = new File(loggingoutputfile);
-            if (f.exists())
-                f.delete();
+            File file = new File(loggingoutputfile);
+            if (file.exists())
+                file.delete();
         }
     }
 
--- a/buildframework/helium/sf/java/diamonds/tests/antunit/run-scenario.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/antunit/run-scenario.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -24,7 +24,7 @@
     <description>Helium Antlib logger macro.</description>
     <property environment="env" />
     
-    <target name="setUp">    
+    <target name="setUp">
         <tempfile property="temp.dir" suffix=".dir" />
         <mkdir dir="${temp.dir}" />
     </target>
@@ -36,15 +36,16 @@
     <macrodef name="runScenario">
         <attribute name="scenario" />
         <attribute name="target" />
+        <attribute name="failonerror" default="true"/>
         <sequential>
-            <exec osfamily="windows" executable="cmd" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
+            <exec osfamily="windows" executable="cmd" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="@{failonerror}">
                 <env key="ANT_ARGS" value="${env.ANT_ARGS}" />
                 <arg line="/c ..\build.bat" />
                 <arg line="@{target}" />
                 <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
                 <arg value="-Dtemp.dir=${temp.dir}" />
             </exec>
-            <exec osfamily="unix" executable="../bld.sh" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
+            <exec osfamily="unix" executable="../bld.sh" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="@{failonerror}">
                 <env key="ANT_ARGS" value="${env.ANT_ARGS}" />
                 <arg line="@{target}" />
                 <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
--- a/buildframework/helium/sf/java/diamonds/tests/antunit/test_diamonds.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/antunit/test_diamonds.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -25,7 +25,7 @@
 
     
     <import file="run-scenario.ant.xml" />
-    
+
     <target name="test-build">
         <runScenario scenario="build" target="unittest-diamonds" />
         <au:assertFileExists file="${temp.dir}/output/diamonds-start.log.xml" />
@@ -43,5 +43,10 @@
         <au:assertFileExists file="${temp.dir}/output/diamonds-start.log.xml" />
         <au:assertFileExists file="${temp.dir}/output/diamonds-finish.xml" />
     </target>
+
+    <target name="test-build-with-invalid-templates-1">
+        <runScenario scenario="invalid-templates-1" failonerror="false" target="unittest-diamonds" />
+        <au:assertLogContains text="Not supported: two stages withsame ending target"/>
+    </target>
     
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/config/diamonds_config.xml.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/config/diamonds_config.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -43,10 +43,25 @@
     <stages>
             <!-- verifying basic stage input -->
             <stage name="pre-build" start="version" end="version" />
-            
+            <stage name="test-echo-operation" 
+                start="test-echo-operation" end="test-echo-operation" />
+            <stage name="test-echo-operation1" 
+                start="test-echo-operation1" end="test-echo-operation1" />
+            <stage name="test-echo-operation2" 
+                start="test-echo-operation2" end="test-echo-operation2" />
+            <stage name="test-echo-operation3" 
+                start="test-echo-operation3" end="test-echo-operation3" />
+            <stage name="test-echo-operation4" 
+                start="test-echo-operation4" end="test-echo-operation4" />
+            <stage name="test-echo-operation5" 
+                start="test-echo-operation5" end="test-echo-operation5" />
             <!-- verifying basic stage input with input xml file-->
             <stage name="build" start="compile-target" end="compile-target"
                 logfile="${ant['compile.log.input']}"/>
+            <stage name="stage-sequence-1" start="test-buildid-set" end="test-version"
+                />
+            <stage name="stage-sequence-2" start="test-buildid-set" end="test-defer-type"
+                />
     </stages>
     <targets>
         <target name="codescanner" template-file="codescanner.xml.ftl"
--- a/buildframework/helium/sf/java/diamonds/tests/data/templates/codescanner.xml.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/data/templates/codescanner.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -39,4 +39,5 @@
     </#list>
 </#list>
 </#if>
-${count}</#macro>
\ No newline at end of file
+${count}
+</#macro>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/build/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/build/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -40,6 +40,7 @@
     <property name="invalid.target.input.file" location="${diamonds.unitest.dir}/data/invalid.target.input.log.xml" />
     <property name="symsee.version" value="9.1.0" />
 
+    <property name="diamonds.host" value="diamonds.nmp.nokia.com" />
 
     <target name="unittest" depends="unittest-diamonds" />
     
@@ -155,8 +156,73 @@
         </au:assertFalse>
     </target>
 
+    <target name="test-echo-operation">
+        <echo message="echo operation: test" />
+    </target>
+
+    <target name="test-echo-operation1">
+        <echo message="echo operation1: test" />
+    </target>
+
+    <target name="test-echo-operation2">
+        <echo message="echo operation2: test" />
+    </target>
+
+    <target name="test-echo-operation3">
+        <echo message="echo operation3: test" />
+    </target>
+
+    <target name="test-echo-operation4">
+        <echo message="echo operation4: test" />
+    </target>
+
+    <target name="test-echo-operation5">
+        <echo message="echo operation5: test" />
+    </target>
+
+    <target name="test-depend-target" depends="test-echo-operation">
+        <echo message="test-ant-call" />
+        <antcall target="test-echo-operation" />
+        <au:assertFileExists file="${diamonds.output.dir}/test-echo-operation-time.xml" />
+    </target>
+
+    <target name="test-ant-call">
+        <echo message="test-ant-call" />
+        <antcall target="test-echo-operation1" />
+        <au:assertFileExists file="${diamonds.output.dir}/test-echo-operation1-time.xml" />
+    </target>
+
+    <target name="test-ant-call-multiple">
+        <echo message="test-ant-call" />
+        <antcall target="test-echo-operation2" />
+        <au:assertFileExists file="${diamonds.output.dir}/test-echo-operation2-time.xml" />
+        <antcall target="test-echo-operation3" />
+        <au:assertFileExists file="${diamonds.output.dir}/test-echo-operation3-time.xml" />
+    </target>
+
+    <target name="test-ant-call-multiple-parallel">
+        <echo message="test-ant-call" />
+        <parallel>
+            <antcall target="test-echo-operation4" />
+            <antcall target="test-echo-operation5" />
+        </parallel>
+        <au:assertFileExists file="${diamonds.output.dir}/test-echo-operation4-time.xml" />
+        <au:assertFileExists file="${diamonds.output.dir}/test-echo-operation5-time.xml" />
+    </target>
+
+    <target name="sequence-config-test-target-1">
+        <au:assertFileExists file="${diamonds.output.dir}/stage-sequence-1-time.xml" />
+    </target>
+
+    <target name="sequence-config-test-target-2">
+        <au:assertFileExists file="${diamonds.output.dir}/stage-sequence-2-time.xml" />
+    </target>
+
+
     <target name="test-all" depends="test-buildid-notset, diamonds, test-buildid-set, test-defer-type, test-version,
         test-create-bom-log,test-codescanner,test-compile-target,test-invalid-diamonds-server-properties,
         test-non-existing-ant-properties,test-invalid-ant-properties-input,test-invalid-template-file,
-        test-invalid-target-input-file,test-invalid-stage-input-file " />
+        test-invalid-target-input-file,test-invalid-stage-input-file, test-depend-target,
+        test-ant-call, test-ant-call-multiple, test-ant-call-multiple-parallel, 
+        sequence-config-test-target-1,sequence-config-test-target-2 " />
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-address/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-address/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -20,7 +20,7 @@
 
 ============================================================================
 -->
-<project name="test-diamonds" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+<project name="test-diamonds-invalid-address" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib diamonds unittests.</description>
     <property environment="env" />
     
@@ -29,7 +29,7 @@
     <property name="diamonds.path" value="/diamonds/builds/" />
     <property name="diamonds.mail" value="diamonds@invalid.server.local" />
     
-    <property name="diamonds.unitest.dir" location="${ant.file.test-diamonds}/../../../" />
+    <property name="diamonds.unitest.dir" location="${ant.file.test-diamonds-invalid-address}/../../../" />
     <property name="diamonds.output.dir" location="${temp.dir}/output" />
     <property name="diamonds.template.dir" location="${diamonds.unitest.dir}/data/templates" />
     <property name="build.family" value="test_new_hlm"/>
@@ -43,7 +43,6 @@
     <property name="invalid.target.input.file" location="${diamonds.unitest.dir}/data/invalid.target.input.log.xml" />
     <property name="symsee.version" value="9.1.0" />
 
-
     <target name="unittest" depends="unittest-diamonds" />
     
     <target name="unittest-diamonds" >
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!-- 
+============================================================================ 
+Name        : test_diamonds.ant.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test-diamonds-invalid-template-1" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib diamonds unittests.</description>
+    <property environment="env" />
+    
+    <property name="diamonds.unitest.dir" location="${ant.file.test-diamonds-invalid-template}/../../../" />
+    <import file="../../../../../../nokia/companyproperties.ant.xml" optional="true"/>
+    <import file="../../../../../../../extensions/nokia/external/helium-nokia-antlib/companyproperties.ant.xml" optional="true"/>
+    <property name="diamonds.output.dir" location="${temp.dir}/output" />
+    <property name="diamonds.template.dir" location="${diamonds.unitest.dir}/data/templates" />
+    <property name="build.family" value="test_new_hlm"/>
+    <property name="id" value="123"/>
+    <property name="name" value="${build.family}_${id}"/>
+    <property name="build.system" value="ec-helium"/>
+    <property name="diamonds.listener.configuration.file" location="${diamonds.unitest.dir}/scenarii/invalid-templates-1/diamonds_config.xml.ftl" />
+    <property name="symsee.version" value="9.1.0" />
+
+    <target name="version">
+        <echo message="version" />
+    </target>
+
+    <target name="unittest" depends="unittest-diamonds" />
+    
+    <target name="unittest-diamonds" >
+            <delete dir="${diamonds.output.dir}" failonerror="false"/>
+            <mkdir dir="${diamonds.output.dir}"/>
+            <antcall target="test-all" />
+    </target>
+
+    <target name="diamonds" />
+    <target name="test-all" depends="diamonds" />
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates-1/diamonds_config.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : diamonds_config.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<configuration>
+<config>
+    <output-dir path="${ant['diamonds.output.dir']}"/>
+    <template-dir path="${ant['diamonds.template.dir']}"/>
+    
+    <property name="smtpserver" value="email.smtp.server" />
+    <property name="ldapserver" value="email.ldap.server" />
+    <property name="initialiser-target-name" value="diamonds" />
+    
+    <server>
+        <property name="host" value="diamonds.host" />
+        <property name="port" value="diamonds.port" />
+        <property name="path" value="diamonds.path" />
+        <property name="tstampformat" value="yyyy-MM-dd'T'HH:mm:ss" />
+        <property name="mail" value="diamonds.mail" />
+        <property name="category-property" value="build.family" />
+        <property name="buildid-property" value="diamonds.build.id" />
+    </server>
+</config>
+<logger>
+    <stages>
+            <!-- verifying basic stage input -->
+            <stage name="pre-build" start="version" end="version" />
+            <stage name="pre-build-1" start="version" end="version" />
+    </stages>
+</logger>
+</configuration>
\ No newline at end of file
--- a/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/tests/scenarii/invalid-templates/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -20,11 +20,11 @@
 
 ============================================================================
 -->
-<project name="test-diamonds" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+<project name="test-diamonds-invalid-template" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib diamonds unittests.</description>
     <property environment="env" />
     
-    <property name="diamonds.unitest.dir" location="${ant.file.test-diamonds}/../../../" />
+    <property name="diamonds.unitest.dir" location="${ant.file.test-diamonds-invalid-template}/../../../" />
     <import file="../../../../../../nokia/companyproperties.ant.xml" optional="true"/>
     <import file="../../../../../../../extensions/nokia/external/helium-nokia-antlib/companyproperties.ant.xml" optional="true"/>
     <property name="diamonds.output.dir" location="${temp.dir}/output" />
@@ -40,7 +40,6 @@
     <property name="invalid.target.input.file" location="${diamonds.unitest.dir}/data/invalid.target.input.log.xml" />
     <property name="symsee.version" value="9.1.0" />
 
-
     <target name="unittest" depends="unittest-diamonds" />
     
     <target name="unittest-diamonds" >
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/Command.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/Command.java	Wed Jun 16 16:51:40 2010 +0300
@@ -139,8 +139,8 @@
         for (String arg : getArguments()) {
             cmdLine += " " + arg;            
         }
-        for (Entry<String, String> e : getVariables().entrySet()) {
-            cmdLine += " " + e.getKey() + "=" + e.getValue();            
+        for (Entry<String, String> varEnum : getVariables().entrySet()) {
+            cmdLine += " " + varEnum.getKey() + "=" + varEnum.getValue();            
         }
         cmdLine += " " + getTarget();
         return cmdLine;
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/JavaEngine.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/JavaEngine.java	Wed Jun 16 16:51:40 2010 +0300
@@ -138,11 +138,11 @@
         File tempDir = imaker.createWorkDir();
         args.add("WORKDIR=" + tempDir.getAbsolutePath());
         // Pushing custom variables
-        for (Entry<String, String> e : cmd.getVariables().entrySet()) {
-            if (e.getKey().equals("WORKDIR")) {
+        for (Entry<String, String> cmdEnum : cmd.getVariables().entrySet()) {
+            if (cmdEnum.getKey().equals("WORKDIR")) {
                 task.log("WORKDIR cannot be defined by the user, the value will be ignored.", Project.MSG_WARN);
             } else {
-                args.add(e.getKey() + "=" + e.getValue());
+                args.add(cmdEnum.getKey() + "=" + cmdEnum.getValue());
             }
         }
         // Setting the target
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/build_imaker_roms_signing.mk.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/engines/build_imaker_roms_signing.mk.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -54,11 +54,11 @@
     <#list cmds as cmd>
         <#assign cmdline="">
         <#list cmd.getArguments() as arg>
-            <#assign cmdline="${cmdline} ${arg}">
+            <#assign cmdline="${cmdline} \"${arg}\"">
         </#list>
         <#assign vars=cmd.getVariables()>
         <#list vars?keys as var>
-            <#assign cmdline="${cmdline} ${var}=${vars[var]}">
+            <#assign cmdline="${cmdline} \"${var}=${vars[var]}\"">
         </#list>
 	@echo $(call iif,$(USE_UNIX),,cmd /c) ${cmd.getCommand()} WORKDIR=$(ROMBUILD_TEMPDIR)/config_${iid} ${cmdline} ${cmd.getTarget()}-dir >> $(ROMBUILD_TEMPDIR)/command-dir-list-${cid}.txt 
 <#assign iid=iid+1>
@@ -70,11 +70,11 @@
     <#list cmds as cmd>
         <#assign cmdline="">
         <#list cmd.getArguments() as arg>
-            <#assign cmdline="${cmdline} ${arg}">
+            <#assign cmdline="${cmdline} \"${arg}\"">
         </#list>
         <#assign vars=cmd.getVariables()>
         <#list vars?keys as var>
-            <#assign cmdline="${cmdline} ${var}=${vars[var]}">
+            <#assign cmdline="${cmdline} \"${var}=${vars[var]}\"">
         </#list>
 #
 #  Building configuration ${iid}.
@@ -104,11 +104,11 @@
     <#list cmds as cmd>
         <#assign cmdline="">
         <#list cmd.getArguments() as arg>
-            <#assign cmdline="${cmdline} ${arg}">
+            <#assign cmdline="${cmdline} \"${arg}\"">
         </#list>
         <#assign vars=cmd.getVariables()>
         <#list vars?keys as var>
-            <#assign cmdline="${cmdline} ${var}=${vars[var]}">
+            <#assign cmdline="${cmdline} \"${var}=${vars[var]}\"">
         </#list>
 	@echo $(call iif,$(USE_UNIX),,cmd /c) ${cmd.getCommand()} WORKDIR=$(ROMBUILD_TEMPDIR)/config_${iid} ${cmdline} ${cmd.getTarget()}-e2flash >> $(ROMBUILD_TEMPDIR)/command-e2flash-list-${cid}.txt 
 <#assign iid=iid+1>
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/taskdefs/IMakerTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/ant/taskdefs/IMakerTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -115,6 +115,10 @@
             engine.setTask(this);
             return engine;
         } else {
+            log("Using engine: " + engineRefId);
+            if (this.getProject().getReference(engineRefId) == null) {
+                throw new BuildException("Could not find engine reference: '" + engineRefId + "'.");
+            }
             try {
                 Engine engine = (Engine)this.getProject().getReference(engineRefId);
                 engine.setTask(this);
--- a/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/utils/ParallelExecutor.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/src/com/nokia/helium/imaker/utils/ParallelExecutor.java	Wed Jun 16 16:51:40 2010 +0300
@@ -71,10 +71,10 @@
             for (int i = 0; st.hasMoreTokens(); i++) {
                 cmdArray[i] = st.nextToken();
             }
-            Process p;
+            Process process;
             try {
-                p = new ProcessBuilder(cmdArray).redirectErrorStream(true).start();
-                BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
+                process = new ProcessBuilder(cmdArray).redirectErrorStream(true).start();
+                BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
                 String line;
                 StringBuffer buffer = new StringBuffer();
                 SimpleDateFormat df = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy");
--- a/buildframework/helium/sf/java/imaker/tests/antunit/test_imaker.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/tests/antunit/test_imaker.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -278,4 +278,28 @@
         <au:assertLogContains text="Nothing to build." />
     </target>
 
+    <target name="test-imaker-imakerconfiguration-variableset-invalid-engine">
+        <au:expectfailure message="Could not find engine reference: 'invalid.engine.ref'.">
+            <hlm:imaker epocroot="${epocroot}" output="${epocroot.temp}/output.log" engineRefid="invalid.engine.ref">
+                <hlm:imakerconfiguration>
+                    <makefileset>
+                        <include name="**/product/*ui.mk" />
+                    </makefileset>
+                    <targetset>
+                        <include name="core" />
+                        <include name="langpack_\d+" />
+                    </targetset>
+                    <variablegroup>
+                        <variable name="TYPE" value="rnd" />
+                    </variablegroup>
+                    <variablegroup>
+                        <variable name="TYPE" value="prd" />
+                    </variablegroup>
+                </hlm:imakerconfiguration>
+            </hlm:imaker>
+        </au:expectfailure>
+        <au:assertLogContains text="Using engine: invalid.engine.ref" />
+        <au:assertFileDoesntExist file="${epocroot.temp}/output.log" />
+   </target>
+    
 </project>
--- a/buildframework/helium/sf/java/imaker/tests/antunit/test_imaker_drive_letter.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/imaker/tests/antunit/test_imaker_drive_letter.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -41,13 +41,15 @@
         <delete dir="${epocroot}/epoc32" failonerror="false" />
         <echo>-------------------------------------------------------------------------------</echo>
     </target>
-
+    
+    <!-- once imaker is in SymSEE this does not fail 
     <target name="test-imaker-noargs-noconfig">
         <echo>Will fail because it can't find imaker.</echo>
         <au:expectfailure>
             <hlm:imaker />
         </au:expectfailure>
     </target>
+    -->
 
     <target name="test-imaker-epocroot">
         <echo>Usin custom epocroot.</echo>
--- a/buildframework/helium/sf/java/internaldata/bin/com/nokia/helium/internaldata/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : antlib.xml 
-Part of     : Helium AntLib
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<antlib>
-    <!-- Task definition -->
-    <taskdef name="hlmassertmessage" classname="com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessage"/>
-</antlib>
--- a/buildframework/helium/sf/java/internaldata/bin/com/nokia/helium/internaldata/ant/helium.antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : libs.ant.xml 
-Part of     : Helium 
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="libs-internaldata" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>
-        Ant task definition declarations.
-    </description>
-    <taskdef resource="com/nokia/helium/internaldata/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-</project>
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,5 +22,5 @@
 -->
 <antlib>
     <!-- Task definition -->
-    <taskdef name="hlmassertmessage" classname="com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessage"/>
+    <taskdef name="hlmassertmessage" classname="com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessageTask"/>
 </antlib>
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/AssertNode.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/AssertNode.java	Wed Jun 16 16:51:40 2010 +0300
@@ -18,7 +18,7 @@
 package com.nokia.helium.internaldata.ant.listener;
 
 //import com.nokia.ant.taskdefs.HlmAssertMessage;
-import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessage;
+import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessageTask;
 /**
  * Object to set end time for a task.
  *
@@ -34,7 +34,7 @@
     private int line = -1;
     private String assertName;
     
-     public AssertNode(DataNode parent, HlmAssertMessage task) {
+     public AssertNode(DataNode parent, HlmAssertMessageTask task) {
         super(parent, task);
         name = task.getTaskName();
         this.setFilename(task.getLocation().getFileName());
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/Listener.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/Listener.java	Wed Jun 16 16:51:40 2010 +0300
@@ -19,7 +19,7 @@
 
 import java.util.Hashtable;
 import java.util.Date;
-import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessage;
+import com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessageTask;
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.Project;
@@ -187,7 +187,7 @@
         // Ignoring task information
     }
 
-    public void addAssertTask(HlmAssertMessage assertTask) { 
+    public void addAssertTask(HlmAssertMessageTask assertTask) { 
         if (buildNode != null) {
             DataNode parentNode = buildNode.find(assertTask.getOwningTarget());
             if (parentNode != null) {
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/XMLRenderer.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/listener/XMLRenderer.java	Wed Jun 16 16:51:40 2010 +0300
@@ -191,8 +191,8 @@
     protected void createProperties(Element statistics) {
         Element propertiesElt = statistics.addElement("properties");
         if (properties != null) {
-            for (Enumeration<String> e = properties.keys(); e.hasMoreElements() ; ) {
-                String key = e.nextElement();
+            for (Enumeration<String> propertyEnum = properties.keys(); propertyEnum.hasMoreElements() ; ) {
+                String key = propertyEnum.nextElement();
                 Element propertyElt = propertiesElt.addElement("property");
                 propertyElt.addAttribute("name", key);
                 propertyElt.addAttribute("value", properties.get(key));
--- a/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/taskdefs/HlmAssertMessage.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* 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.internaldata.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import com.nokia.helium.internaldata.*;
-import com.nokia.helium.internaldata.ant.listener.Listener;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-
-/**
- * Task to identify failing assert.
- *
- * Usage: &lt;hlm:hlmassertmessage assertName="hlm:assertPropertySet" message="Warning: @{message}"/&gt;
- */
-
-public class HlmAssertMessage extends Task {
-    
-    private String message;
-    private String assertName;
-        
-    public void execute() {
-        
-        if (assertName == null)
-            throw new BuildException("'assertName' attribute is not defined");
-        if (message == null)
-            throw new BuildException("'message' attribute is not defined");
-        
-        for (int i = 0 ; i < getProject().getBuildListeners().size() ; i++) {
-            if (getProject().getBuildListeners().get(i) instanceof Listener) {
-                Listener listen = (Listener)getProject().getBuildListeners().get(i);
-                listen.addAssertTask(this);
-                break;
-            }
-        }
-    }
-    /**
-     * Returns assert name.
-     * @return
-     */
-    public String getAssertName() 
-    {
-        return assertName;
-    }
-    /**
-     * Set the assertname.
-     * @param assertName
-     */
-    public void setAssertName(String assertName) 
-    {
-        this.assertName = assertName;
-    }
-    /**
-     * Return the assert message.
-     * @return
-     */
-    public String getMessage() 
-    {
-        return message;
-    }
-    /**
-     * Set the assert message.
-     * @param message
-     */
-    public void setMessage(String message) 
-    {
-        this.message = message;
-    }
-    
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/internaldata/src/com/nokia/helium/internaldata/ant/taskdefs/HlmAssertMessageTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* 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.internaldata.ant.taskdefs;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import com.nokia.helium.internaldata.ant.listener.Listener;
+
+
+/**
+ * Task to identify failing assert and push them to the internal data database.
+ *
+ * Usage:
+ * <pre>
+ * &lt;hlm:hlmassertmessage assertName="hlm:assertPropertySet" message="Warning: @{message}"/&gt;
+ * </pre>
+ * 
+ * @ant.task name=hlmassertmessage category=internaldata
+ */
+public class HlmAssertMessageTask extends Task {
+    
+    private String message;
+    private String assertName;
+        
+    /**
+     * {@inheritDoc}
+     */
+    public void execute() {
+        
+        if (assertName == null)
+            throw new BuildException("'assertName' attribute is not defined");
+        if (message == null)
+            throw new BuildException("'message' attribute is not defined");
+        
+        for (int i = 0 ; i < getProject().getBuildListeners().size() ; i++) {
+            if (getProject().getBuildListeners().get(i) instanceof Listener) {
+                Listener listen = (Listener)getProject().getBuildListeners().get(i);
+                listen.addAssertTask(this);
+                break;
+            }
+        }
+    }
+    /**
+     * Returns assert name.
+     * @return
+     */
+    public String getAssertName() 
+    {
+        return assertName;
+    }
+    /**
+     * Set the assertname.
+     * @param assertName
+     */
+    public void setAssertName(String assertName) 
+    {
+        this.assertName = assertName;
+    }
+    /**
+     * Return the assert message.
+     * @return
+     */
+    public String getMessage() 
+    {
+        return message;
+    }
+    /**
+     * Set the assert message.
+     * @param message
+     */
+    public void setMessage(String message) 
+    {
+        this.message = message;
+    }
+    
+}
--- a/buildframework/helium/sf/java/internaldata/tests/antunit/test_HlmAssertMessage.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/internaldata/tests/antunit/test_HlmAssertMessage.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,15 +23,14 @@
 <project name="helium-antlib-internaldata-hlmassertmessage-unittest" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib internal unittests.</description>
     <taskdef resource="com/nokia/helium/internaldata/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef name="hlmassertmessage" classname="com.nokia.helium.internaldata.ant.taskdefs.HlmAssertMessage"/>
     <target name="test-hlmAssertMessage-case-no-args">
         <au:expectfailure expectedmessage="'assertName' attribute is not defined">
-            <hlmassertmessage/>
+            <hlm:hlmassertmessage/>
         </au:expectfailure>
     </target>
     <target name="test-hlmAssertMessage-case-assert-name-set">
         <au:expectfailure expectedmessage="'message' attribute is not defined">
-            <hlmassertmessage assertName="test"/>
+            <hlm:hlmassertmessage assertName="test"/>
         </au:expectfailure>
     </target>
 </project>
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMEntityManager.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMEntityManager.java	Wed Jun 16 16:51:40 2010 +0300
@@ -129,7 +129,7 @@
      * @return entity manager
      */
     public EntityManager getEntityManager() {
-        log.debug("ORMEntityManager: getEntityManager: " + entityManager);
+        //log.debug("ORMEntityManager: getEntityManager: " + entityManager);
         return entityManager;
     }
 
@@ -178,11 +178,13 @@
                 entityManager = null;
             }
             if (factory != null) {
+                log.debug("closing the factory");
                 factory.close();
                 factory = null;
             }                    
             // Shutting down the derby database access, so files get unlocked. 
             try {
+                log.debug("shutting down the db");
                 DriverManager.getConnection("jdbc:derby:" + urlPath + ";shutdown=true");
             } catch (SQLException e) {
                 log.debug(e.getMessage());
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMReader.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMReader.java	Wed Jun 16 16:51:40 2010 +0300
@@ -22,7 +22,7 @@
 import org.apache.log4j.Logger;
 import java.util.List;
 import javax.persistence.Query;
-
+import javax.persistence.FlushModeType;
 /**
  * This class provides an interface to read data from the 
  * database using JPA.
@@ -36,11 +36,14 @@
     private ORMEntityManager manager;
     
     private int startPos;
+    
+    private String dbPath;
 
     /**Constructor:
      * @param dbPath - path of the database to connect to.
      */
-    public ORMReader(String dbPath) {
+    public ORMReader(String path) {
+        dbPath = path;
         ORMUtil.initializeORM(dbPath);
         manager = ORMUtil.getEntityManager(dbPath);
     }
@@ -54,28 +57,31 @@
      */
     public List executeNativeQuery(String queryString, String type) {
         int maxResults = READ_CACHE_LIMIT;
-        String queryWithSubSet = queryString + " OFFSET " + startPos +
-                " ROWS FETCH FIRST " + maxResults + " ROW ONLY";
-        Query query = null;
-        if (type != null) {
-            try {
-                query = manager.getEntityManager().createNativeQuery(queryWithSubSet,
-                        Class.forName(type));
-            } catch (ClassNotFoundException ex) {
-                log.debug("Exception during native query", ex);
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            String queryWithSubSet = queryString + " OFFSET " + startPos +
+                    " ROWS FETCH FIRST " + maxResults + " ROW ONLY";
+            Query query = null;
+            if (type != null) {
+                try {
+                    query = manager.getEntityManager().createNativeQuery(queryWithSubSet,
+                            Class.forName(type));
+                } catch (ClassNotFoundException ex) {
+                    log.debug("Exception during native query", ex);
+                }
+            } else {
+                query = manager.getEntityManager().createNativeQuery(queryWithSubSet);
             }
-        } else {
-            query = manager.getEntityManager().createNativeQuery(queryWithSubSet);
+            query.setHint("eclipselink.maintain-cache", "false");
+            List results = query.getResultList();
+            int resultsSize = results.size();
+            if (resultsSize == 0 || resultsSize < READ_CACHE_LIMIT) {
+                startPos += resultsSize;
+            } else {
+                startPos += maxResults;
+            }
+            return results;
         }
-        query.setHint("eclipselink.maintain-cache", "false");
-        List results = query.getResultList();
-        int resultsSize = results.size();
-        if (resultsSize == 0 || resultsSize < READ_CACHE_LIMIT) {
-            startPos += resultsSize;
-        } else {
-            startPos += maxResults;
-        }
-        return results;
     }
 
     /**
@@ -85,20 +91,23 @@
      * @return an Object of return type.
      */
     public Object  executeSingleResult(String queryString, String type) {
-        log.debug("executeSingleResult: " + queryString);
-        Query query = manager.getEntityManager().createQuery(queryString);
-        query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
-        query.setHint("eclipselink.maintain-cache", "false");
-        query.setHint("eclipselink.read-only", "true");
-        Object obj = null;
-        try {
-            obj = query.getSingleResult();
-        } catch (javax.persistence.NoResultException nex) {
-            log.debug("no results:", nex);
-        } catch (javax.persistence.NonUniqueResultException nux) {
-            log.debug("more than one result returned:", nux);
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            Query query = manager.getEntityManager().createQuery(queryString);
+            query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
+            query.setHint("eclipselink.maintain-cache", "false");
+            query.setHint("eclipselink.read-only", "true");
+            query.setFlushMode(FlushModeType.COMMIT);
+            Object obj = null;
+            try {
+                obj = query.getSingleResult();
+            } catch (javax.persistence.NoResultException nex) {
+                log.debug("no results:", nex);
+            } catch (javax.persistence.NonUniqueResultException nux) {
+                log.debug("more than one result returned:", nux);
+            }
+            return obj;
         }
-        return obj;
     }
 
     /**
@@ -106,22 +115,29 @@
      * @param queryString - jpa query string
      * @return List of objects read from database.
      */
-    public List executeQuery (String queryString) {
-        int maxResults = READ_CACHE_LIMIT;
-        Query query = manager.getEntityManager().createQuery(queryString);
-        query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
-        query.setHint("eclipselink.maintain-cache", "false");
-        query.setHint("eclipselink.read-only", "true");
-        query.setFirstResult(startPos);
-        query.setMaxResults(maxResults);
-        List results = (List) query.getResultList();
-        int resultsSize = results.size();
-        log.debug("result size: " + resultsSize);
-        if (results.size() == 0 || resultsSize < READ_CACHE_LIMIT) {
-            startPos += resultsSize;
-        } else {
-            startPos += maxResults;
+    public List executeQuery(String queryString) {
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            int maxResults = READ_CACHE_LIMIT;
+            Query query = manager.getEntityManager().createQuery(queryString);
+            query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
+            query.setHint("eclipselink.maintain-cache", "false");
+            query.setHint("eclipselink.read-only", "true");
+            query.setFirstResult(startPos);
+            query.setMaxResults(maxResults);
+            List results = (List) query.getResultList();
+            int resultsSize = results.size();
+            log.debug("result size: " + resultsSize);
+            if (results.size() == 0 || resultsSize < READ_CACHE_LIMIT) {
+                startPos += resultsSize;
+            } else {
+                startPos += maxResults;
+            }
+            return results;
         }
-        return results;
+    }
+    
+    public void close() {
+        ORMUtil.finalizeORM(dbPath);
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMUtil.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMUtil.java	Wed Jun 16 16:51:40 2010 +0300
@@ -38,6 +38,10 @@
     private static HashMap<String, ORMEntityManager> emMap = 
         new HashMap<String, ORMEntityManager>();
 
+    private static HashMap<String, Integer> emMapCount = 
+        new HashMap<String, Integer>();
+
+    private static Object mutexObject = new Object();
     private ORMUtil() {
     }
     
@@ -50,13 +54,22 @@
         log.debug("initializeORM: urlpath: " + urlPath);
         if (manager == null) {
             try {
+                log.debug("initializing for the first time");
                 manager = new ORMEntityManager(urlPath);
                 emMap.put(urlPath, manager);
+                Integer countObj = new Integer(1);
+                emMapCount.put(urlPath, countObj);
                 log.debug("initializeORM: manager: " + manager);
                 log.debug("initializeORM: manager: " + manager.getEntityManager());
             } catch ( IOException ex ) {
                 throw new BuildException("Entity Manager creation failure");
             }
+        } else {
+            Integer countObj = emMapCount.get(urlPath);
+            log.debug("object exists and incrementing the value");
+            countObj = new Integer(countObj.intValue() + 1);
+            log.debug("object exists count value: " + countObj.intValue());
+            emMapCount.put(urlPath, countObj);
         }
     }
 
@@ -64,7 +77,7 @@
      * Helper Function to return the entity manager.
      * @return entity manager created during initialization.
      */
-    public static ORMEntityManager getEntityManager(String urlPath) {
+    public static synchronized ORMEntityManager getEntityManager(String urlPath) {
         log.debug("getEntityManager: urlpath: " + urlPath);
         ORMEntityManager manager = emMap.get(urlPath);
         if (manager != null) {
@@ -80,14 +93,30 @@
     /**
      * Finalize the entity manager and release all the objects.
      */
-    public static void finalizeORM(String urlPath) {
+    public static synchronized void finalizeORM(String urlPath) {
         ORMEntityManager manager = emMap.get(urlPath);
         log.debug("finalizeORM: urlpath: " + urlPath);
         if (manager != null) {
-            manager.finalizeEntityManager();
-            manager = null;
-            log.debug("finalizeORM: manager" + manager);
-            emMap.remove(urlPath);
+            Integer countObj = emMapCount.get(urlPath);
+            if (countObj != null) {
+                int count = countObj.intValue();
+                count = count - 1;
+                if (count > 0) {
+                    countObj = new Integer(count);
+                    log.debug("countOBj value: " + countObj.intValue());
+                    emMapCount.put(urlPath, countObj);
+                } else {
+                    manager.finalizeEntityManager();
+                    manager = null;
+                    log.debug("finalizeORM: manager" + manager);
+                    emMap.remove(urlPath);
+                    emMapCount.remove(urlPath);
+                }
+            }
         }
     }
+    
+    public static Object getMutexObject() {
+        return mutexObject;
+    }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java	Wed Jun 16 16:51:40 2010 +0300
@@ -35,6 +35,7 @@
 import javax.persistence.Query;
 import javax.persistence.CascadeType;
 import com.nokia.helium.jpa.ORMCommitCount;
+import com.nokia.helium.jpa.ORMUtil;
 import com.nokia.helium.jpa.ORMEntityManager;
 
 /**
@@ -236,9 +237,10 @@
     private void loadFromDB(String path) {
         LogFile logFile = null;
         logFiles = new Hashtable<String, LogFile>();
+        Query query = manager.getEntityManager().createQuery("SELECT l FROM LogFile l");
+        query.setFlushMode(FlushModeType.COMMIT);
         List<LogFile> logFilesList =
-            (List<LogFile>) manager.getEntityManager().createQuery(
-                "SELECT l FROM LogFile l").getResultList();
+            (List<LogFile>) query.getResultList();
         for (LogFile file : logFilesList) {
             log.debug("getting logfile from db: " + file.getPath());
             logFiles.put(file.getPath(), file);
@@ -260,18 +262,20 @@
      * @param obj - object to be stored in the data.
      */
     private void persist(Object obj) {
-        synchronized (manager) {
-            EntityManager em = manager.getEntityManager();
-            ORMCommitCount countObject = manager.getCommitCountObject();
-            //log.debug("object: " + obj);
-            //log.debug("object: " + em);
-            em.persist(obj);
-            countObject.decreaseCount();
-            if (countObject.isCommitRequired()) {
-                countObject.reset();
-                em.getTransaction().commit();
-                em.clear();
-                em.getTransaction().begin();
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            synchronized (manager) {
+                EntityManager em = manager.getEntityManager();
+                ORMCommitCount countObject = manager.getCommitCountObject();
+                //log.debug("object: " + em);
+                em.persist(obj);
+                countObject.decreaseCount();
+                if (countObject.isCommitRequired()) {
+                    countObject.reset();
+                    em.getTransaction().commit();
+                    em.clear();
+                    em.getTransaction().begin();
+                }
             }
         }
     }
@@ -315,11 +319,13 @@
      * Internal function to cache the logpath for performance.
      */
     private void initializeLogPath() {
-        EntityManager em = manager.getEntityManager();
-        Query q = em.createQuery("select m from LogFile m");
+        EntityManager entityManager = manager.getEntityManager();
+        Query query = entityManager.createQuery("select m from LogFile m");
+        query.setFlushMode(FlushModeType.COMMIT);
+        
         name = "metadata";
-        if (q.getResultList().size() == 0) {
-            log.debug("query result: size" + q.getResultList().size());
+        if (query.getResultList().size() == 0) {
+            log.debug("query result: size" + query.getResultList().size());
             populatePriorities();
             populateDB(logPath);
         } else {
@@ -474,7 +480,7 @@
     private void addMetadata(String priority, Component component,
             int lineNo, String logText) {
         MetadataEntry entry = new MetadataEntry();
-        log.debug("logfile : " + component.getLogFile().getPath());
+        log.debug("logfile: " + component.getLogFile().getPath());
         entry.setLogFile(component.getLogFile());
         entry.setComponent(component);
         entry.setLineNumber(lineNo);
@@ -489,7 +495,6 @@
      * priority.
      */
     public final void removeEntries() {
-        EntityManager em = manager.getEntityManager();
         LogFile file = (LogFile)executeSingleQuery("select l from LogFile l where l.path like '%" + logPath + "'");
         if ( file != null ) {
             log.debug("removing entries for : " + file.getPath());
@@ -510,19 +515,22 @@
      * @return object - record from the executed query.
      */
     private Object executeSingleQuery (String queryString) {
-        EntityManager em = manager.getEntityManager();
-        Query query = em.createQuery(queryString);
-        query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
-        query.setHint("eclipselink.maintain-cache", "false");
-        query.setHint("eclipselink.read-only", "true");
-        query.setFlushMode(FlushModeType.COMMIT);
+        Object mutexObject = ORMUtil.getMutexObject();
         Object obj = null;
-        try {
-            obj = query.getSingleResult();
-        } catch (javax.persistence.NoResultException nex) {
-            log.debug("no results for query: " + queryString, nex);
-        } catch (javax.persistence.NonUniqueResultException nux) {
-            log.debug("more than one result returned by query: " + queryString, nux);
+        synchronized (mutexObject) {
+            EntityManager em = manager.getEntityManager();
+            Query query = em.createQuery(queryString);
+            query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
+            query.setHint("eclipselink.maintain-cache", "false");
+            query.setHint("eclipselink.read-only", "true");
+            query.setFlushMode(FlushModeType.COMMIT);
+            try {
+                obj = query.getSingleResult();
+            } catch (javax.persistence.NoResultException nex) {
+                log.debug("no results for query: " + queryString, nex);
+            } catch (javax.persistence.NonUniqueResultException nux) {
+                log.debug("more than one result returned by query: " + queryString, nux);
+            }
         }
         return obj;
     }
@@ -532,19 +540,22 @@
      * @param queryString - query string for whcih the result to be obtained.
      */
     private void removeEntries(String queryString) {
-        EntityManager em = manager.getEntityManager();
-        Query query = em.createNativeQuery(queryString);
-        query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
-        query.setHint("eclipselink.maintain-cache", "false");
-        query.setFlushMode(FlushModeType.COMMIT);
-        try {
-            int deletedRecords = query.executeUpdate();
-            log.debug("total records deleted " + deletedRecords 
-                    + "for query:" + queryString);
-        } catch (javax.persistence.NoResultException nex) {
-            log.debug("no results:", nex);
-        } catch (javax.persistence.NonUniqueResultException nux) {
-            log.debug("more than one result returned:", nux);
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            EntityManager em = manager.getEntityManager();
+            Query query = em.createNativeQuery(queryString);
+            query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
+            query.setHint("eclipselink.maintain-cache", "false");
+            query.setFlushMode(FlushModeType.COMMIT);
+            try {
+                int deletedRecords = query.executeUpdate();
+                log.debug("total records deleted " + deletedRecords 
+                        + "for query:" + queryString);
+            } catch (javax.persistence.NoResultException nex) {
+                log.debug("no results:", nex);
+            } catch (javax.persistence.NonUniqueResultException nux) {
+                log.debug("more than one result returned:", nux);
+            }
         }
     }
 
@@ -567,7 +578,7 @@
         
         private float elapsedTime;
         
-        private String priroityText;
+        private String priorityText;
         
         private WhatEntry whatEntry;
 
@@ -604,7 +615,7 @@
                 int lineNumber, float time, WhatEntry entry) {
             PriorityEnum prty = null;
             String prtyText = priorityTxt.trim().toLowerCase();
-            priroityText =  prtyText;
+            priorityText =  prtyText;
             if (prtyText.equals("error")) {
                 prty = PriorityEnum.ERROR;
             } else if (prtyText.equals("warning")) {
@@ -622,7 +633,7 @@
             } else {
                 log.debug("Error: priority " + prtyText + " is not acceptable by metadata and set to Error");
                 prty = PriorityEnum.ERROR;
-                priroityText =  "error";
+                priorityText =  "error";
                 //throw new Exception("priority should not be null");
             }
 
@@ -647,7 +658,6 @@
         {
             return logPath;
         }
-
         
         public int getLineNumber()
         {
@@ -670,7 +680,7 @@
         }
 
         public String getPriorityText() {
-            return priroityText;
+            return priorityText;
         }
         
         public float getElapsedTime() {
@@ -696,6 +706,10 @@
             return whatEntry;
         }
         
+        public String toString() {
+            return "file:" + logPath + "[" + lineNumber + "], component:" + component + ", priority:" +
+                   priorityText + " \n" + text;
+        }
     }
 
     /** Levels of log entry types. */
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/MetadataUtil.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/MetadataUtil.java	Wed Jun 16 16:51:40 2010 +0300
@@ -69,9 +69,11 @@
      * Finalize the orm, calls ORMUtil finalize function to close
      * entity manager.
      */
-    public static void finalizeMetadata(String logPath) {
+    public static void finalizeMetadata(String urlPath, String logPath) {
         synchronized (mutexObject) {
-            log.debug("finalizing metadata");
+            ORMEntityManager manager = ORMUtil.getEntityManager(urlPath);
+            manager.commitToDB();
+            log.debug("finalizing metadata: " + logPath);
             metadataMap.remove(logPath);
         }
     }
@@ -106,7 +108,7 @@
         synchronized (mutexObject) {
             metadata = getMetadata(logPath, urlPath);
             metadata.removeEntries();
-            finalizeMetadata(logPath);
+            finalizeMetadata(urlPath, logPath);
         }
     }
 
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Antlib.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Antlib.java	Wed Jun 16 16:51:40 2010 +0300
@@ -143,9 +143,9 @@
      * any tasks that derive from Definer.
      */
     public final void execute() {
-        for (Task t : tasks) {
-            if (t instanceof UnknownElement) {
-                UnknownElement ue = (UnknownElement)t;
+        for (Task task : tasks) {
+            if (task instanceof UnknownElement) {
+                UnknownElement ue = (UnknownElement)task;
                 setLocation(ue.getLocation());
                 ue.maybeConfigure();
                 Object configuredObject = ue.getRealThing();
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java	Wed Jun 16 16:51:40 2010 +0300
@@ -67,8 +67,8 @@
         if (!output.isEmpty())
         {
             log("*** Configuration report ***", Project.MSG_INFO);
-            for (String x : output)
-                log(x, Project.MSG_INFO);
+            for (String outputStr : output)
+                log(outputStr, Project.MSG_INFO);
         }
     }
     
@@ -94,11 +94,11 @@
         sorted = project.topoSort(targetNames[0], targets);
 
         // Find the desiredTarget Target object
-        for (Target t : sorted)
+        for (Target target : sorted)
         {
-            if (t.getName().equals(desiredTarget))
+            if (target.getName().equals(desiredTarget))
             {
-                return t;
+                return target;
             }
         }
         throw new BuildException("Could not find target matching " + desiredTarget + "\n");
@@ -114,49 +114,49 @@
         String location = target.getLocation().getFileName();
         
         try {
-        String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
-        String targetpath = new File(location).getCanonicalPath();
-        
-        if (!targetpath.contains(heliumpath))
-        {   
-            ArrayList<String> antcallTargets = new ArrayList<String>();
-            Visitor visitorTarget = new AntTargetVisitor(antcallTargets, project);
+            String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
+            String targetpath = new File(location).getCanonicalPath();
             
-            Element element = findTargetElement(target, project);
-            if (element != null)
-                element.accept(visitorTarget);
-            for (String depTargetString : antcallTargets)
+            if (!targetpath.contains(heliumpath))
+            {   
+                ArrayList<String> antcallTargets = new ArrayList<String>();
+                Visitor visitorTarget = new AntTargetVisitor(antcallTargets, project);
+                
+                Element element = findTargetElement(target, project);
+                if (element != null)
+                    element.accept(visitorTarget);
+                for (String depTargetString : antcallTargets)
+                {
+                    String[] array = { depTargetString };
+                    try {
+                    Target depTarget = findTarget(depTargetString, project, array);
+                    targetCallsHeliumTarget(depTarget, project);
+                    } catch (BuildException x) { 
+                        // We are Ignoring the errors as no need to fail the build.
+                        log("Exception occured while target defined outside helium are calling a private Helium target " + x.toString(), Project.MSG_DEBUG);
+                        x = null;
+                        }
+                }
+                
+              
+                for (Enumeration<String> depsEnum = target.getDependencies(); depsEnum.hasMoreElements();)
+                {
+                    String depTargetString = depsEnum.nextElement();
+                    String[] array = { depTargetString };
+                    try {
+                    Target depTarget = findTarget(depTargetString, project, array);
+                    targetCallsHeliumTarget(depTarget, project);
+                    } catch (BuildException x) {
+                        //We are Ignoring the errors as no need to fail the build.
+                        log("Exception occured while target defined outside helium are calling a private Helium target " + x.toString(), Project.MSG_DEBUG);
+                        x = null;
+                        }
+                }
+            }
+            else
             {
-                String[] array = { depTargetString };
-                try {
-                Target depTarget = findTarget(depTargetString, project, array);
-                targetCallsHeliumTarget(depTarget, project);
-                } catch (BuildException x) { 
-                    // We are Ignoring the errors as no need to fail the build.
-                    log("Exception occured while target defined outside helium are calling a private Helium target " + x.toString(), Project.MSG_DEBUG);
-                    x = null;
-                    }
+                checkIfTargetPrivate(target, project);
             }
-            
-          
-            for (Enumeration<String> e = target.getDependencies(); e.hasMoreElements();)
-            {
-                String depTargetString = e.nextElement();
-                String[] array = { depTargetString };
-                try {
-                Target depTarget = findTarget(depTargetString, project, array);
-                targetCallsHeliumTarget(depTarget, project);
-                } catch (BuildException x) {
-                    //We are Ignoring the errors as no need to fail the build.
-                    log("Exception occured while target defined outside helium are calling a private Helium target " + x.toString(), Project.MSG_DEBUG);
-                    x = null;
-                    }
-            }
-        }
-        else
-        {
-            checkIfTargetPrivate(target, project);
-        }
 
         } catch (IOException e) {
             //We are Ignoring the errors as no need to fail the build.
@@ -218,11 +218,11 @@
         String projectName = antDoc.valueOf("/project/@name");
         for (Iterator<Element> iterator = antDoc.selectNodes("//target").iterator(); iterator.hasNext();)
         {
-            Element e = iterator.next();
+            Element element = iterator.next();
 
-            String targetName = e.attributeValue("name");
+            String targetName = element.attributeValue("name");
             if (targetName.equals(target.getName()) || (projectName + "." + targetName).equals(target.getName()))
-                return e;
+                return element;
         }
         return null;
     }
@@ -281,11 +281,11 @@
             com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(project, "private");
             ArrayList<String> customerProps = getCustomerProperties(project);
                             
-            for (PropertyMeta x : db.getProperties())
+            for (PropertyMeta propertyMeta : db.getProperties())
             {
-                if (x.getLocation().contains(heliumpath) && x.getScope().equals("private") && customerProps.contains(x.getName()))
+                if (propertyMeta.getLocation().contains(heliumpath) && propertyMeta.getScope().equals("private") && customerProps.contains(propertyMeta.getName()))
                 {
-                    output.add("Warning: " +  x.getName() + " property has been overridden");
+                    output.add("Warning: " +  propertyMeta.getName() + " property has been overridden");
                 }
             }
         } catch (IOException e) { e.printStackTrace(); }
@@ -299,9 +299,9 @@
         try {
             String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
 
-            for (Object o : db.getAntFiles(project))
+            for (Object object : db.getAntFiles(project))
             {
-                String antFile = (String)o;
+                String antFile = (String)object;
                 antFile = new File(antFile).getCanonicalPath();
 
                 if (!antFile.contains(heliumpath))
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Database.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Database.java	Wed Jun 16 16:51:40 2010 +0300
@@ -105,12 +105,12 @@
 
     public void setRefid(Reference r)
     {
-        Object o = r.getReferencedObject();
-        if (!(o instanceof ResourceCollection))
+        Object object = r.getReferencedObject();
+        if (!(object instanceof ResourceCollection))
         {
             throw new BuildException(r.getRefId() + " doesn\'t denote a ResourceCollection");
         }
-        rc = (ResourceCollection) o;
+        rc = (ResourceCollection) object;
     }
 
     public Document createDOM() throws DocumentException, IOException {
@@ -337,10 +337,10 @@
                 Iterator extraFilesIter = rc.iterator();
                 while (extraFilesIter.hasNext())
                 {
-                    FileResource f = (FileResource) extraFilesIter.next();
-                    String extrafile = f.getFile().getCanonicalPath();
+                    FileResource fileResource = (FileResource) extraFilesIter.next();
+                    String extrafile = fileResource.getFile().getCanonicalPath();
 
-                    if (!antFiles.contains(f.toString()) && !f.getFile().getName().startsWith("test_"))
+                    if (!antFiles.contains(fileResource.toString()) && !fileResource.getFile().getName().startsWith("test_"))
                     {
                         if (homeOnly)
                         {
@@ -742,11 +742,11 @@
      * @param allTaskdefs
      * @param criteria
      */
-    private HashMap < String, String > filterTasks ( Hashtable<String, Class<?> > allTaskdefs ) {
+    private HashMap < String, String > filterTasks( Hashtable<String, Class<?> > allTaskdefs ) {
         HashMap <String, String> tasks = new HashMap <String, String>();
 
         Enumeration <String> taskdefsenum = allTaskdefs.keys();
-        while ( taskdefsenum.hasMoreElements () ) {
+        while ( taskdefsenum.hasMoreElements() ) {
             String key = taskdefsenum.nextElement();
             Class<?> clazz = allTaskdefs.get(key);
             String className = clazz.getName();
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/HeliumLogger.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/HeliumLogger.java	Wed Jun 16 16:51:40 2010 +0300
@@ -131,9 +131,9 @@
     private void cleanup() {
         String loggingoutputfile = project.getProperty("logging.output.file");
         if (loggingoutputfile != null) {
-            File f = new File(loggingoutputfile);
-            if (f.exists()) {
-                f.delete();
+            File file = new File(loggingoutputfile);
+            if (file.exists()) {
+                file.delete();
             }
         }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/Signal.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,45 @@
+/*
+* 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.ant;
+
+/**
+ * This class stores a signal while being deferred. 
+ *
+ */
+public class Signal {
+
+    private String name;
+    private String message;
+
+    public String getMessage() {
+        return message;
+    }
+    
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getName() {
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/XmlLogger.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/XmlLogger.java	Wed Jun 16 16:51:40 2010 +0300
@@ -159,8 +159,8 @@
                     event.getException().toString());
             // print the stacktrace in the build file it is always useful...
             // better have too much info than not enough.
-            Throwable t = event.getException();
-            Text errText = doc.createCDATASection(StringUtils.getStackTrace(t));
+            Throwable exception = event.getException();
+            Text errText = doc.createCDATASection(StringUtils.getStackTrace(exception));
             Element stacktrace = doc.createElement(STACKTRACE_TAG);
             stacktrace.appendChild(errText);
             buildElement.element.appendChild(stacktrace);
@@ -279,8 +279,8 @@
             return element;
         }
 
-        for (Enumeration e = tasks.keys(); e.hasMoreElements();) {
-            Task key = (Task) e.nextElement();
+        for (Enumeration taskEnum = tasks.keys(); taskEnum.hasMoreElements();) {
+            Task key = (Task) taskEnum.nextElement();
             if (key instanceof UnknownElement) {
                 if (((UnknownElement) key).getTask() == task) {
                     return (TimedElement) tasks.get(key);
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,19 +23,12 @@
 <antlib>
    
     <taskdef name="antdependency" classname="com.nokia.ant.taskdefs.AntDependencyTask"/>
-    <taskdef name="ccm" classname="com.nokia.ant.taskdefs.CcmTask" onerror="report"/>
     <taskdef name="configuration" classname="com.nokia.ant.taskdefs.AntConfigurationTask"/>
     <taskdef name="coveragerecord" classname="com.nokia.ant.taskdefs.CoverageRecorderTask"/>
-    <taskdef name="deconfigure" classname="com.nokia.ant.taskdefs.DeconfigureTask"/>
     <taskdef name="fastcopy" classname="com.nokia.ant.taskdefs.CopyParallelTask"/>
-    <taskdef name="logtoconsole" classname="com.nokia.ant.taskdefs.StopLogToConsole"/>
+    <taskdef name="logtoconsole" classname="com.nokia.ant.taskdefs.StopLogToConsoleTask"/>
     <taskdef name="parsemodel" classname="com.nokia.ant.taskdefs.ModelPropertiesTask"/>
     
-    <taskdef name="rebaseline" classname="com.nokia.ant.taskdefs.RebaselineTask"/>
-    <taskdef name="rebaseanddeconf" classname="com.nokia.ant.taskdefs.RBTTask"/>
-            
-    <typedef name="session" classname="com.nokia.ant.types.ccm.Session"/> 
-    <typedef name="sessionset" classname="com.nokia.ant.types.ccm.SessionSet"/> 
     <typedef name="typedef" classname="com.nokia.ant.TypedefURIFix"/>
     
     <typedef name="hasAtsPassed" classname="com.nokia.ant.conditions.AtsCondition"/>
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/conditions/AtsCondition.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/conditions/AtsCondition.java	Wed Jun 16 16:51:40 2010 +0300
@@ -73,16 +73,16 @@
                 for (Iterator iterator = antDoc.selectNodes("//test/failed").iterator(); iterator.hasNext();)
                 {
                     testsfound = true;
-                    Element e = (Element) iterator.next();
-                    String failed = e.getText();
+                    Element element = (Element) iterator.next();
+                    String failed = element.getText();
                     if (!failed.equals("0"))
                     {
                         log.error("ATS tests failed");
                         
                         for (Iterator iterator2 = antDoc.selectNodes("//actual_result").iterator(); iterator2.hasNext();)
                         {
-                            Element e2 = (Element) iterator2.next();
-                            log.error(e2.getText());
+                            Element resultElement = (Element) iterator2.next();
+                            log.error(resultElement.getText());
                         }
                         return false;
                     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/listener/CoverageRecorderEntry.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,451 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+/* Portion Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. */
+
+package com.nokia.ant.listener;
+
+import java.io.*;
+import org.apache.tools.ant.util.DOMElementWriter;
+import org.apache.tools.ant.util.DateUtils;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.apache.tools.ant.*;
+import java.util.*;
+import javax.xml.parsers.ParserConfigurationException;
+
+/**
+ * This is a class that represents a XML recorder. This is the listener to the
+ * build process.
+ *
+ */
+public class CoverageRecorderEntry implements BuildLogger, SubBuildListener {
+
+    //////////////////////////////////////////////////////////////////////
+    // ATTRIBUTES
+    
+    /** XML element name for a build. */
+    private static final String BUILD_TAG = "build";
+    /** XML element name for a target. */
+    private static final String TARGET_TAG = "target";
+    /** XML element name for a task. */
+    private static final String TASK_TAG = "task";
+    /** XML attribute name for a name. */
+    private static final String NAME_ATTR = "name";
+    /** XML attribute name for a time. */
+    private static final String TIME_ATTR = "time";
+    /** XML attribute name for a file location. */
+    private static final String LOCATION_ATTR = "location";
+    
+    /** DocumentBuilder to use when creating the document to start with. */
+    private static DocumentBuilder builder = getDocumentBuilder();
+    
+    private String recordTaskName;
+    
+    /** The name of the file associated with this recorder entry.  */
+    private String filename;
+    /** The state of the recorder (recorder on or off).  */
+    private boolean record = true;
+    /** The current verbosity level to record at.  */
+    private int loglevel = Project.MSG_INFO;
+    /** The output PrintStream to record to.  */
+    private PrintStream outStream;
+    /** The start time of the last know target.  */
+    private long targetStartTime;
+    /** project instance the recorder is associated with */
+    private Project project;
+
+    /** The complete log document for this build. */
+    private Document doc = builder.newDocument();
+    /** Mapping for when tasks started (Task to TimedElement). */
+    private Hashtable<Task, TimedElement> tasks = new Hashtable<Task, TimedElement>();
+    /** Mapping for when targets started (Task to TimedElement). */
+    private Hashtable<Target, TimedElement> targets = new Hashtable<Target, TimedElement>();
+    /**
+     * Mapping of threads to stacks of elements
+     * (Thread to Stack of TimedElement).
+     */
+    private Hashtable<Thread, Stack<TimedElement>> threadStacks = new Hashtable<Thread, Stack<TimedElement>>();
+    /**
+     * When the build started.
+     */
+    private TimedElement buildElement;
+    
+    //////////////////////////////////////////////////////////////////////
+    // CONSTRUCTORS / INITIALIZERS
+
+    /**
+     * @param name The name of this recorder (used as the filename).
+     */
+    public CoverageRecorderEntry(String name, String recordTaskName) {
+        filename = name;
+        this.recordTaskName = recordTaskName;
+        startBuild();
+    }
+    
+    /**
+     * Returns a default DocumentBuilder instance or throws an
+     * ExceptionInInitializerError if it can't be created.
+     *
+     * @return a default DocumentBuilder instance.
+     */
+    protected static DocumentBuilder getDocumentBuilder() {
+        try {
+            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        } catch (ParserConfigurationException exc) {
+            throw new ExceptionInInitializerError(exc.getMessage());
+        }
+    }
+    
+    /** Utility class representing the time an element started. */
+    protected static class TimedElement {
+        /**
+         * Start time in milliseconds
+         * (as returned by <code>System.currentTimeMillis()</code>).
+         */
+        private long startTime;
+        /** Element created at the start time. */
+        private Element element;
+        public String toString() {
+            return element.getTagName() + ":" + element.getAttribute("name");
+        }
+    }
+    
+    /**
+     * Returns the stack of timed elements for the current thread.
+     * @return the stack of timed elements for the current thread
+     */
+    protected Stack<TimedElement> getStack() {
+        Stack<TimedElement> threadStack = threadStacks.get(Thread.currentThread());
+        if (threadStack == null) {
+            threadStack = new Stack<TimedElement>();
+            threadStacks.put(Thread.currentThread(), threadStack);
+        }
+        /* For debugging purposes uncomment:
+        org.w3c.dom.Comment s = doc.createComment("stack=" + threadStack);
+        buildElement.element.appendChild(s);
+         */
+        return threadStack;
+    }
+    
+    //////////////////////////////////////////////////////////////////////
+    // ACCESSOR METHODS
+
+    /**
+     * @return the name of the file the output is sent to.
+     */
+    public String getFilename() {
+        return filename;
+    }
+
+    /**
+     * Turns off or on this recorder.
+     *
+     * @param state true for on, false for off, null for no change.
+     */
+    public void setRecordState(Boolean state) {
+        if (state != null) {
+            record = state.booleanValue();
+        }
+    }
+
+    /**
+     * @see org.apache.tools.ant.BuildListener#buildStarted(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void buildStarted(BuildEvent event) {
+        
+    }
+
+    /**
+     * @see org.apache.tools.ant.BuildListener#buildFinished(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void buildFinished(BuildEvent event) {
+        cleanup();
+    }
+
+    /**
+     * Cleans up any resources held by this recorder entry at the end
+     * of a subbuild if it has been created for the subbuild's project
+     * instance.
+     *
+     * @param event the buildFinished event
+     *
+     * @since Ant 1.6.2
+     */
+    public void subBuildFinished(BuildEvent event) {
+        if (event.getProject() == project) {
+            cleanup();
+        }
+    }
+
+    /**
+     * Empty implementation to satisfy the BuildListener interface.
+     *
+     * @param event the buildStarted event
+     *
+     * @since Ant 1.6.2
+     */
+    public void subBuildStarted(BuildEvent event) {
+    }
+
+    /**
+     * @see org.apache.tools.ant.BuildListener#targetStarted(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void targetStarted(BuildEvent event) {
+        Target target = event.getTarget();
+        TimedElement targetElement = new TimedElement();
+        targetElement.startTime = System.currentTimeMillis();
+        targetElement.element = doc.createElement(TARGET_TAG);
+        targetElement.element.setAttribute(NAME_ATTR, target.getName());
+        targets.put(target, targetElement);
+        getStack().push(targetElement);
+    }
+
+    /**
+     * @see org.apache.tools.ant.BuildListener#targetFinished(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void targetFinished(BuildEvent event) {
+        Target target = event.getTarget();
+        TimedElement targetElement = (TimedElement) targets.get(target);
+        if (targetElement != null) {
+            long totalTime
+                    = System.currentTimeMillis() - targetElement.startTime;
+            targetElement.element.setAttribute(TIME_ATTR,
+                    DateUtils.formatElapsedTime(totalTime));
+
+            TimedElement parentElement = null;
+            Stack<TimedElement> threadStack = getStack();
+            if (!threadStack.empty()) {
+                threadStack.pop();
+//                if (poppedStack != targetElement) {
+//                    throw new RuntimeException("Mismatch - popped element = "
+//                            + poppedStack
+//                            + " finished target element = "
+//                            + targetElement);
+//                }
+                if (!threadStack.empty()) {
+                    parentElement = threadStack.peek();
+                }
+            }
+            if (parentElement == null) {
+                buildElement.element.appendChild(targetElement.element);
+            } else {
+                parentElement.element.appendChild(targetElement.element);
+            }
+        }
+        targets.remove(target);
+    }
+
+    /**
+     * @see org.apache.tools.ant.BuildListener#taskStarted(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void taskStarted(BuildEvent event) {
+        TimedElement taskElement = new TimedElement();
+        taskElement.startTime = System.currentTimeMillis();
+        taskElement.element = doc.createElement(TASK_TAG);
+
+        Task task = event.getTask();
+        String name = event.getTask().getTaskName();
+        if (name == null) {
+            name = "";
+        }
+        taskElement.element.setAttribute(NAME_ATTR, name);
+        taskElement.element.setAttribute(LOCATION_ATTR,
+                event.getTask().getLocation().toString());
+        tasks.put(task, taskElement);
+        getStack().push(taskElement);
+    }
+
+    /**
+     * @see org.apache.tools.ant.BuildListener#taskFinished(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void taskFinished(BuildEvent event) {
+        
+//        if (event.getTask().getTaskName() != recordTaskName) {
+        Task task = event.getTask();
+        TimedElement taskElement = tasks.get(task);
+        if (taskElement != null) {
+            long totalTime = System.currentTimeMillis() - taskElement.startTime;
+            taskElement.element.setAttribute(TIME_ATTR,
+                    DateUtils.formatElapsedTime(totalTime));
+            Target target = task.getOwningTarget();
+            TimedElement targetElement = null;
+            if (target != null) {
+                targetElement = (TimedElement) targets.get(target);
+            }
+            if (targetElement == null) {
+                buildElement.element.appendChild(taskElement.element);
+            } else {
+                targetElement.element.appendChild(taskElement.element);
+            }
+            Stack<TimedElement> threadStack = getStack();
+            if (!threadStack.empty()) {
+                threadStack.pop();
+//                    if (poppedStack != taskElement) {
+//                        throw new RuntimeException("Mismatch - popped element = "
+//                                + poppedStack + " finished task element = "
+//                                + taskElement);
+//                    }
+            }
+            tasks.remove(task);
+//            } else {
+//                throw new RuntimeException("Unknown task " + task + " not in " + tasks);
+//            }
+        }
+    }
+    
+    /**
+     * Get the TimedElement associated with a task.
+     *
+     * Where the task is not found directly, search for unknown elements which
+     * may be hiding the real task
+     */
+    protected TimedElement getTaskElement(Task task) {
+        TimedElement element = (TimedElement) tasks.get(task);
+        if (element != null) {
+            return element;
+        }
+
+        for (Task key : tasks.keySet()) {
+            if (key instanceof UnknownElement) {
+                if (((UnknownElement) key).getTask() == task) {
+                    return tasks.get(key);
+                }
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * @see org.apache.tools.ant.BuildListener#messageLogged(BuildEvent)
+     */
+    /** {@inheritDoc}. */
+    public void messageLogged(BuildEvent event) {
+        
+    }
+
+    /**
+     * @see BuildLogger#setMessageOutputLevel(int)
+     */
+    /** {@inheritDoc}. */
+    public void setMessageOutputLevel(int level) {
+        if (level >= Project.MSG_ERR && level <= Project.MSG_DEBUG) {
+            loglevel = level;
+        }
+    }
+
+    /**
+     * @see BuildLogger#setOutputPrintStream(PrintStream)
+     */
+    /** {@inheritDoc}. */
+    public void setOutputPrintStream(PrintStream output) {
+        outStream = output;
+    }
+
+
+    /**
+     * @see BuildLogger#setErrorPrintStream(PrintStream)
+     */
+    /** {@inheritDoc}. */
+    public void setErrorPrintStream(PrintStream err) {
+        setOutputPrintStream(err);
+    }
+
+    /**
+     * Set the project associated with this recorder entry.
+     *
+     * @param project the project instance
+     *
+     * @since 1.6.2
+     */
+    public void setProject(Project project) {
+        this.project = project;
+        if (project != null) {
+            project.addBuildListener(this);
+        }
+    }
+    
+    /**
+     * @since 1.6.2
+     */
+    public void cleanup() {
+        closeFile();
+        if (project != null) {
+            project.removeBuildListener(this);
+        }
+        project = null;
+    }
+    
+    /**
+     * Closes the file associated with this recorder.
+     * Used by Recorder.
+     * @since 1.6.3
+     */
+    void closeFile() {
+        finishBuild();
+        Writer out = null;
+        try {
+            // specify output in UTF8 otherwise accented characters will blow
+            // up everything
+            OutputStream stream = outStream;
+            if (stream == null) {
+                stream = new FileOutputStream(filename);
+            }
+            out = new OutputStreamWriter(stream, "UTF8");
+            out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+            (new DOMElementWriter()).write(buildElement.element, out, 0, "\t");
+            out.flush();
+        } catch (IOException exc) {
+            throw new BuildException("Unable to write log file " + exc.getMessage(), exc);
+        } finally {
+            if (out != null) {
+                try {
+                    out.close();
+                } catch (IOException e) {
+                    e = null; // ignore
+                }
+            }
+        }
+        buildElement = null;
+    }
+    
+    void startBuild() {
+        buildElement = new TimedElement();
+        buildElement.startTime = System.currentTimeMillis();
+        buildElement.element = doc.createElement(BUILD_TAG);
+    }
+    
+    void finishBuild() {
+        long totalTime = System.currentTimeMillis() - buildElement.startTime;
+        buildElement.element.setAttribute(TIME_ATTR,
+                DateUtils.formatElapsedTime(totalTime));
+    }
+
+    @Override
+    public void setEmacsMode(boolean emacsMode) {
+        // Not needed.
+    }
+}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AbstractScmBaseTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,446 +0,0 @@
-/*
- * 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.ant.taskdefs;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-
-/**
- * <code>AbstractScmBaseTask</code> is an abstract class for GSCM related tasks
- * such as rebaseline and deconfigure.
- * 
- * @ant.task category="SCM"
- * 
- */
-public abstract class AbstractScmBaseTask extends Task {
-
-  // common attributes
-  private String database; // -d dbname = Database name (or database path)
-  private String password; // -U password = UNIX password
-  private String ccmProject; // -p projectname = Project name (incompatible
-  // with -B)
-
-  private Integer verbosity;
-
-  private StringBuffer commandString = new StringBuffer();
-  private List<SCMCommandArgument> commands = new ArrayList<SCMCommandArgument>();
-
-  /**
-   * Return the Synergy project name.
-   * 
-   * @return the Synergy project name.
-   */
-  public String getCcmProject() {
-    return ccmProject;
-  }
-
-  /**
-   * Set Synergy Project Name to be used.
-   * 
-   * @param ccmProject
-   *            is the Synergy project name to set
-   * @ant.required
-   */
-  public void setCcmProject(String ccmProject) {
-    this.ccmProject = ccmProject;
-    log("Set ccmProject to " + ccmProject);
-  }
-
-  /**
-   * Return the database name.
-   * 
-   * @return the database name.
-   */
-  public String getDatabase() {
-    return database;
-  }
-
-  /**
-   * Set Synergy Database name to be used.
-   * 
-   * @param database
-   *            is the name of the Synergy database to set.
-   * @ant.required
-   */
-  public void setDatabase(String database) {
-    this.database = database;
-    log("Set database to " + database);
-  }
-
-  /**
-   * Return the Synergy password.
-   * 
-   * @return the Synergy password.
-   */
-  public String getPassword() {
-    return password;
-  }
-
-  /**
-   * Set Synergy Password to be used.
-   * 
-   * @param password
-   *            is the password to set.
-   * @ant.required
-   */
-  public void setPassword(String password) {
-    this.password = password;
-    log("Set password to ****** ");
-  }
-
-  /**
-   * Return the verbosity.
-   * 
-   * @return the verbosity.
-   */
-  public Integer getVerbosity() {
-    return verbosity;
-  }
-
-  /**
-   * Set verbosity level to be used. Verbosity level ( 0 - quiet, 1 - verbose,
-   * 2 - very verbose). Exception will be raised for any other value.
-   * 
-   * @param verbosity
-   *            is the verbosity level to set.
-   * @ant.not-required
-   */
-  public void setVerbosity(Integer verbosity) {
-    this.verbosity = verbosity;
-    log("Set verbosity to " + verbosity);
-  }
-
-  /**
-   * Method executes the current task.
-   * 
-   */
-  @Override
-  public void execute() {
-      // Set execution script
-      setExecutionScript();
-
-      // Build command argument list
-      buildCommandList();
-
-      // handle the command arguments
-      handleCommandArguments();
-
-      // configure verbosity
-      configureVerbosity();
-
-      // Execute the command-line launching as a separate process
-      runCommand();
-      log("Completed successfully.");
-  }
-
-  /**
-   * Method appends the given prefix and the command to the command string if
-   * the input cmd string is not null.
-   * 
-   * @param prefix
-   *            is the prefix of the cmd string input.
-   * @param cmd
-   *            is the cmd string to be appended to main command string.
-   */
-  protected void append2CommandString(String prefix, Object cmd) {
-    if (cmd != null) {
-      commandString.append(prefix);
-      commandString.append(" ");
-      commandString.append(cmd);
-      commandString.append(" ");
-    }
-  }
-
-  /**
-   * Method appends the given prefix to the command string if the boolean
-   * value input is set true.
-   * 
-   * @param prefix
-   *            is the prefix to be appended to the command string.
-   * @param bool
-   *            indicates whether to append the prefix or not.
-   */
-  protected void append2CommandString(String prefix, Boolean bool) {
-    if (bool != null && bool) {
-      append2CommandString(prefix);
-    }
-  }
-
-  /**
-   * Method appends the given cmd to the command string.
-   * 
-   * @param cmd
-   *            is the command string to be appended.
-   */
-  protected void append2CommandString(String cmd) {
-    commandString.append(cmd);
-    commandString.append(" ");
-  }
-
-  /**
-   * Method is used to throw a {@link BuildException} with the specified error
-   * message.
-   * 
-   * @param errorMessage
-   *            is the error message.
-   */
-  protected void raiseError(String errorMessage) {
-    StringBuffer buffer = new StringBuffer("[").append(getTaskName())
-        .append("] Error: ").append(errorMessage);
-    throw new BuildException(buffer.toString());
-  }
-
-  /**
-   * Add the given command argument to the command list.
-   * 
-   * @param fieldName
-   *            is the name of the task field.
-   * @param cmdArg
-   *            is the command argument to be added to the command list.
-   * @param required
-   *            indicates whether the command argument is mandatory or not.
-   * @param fieldValue is the value of the given field           
-   */
-  protected void addCommandArg(String fieldName, String cmdArg,
-      Boolean required, Object fieldValue ) {
-    SCMCommandArgument cmdObj = new SCMCommandArgument(fieldName, cmdArg,
-        required, fieldValue );
-    commands.add(cmdObj);
-  }
-
-  /**
-   * Add the given command argument to the command list. By default, the input
-   * command argument will be optional.
-   * 
-   * @param fieldName
-   *            is the name of the task field.
-   * @param cmdArg
-   *            is the command argument to be added to the command list.
-   * @param fieldValue is the value of the given field           
-   */
-  protected void addCommandArg(String fieldName, String cmdArg, Object fieldValue ) {
-    addCommandArg(fieldName, cmdArg, false, fieldValue);
-  }
-
-  /**
-   * Method validates the given arguments.
-   */
-  protected abstract void validateArguments();
-
-  /**
-   * Set the execution script.
-   * 
-   */
-  protected abstract void setExecutionScript();
-
-  /**
-   * Build a command list consisting of all the required and optional command
-   * arguments of the current task.
-   */
-  protected abstract void buildCommandList();
-
-  /**
-   * Method returns the correct verbosity level for the input choice.
-   * 
-   * @param choice
-   *            is the verbosity choice set by user.
-   * @return the verbosity level to set.
-   */
-  protected abstract String getVerbosity(int choice);
-
-  // ----------------------------------- PRIVATE METHODS  --------------------------------------
-
-  /**
-   * Method returns the requested {@link Field} object from the input
-   * {@link Class}. If the requested field is not found in the given
-   * {@link Class} then all its super classes are searched recursively.
-   * 
-   * @param clazz
-   *            is the {@link Class} of which the field is requested.
-   * @param fieldName
-   *            is the name of the requested field.
-   * @return the requested field.
-   */
-  private Field getField(Class<?> clazz, String fieldName) {
-    Field field = null;
-    if (clazz != null) {
-      try {
-        field = clazz.getDeclaredField(fieldName);
-      } catch (NoSuchFieldException nsfe) {
-        field = getField(clazz.getSuperclass(), fieldName);
-      }
-    }
-    return field;
-  }
-
-  /**
-   * Method process the command arguments set in the command list.
-   * 
-   * @throws Exception
-   *             if any error occurs while processing the command arguments.
-   */
-  private void handleCommandArguments() {
-    StringBuffer missingArgs = new StringBuffer();
-    Field field = null;
-    for (SCMCommandArgument cmdObj : commands) {
-      field = getField(getClass(), cmdObj.fieldName);
-      if (field != null) {
-        Object fieldValue = field.getType().cast( cmdObj.fieldValue );
-        check4MandatoryCmdArguments(cmdObj, fieldValue, missingArgs);
-        buildCommand(cmdObj, fieldValue);
-      }
-    }
-    // handle missing args if any
-    handleMissingArguments(missingArgs);
-    validateArguments();
-  }
-
-  /**
-   * Method checks for the mandatory command arguments.
-   * 
-   * @param cmdObj
-   *            is the {@link SCMCommandArgument} used in verification
-   * @param fieldValue
-   *            is the field value to verify
-   * @param missingArgs
-   *            contains the mandatory command arguments which are missing.
-   */
-  private void check4MandatoryCmdArguments(SCMCommandArgument cmdObj,
-      Object fieldValue, StringBuffer missingArgs) {
-    if (cmdObj.required && fieldValue == null) {
-      missingArgs.append(cmdObj.fieldName);
-      missingArgs.append(" ");
-    }
-  }
-
-  /**
-   * Method is used to construct an executable command string.
-   * 
-   * @param cmdObj
-   *            is the {@link SCMCommandArgument}
-   * @param fieldValue
-   *            is the fieldValue containing the actual command argument.
-   */
-  private void buildCommand(SCMCommandArgument cmdObj, Object fieldValue) {
-    if (fieldValue instanceof Boolean) {
-      append2CommandString(cmdObj.commandArgument, (Boolean) fieldValue);
-    } else {
-      append2CommandString(cmdObj.commandArgument, fieldValue);
-    }
-  }
-
-  /**
-   * Method throws a {@link BuildException} if any mandatory command arguments
-   * are missing.
-   * 
-   * @param missingArgs
-   *            is the {@link StringBuffer} consisting of mandatory command
-   *            arguments which are missing.
-   */
-  private void handleMissingArguments(StringBuffer missingArgs) {
-    if (missingArgs.length() > 0) {
-      raiseError("mandatory attributes are not defined - "
-          + missingArgs.toString());
-    }
-  }
-
-  /**
-   * Configure the verbosity set by the user.
-   */
-  private void configureVerbosity() {
-    if (verbosity != null) {
-      append2CommandString(getVerbosity(verbosity));
-    }
-  }
-
-  /**
-   * Execute the specified command.
-   * 
-   * @throws Exception
-   *             if execution fails or any error occurs while execution of the
-   *             command.
-   */
-  private void runCommand() {
-    String[] cmdline = commandString.toString().split(" ");
-    /*
-     * Note: static method call to Execute.runCommand doesnot run the given
-     * perl script here due to the setting of vmLauncher which acutally
-     * tries executing the script using Runtime.getRuntime().exec() method
-     * and this method cannot run the script without reference to the cmd or
-     * shell. (Similar with ExecTask)
-     * 
-     * So creating an instance of Execute class helps to disable the
-     * vmLauncher and an OS dependent shellLauncher will be available for
-     * the execution of the script.
-     */
-    Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO,
-        Project.MSG_ERR));
-    exe.setAntRun(getProject());
-    exe.setCommandline(cmdline);
-    exe.setVMLauncher(false);
-    try {
-        int retval = exe.execute();
-        if (Execute.isFailure(retval)) {
-            raiseError("Script execution failure.");
-        }
-    } catch (IOException th) {
-        th.printStackTrace();
-        raiseError("Script execution failure.");
-      }
-  }
-
-  // ************************************* PRIVATE CLASSES ***************************************
-
-  /**
-   * <code>SCMCommandArgument</code> is a private class and represents a
-   * normal java bean which is used to hold the information related to SCM
-   * command arguments.
-   */
-  private class SCMCommandArgument {
-
-    private String fieldName;
-    private Object fieldValue;
-    private String commandArgument;
-    private Boolean required;
-
-    /**
-     * Create an instance of {@link SCMCommandArgument}.
-     * 
-     * @param fieldName
-     *            is the name of the task field
-     * @param commandArg
-     *            is the SCM command argument
-     * @param reqd
-     *            indicates the input command argument is mandatory or not.
-     */
-    protected SCMCommandArgument(String fieldName, String commandArg,
-        Boolean reqd, Object fieldValue ) {
-      this.fieldName = fieldName;
-      this.commandArgument = commandArg;
-      this.required = reqd;
-      this.fieldValue = fieldValue;
-    }
-  }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntDependencyTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntDependencyTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -202,7 +202,7 @@
                 String mavenUrl = "http://repo2.maven.org/maven2/";
                 Enumeration jarfiles = jar.entries();
                 boolean found = false;
-                while (!found && jarfiles.hasMoreElements ()) {
+                while (!found && jarfiles.hasMoreElements()) {
                     ZipEntry file = (ZipEntry) jarfiles.nextElement();
                     if (file.isDirectory())
                     {   
@@ -301,7 +301,7 @@
             HashSet<String> classlist = new HashSet<String>();
             
             Enumeration taskdefsenum = taskdefs.keys();
-            while (taskdefsenum.hasMoreElements ()) {
+            while (taskdefsenum.hasMoreElements()) {
                 String key = (String) taskdefsenum.nextElement();
                 Class value = (Class) taskdefs.get(key);
                 if (!key.contains("nokia") && !value.toString().contains("org.apache.tools.ant"))
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CcmTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,166 +0,0 @@
-/*
-* 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.ant.taskdefs;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Vector;
-
-import org.python.util.PythonInterpreter;
-
-import com.nokia.ant.taskdefs.ccm.commands.*;
-import com.nokia.ant.types.ccm.SessionSet;
-
-import org.apache.tools.ant.Task;
-
-/**
- * Synergy task.
- * <pre>
- * &lt;hlm:createSessionMacro database="to1tobet" reference="test.session" /&gt;
- * &lt;hlm:ccm verbose="false"&gt;
- *     &lt;hlm:sessionset refid="test.session" /&gt;
- *     &lt;hlm:addtask folder="tr1test1#2079"&gt;
- *         &lt;task name="tr1test1#5310" /&gt;
- *     &lt;/hlm:addtask&gt;
- *     &lt;hlm:snapshot project="helium-to1tobet#helium_3.0:project:vc1s60p1#1" dir="c:\test" fast="true" recursive="true" /&gt;
- *     &lt;hlm:synchronize project="helium-to1tobet#helium_3.0:project:vc1s60p1#1" recursive="true" /&gt;
- *     &lt;hlm:close /&gt;
- * &lt;/hlm:ccm&gt;
- * </pre>
- * @ant.task category="SCM"
- */
-public class CcmTask extends Task
-{
-    private String username;
-
-    private String password;
-
-    private List<CcmCommand> commands = new ArrayList<CcmCommand>();
-    private Vector<SessionSet> sessionSets = new Vector<SessionSet>();
-    private boolean verbose;
-
-    public void setVerbose(boolean value) {
-        verbose = value;
-    }
-    
-    public boolean getVerbose() {
-        return verbose;
-    }
-
-    public String getUsername()
-    {
-        return username;
-    }
-
-    public final void setUsername(final String username)
-    {
-        this.username = username;
-    }
-
-    public String getPassword()
-    {
-        return password;
-    }
-
-    public final void setPassword(final String password)
-    {
-        this.password = password;
-    }
-
-    public CcmCommand[] getCommands()
-    {
-        return commands.toArray(new CcmCommand[0]);
-    }
-
-    public void addUpdate(Update a)
-    {
-        addCommand(a);
-    }
-    
-    public void addSynchronize(Synchronize a)
-    {
-        addCommand(a);
-    }
-    
-    public void addReconcile(Reconcile a)
-    {
-        addCommand(a);
-    }
-    
-    public void addSnapshot(Snapshot a)
-    {
-        addCommand(a);
-    }
-    
-    public void addChangeReleaseTag(ChangeReleaseTag a)
-    {
-        addCommand(a);
-    }
-
-    public void addCheckout(Checkout a)
-    {
-        addCommand(a);
-    }
-
-    public void addWorkarea(Workarea a)
-    {
-        addCommand(a);
-    }
-
-    private void addCommand(CcmCommand cmd)
-    {
-        cmd.setTask(this);
-        commands.add(cmd);
-    }
-
-    public AddTask createAddTask()
-    {
-        AddTask cmd = new AddTask();
-        addCommand(cmd);
-        return cmd;
-    }
-
-    public Close createClose()
-    {
-        Close cmd = new Close();
-        addCommand(cmd);
-        return cmd;
-    }
-
-    public SessionSet createSessionSet()
-    {
-        SessionSet sessionSet = new SessionSet();
-        sessionSets.add(sessionSet);
-        return sessionSet;
-    }
-    
-    public SessionSet[] getSessionSets() {
-        SessionSet[] result = new SessionSet[sessionSets.size()];
-        sessionSets.copyInto(result);
-        return result; 
-    }
-
-    public final void execute()
-    {
-        String ccmtaskScript = getProject().getProperty("ccmtask.python.script.file");
-        PythonInterpreter pi = new PythonInterpreter();
-        pi.set("java_ccmtask", this);
-        pi.set("project", getProject());
-        pi.execfile(ccmtaskScript);
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CopyParallelTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -62,10 +62,10 @@
      */
     public final void execute()
     {
-       super.execute(); 
-       //wait until all copy threads are dead
-       while (copyThreadCount > 0)
-       {
+        super.execute(); 
+        //wait until all copy threads are dead
+        while (copyThreadCount > 0)
+        {
             try {
                 Thread.sleep(500);
             } catch (InterruptedException e) {
@@ -74,7 +74,7 @@
                 }
                 log("Copy parallel task has been interrupted " + e.getMessage(), Project.MSG_ERR);
             }
-       }
+        }
        
     }
 
@@ -117,10 +117,10 @@
                 + " to " + destDir.getAbsolutePath() + " using " +  maxThreadCount 
                 + " threads in parallel.");
 
-            Enumeration e = fileCopyMap.keys();
-            while (e.hasMoreElements())
+            Enumeration fileEnum = fileCopyMap.keys();
+            while (fileEnum.hasMoreElements())
             {
-                String fromFile = (String) e.nextElement();
+                String fromFile = (String) fileEnum.nextElement();
                 String[] toFiles = (String[]) fileCopyMap.get(fromFile);
 
                 for (int i = 0; i < toFiles.length; i++) {
@@ -145,28 +145,28 @@
                     
                     while (true)
                     {
-                      if ( copyThreadCount < maxThreadCount)
-                      {
-                          CopyThread copyThread = new CopyThread(fromFile, toFile, executionFilters);
-                          copyThread.start();
-                          copyThreadCount++;
-                          break;
-                      }
+                        if ( copyThreadCount < maxThreadCount)
+                        {
+                            CopyThread copyThread = new CopyThread(fromFile, toFile, executionFilters);
+                            copyThread.start();
+                            copyThreadCount++;
+                            break;
+                        }
                     }
                 }
             }
         }
         if (includeEmpty) {
-            Enumeration e = dirCopyMap.elements();
+            Enumeration dirEnum = dirCopyMap.elements();
             int createCount = 0;
-            while (e.hasMoreElements()) {
-                String[] dirs = (String[]) e.nextElement();
+            while (dirEnum.hasMoreElements()) {
+                String[] dirs = (String[]) dirEnum.nextElement();
                 for (int i = 0; i < dirs.length; i++) {
-                    File d = new File(dirs[i]);
-                    if (!d.exists()) {
-                        if (!d.mkdirs()) {
+                    File file = new File(dirs[i]);
+                    if (!file.exists()) {
+                        if (!file.mkdirs()) {
                             log("Unable to create directory "
-                                + d.getAbsolutePath(), Project.MSG_ERR);
+                                + file.getAbsolutePath(), Project.MSG_ERR);
                         } else {
                             createCount++;
                         }
@@ -208,7 +208,7 @@
             message.append(LINE_SEPARATOR);
             message.append(
                 "This is normally due to the input file containing invalid");
-             message.append(LINE_SEPARATOR);
+            message.append(LINE_SEPARATOR);
             message.append("bytes for the character encoding used : ");
             message.append(
                 getEncoding() == null
@@ -244,7 +244,7 @@
         public void run() 
         {
             try {
-               fileUtils.copyFile(fromFile, toFile, executionFilters,
+                fileUtils.copyFile(fromFile, toFile, executionFilters,
                                  filterChains, forceOverwrite,
                                  preserveLastModified, inputEncoding,
                                  outputEncoding, getProject());
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderEntry.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,451 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-/* Portion Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. */
-
-package com.nokia.ant.taskdefs;
-
-import java.io.*;
-import org.apache.tools.ant.util.DOMElementWriter;
-import org.apache.tools.ant.util.DateUtils;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.apache.tools.ant.*;
-import java.util.*;
-import javax.xml.parsers.ParserConfigurationException;
-
-/**
- * This is a class that represents a XML recorder. This is the listener to the
- * build process.
- *
- */
-public class CoverageRecorderEntry implements BuildLogger, SubBuildListener {
-
-    //////////////////////////////////////////////////////////////////////
-    // ATTRIBUTES
-    
-    /** XML element name for a build. */
-    private static final String BUILD_TAG = "build";
-    /** XML element name for a target. */
-    private static final String TARGET_TAG = "target";
-    /** XML element name for a task. */
-    private static final String TASK_TAG = "task";
-    /** XML attribute name for a name. */
-    private static final String NAME_ATTR = "name";
-    /** XML attribute name for a time. */
-    private static final String TIME_ATTR = "time";
-    /** XML attribute name for a file location. */
-    private static final String LOCATION_ATTR = "location";
-    
-    /** DocumentBuilder to use when creating the document to start with. */
-    private static DocumentBuilder builder = getDocumentBuilder();
-    
-    private String recordTaskName;
-    
-    /** The name of the file associated with this recorder entry.  */
-    private String filename;
-    /** The state of the recorder (recorder on or off).  */
-    private boolean record = true;
-    /** The current verbosity level to record at.  */
-    private int loglevel = Project.MSG_INFO;
-    /** The output PrintStream to record to.  */
-    private PrintStream outStream;
-    /** The start time of the last know target.  */
-    private long targetStartTime;
-    /** project instance the recorder is associated with */
-    private Project project;
-
-    /** The complete log document for this build. */
-    private Document doc = builder.newDocument();
-    /** Mapping for when tasks started (Task to TimedElement). */
-    private Hashtable<Task, TimedElement> tasks = new Hashtable<Task, TimedElement>();
-    /** Mapping for when targets started (Task to TimedElement). */
-    private Hashtable<Target, TimedElement> targets = new Hashtable<Target, TimedElement>();
-    /**
-     * Mapping of threads to stacks of elements
-     * (Thread to Stack of TimedElement).
-     */
-    private Hashtable<Thread, Stack<TimedElement>> threadStacks = new Hashtable<Thread, Stack<TimedElement>>();
-    /**
-     * When the build started.
-     */
-    private TimedElement buildElement;
-    
-    //////////////////////////////////////////////////////////////////////
-    // CONSTRUCTORS / INITIALIZERS
-
-    /**
-     * @param name The name of this recorder (used as the filename).
-     */
-    protected CoverageRecorderEntry(String name, String recordTaskName) {
-        filename = name;
-        this.recordTaskName = recordTaskName;
-        startBuild();
-    }
-    
-    /**
-     * Returns a default DocumentBuilder instance or throws an
-     * ExceptionInInitializerError if it can't be created.
-     *
-     * @return a default DocumentBuilder instance.
-     */
-    protected static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (ParserConfigurationException exc) {
-            throw new ExceptionInInitializerError(exc.getMessage());
-        }
-    }
-    
-    /** Utility class representing the time an element started. */
-    protected static class TimedElement {
-        /**
-         * Start time in milliseconds
-         * (as returned by <code>System.currentTimeMillis()</code>).
-         */
-        private long startTime;
-        /** Element created at the start time. */
-        private Element element;
-        public String toString() {
-            return element.getTagName() + ":" + element.getAttribute("name");
-        }
-    }
-    
-    /**
-     * Returns the stack of timed elements for the current thread.
-     * @return the stack of timed elements for the current thread
-     */
-    protected Stack<TimedElement> getStack() {
-        Stack<TimedElement> threadStack = threadStacks.get(Thread.currentThread());
-        if (threadStack == null) {
-            threadStack = new Stack<TimedElement>();
-            threadStacks.put(Thread.currentThread(), threadStack);
-        }
-        /* For debugging purposes uncomment:
-        org.w3c.dom.Comment s = doc.createComment("stack=" + threadStack);
-        buildElement.element.appendChild(s);
-         */
-        return threadStack;
-    }
-    
-    //////////////////////////////////////////////////////////////////////
-    // ACCESSOR METHODS
-
-    /**
-     * @return the name of the file the output is sent to.
-     */
-    public String getFilename() {
-        return filename;
-    }
-
-    /**
-     * Turns off or on this recorder.
-     *
-     * @param state true for on, false for off, null for no change.
-     */
-    public void setRecordState(Boolean state) {
-        if (state != null) {
-            record = state.booleanValue();
-        }
-    }
-
-    /**
-     * @see org.apache.tools.ant.BuildListener#buildStarted(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void buildStarted(BuildEvent event) {
-        
-    }
-
-    /**
-     * @see org.apache.tools.ant.BuildListener#buildFinished(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void buildFinished(BuildEvent event) {
-        cleanup();
-    }
-
-    /**
-     * Cleans up any resources held by this recorder entry at the end
-     * of a subbuild if it has been created for the subbuild's project
-     * instance.
-     *
-     * @param event the buildFinished event
-     *
-     * @since Ant 1.6.2
-     */
-    public void subBuildFinished(BuildEvent event) {
-        if (event.getProject() == project) {
-            cleanup();
-        }
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the buildStarted event
-     *
-     * @since Ant 1.6.2
-     */
-    public void subBuildStarted(BuildEvent event) {
-    }
-
-    /**
-     * @see org.apache.tools.ant.BuildListener#targetStarted(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void targetStarted(BuildEvent event) {
-        Target target = event.getTarget();
-        TimedElement targetElement = new TimedElement();
-        targetElement.startTime = System.currentTimeMillis();
-        targetElement.element = doc.createElement(TARGET_TAG);
-        targetElement.element.setAttribute(NAME_ATTR, target.getName());
-        targets.put(target, targetElement);
-        getStack().push(targetElement);
-    }
-
-    /**
-     * @see org.apache.tools.ant.BuildListener#targetFinished(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void targetFinished(BuildEvent event) {
-        Target target = event.getTarget();
-        TimedElement targetElement = (TimedElement) targets.get(target);
-        if (targetElement != null) {
-            long totalTime
-                    = System.currentTimeMillis() - targetElement.startTime;
-            targetElement.element.setAttribute(TIME_ATTR,
-                    DateUtils.formatElapsedTime(totalTime));
-
-            TimedElement parentElement = null;
-            Stack<TimedElement> threadStack = getStack();
-            if (!threadStack.empty()) {
-                threadStack.pop();
-//                if (poppedStack != targetElement) {
-//                    throw new RuntimeException("Mismatch - popped element = "
-//                            + poppedStack
-//                            + " finished target element = "
-//                            + targetElement);
-//                }
-                if (!threadStack.empty()) {
-                    parentElement = threadStack.peek();
-                }
-            }
-            if (parentElement == null) {
-                buildElement.element.appendChild(targetElement.element);
-            } else {
-                parentElement.element.appendChild(targetElement.element);
-            }
-        }
-        targets.remove(target);
-    }
-
-    /**
-     * @see org.apache.tools.ant.BuildListener#taskStarted(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void taskStarted(BuildEvent event) {
-        TimedElement taskElement = new TimedElement();
-        taskElement.startTime = System.currentTimeMillis();
-        taskElement.element = doc.createElement(TASK_TAG);
-
-        Task task = event.getTask();
-        String name = event.getTask().getTaskName();
-        if (name == null) {
-            name = "";
-        }
-        taskElement.element.setAttribute(NAME_ATTR, name);
-        taskElement.element.setAttribute(LOCATION_ATTR,
-                event.getTask().getLocation().toString());
-        tasks.put(task, taskElement);
-        getStack().push(taskElement);
-    }
-
-    /**
-     * @see org.apache.tools.ant.BuildListener#taskFinished(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void taskFinished(BuildEvent event) {
-        
-//        if (event.getTask().getTaskName() != recordTaskName) {
-            Task task = event.getTask();
-            TimedElement taskElement = tasks.get(task);
-            if (taskElement != null) {
-                long totalTime = System.currentTimeMillis() - taskElement.startTime;
-                taskElement.element.setAttribute(TIME_ATTR,
-                        DateUtils.formatElapsedTime(totalTime));
-                Target target = task.getOwningTarget();
-                TimedElement targetElement = null;
-                if (target != null) {
-                    targetElement = (TimedElement) targets.get(target);
-                }
-                if (targetElement == null) {
-                    buildElement.element.appendChild(taskElement.element);
-                } else {
-                    targetElement.element.appendChild(taskElement.element);
-                }
-                Stack<TimedElement> threadStack = getStack();
-                if (!threadStack.empty()) {
-                    threadStack.pop();
-//                    if (poppedStack != taskElement) {
-//                        throw new RuntimeException("Mismatch - popped element = "
-//                                + poppedStack + " finished task element = "
-//                                + taskElement);
-//                    }
-                }
-                tasks.remove(task);
-//            } else {
-//                throw new RuntimeException("Unknown task " + task + " not in " + tasks);
-//            }
-        }
-    }
-    
-    /**
-     * Get the TimedElement associated with a task.
-     *
-     * Where the task is not found directly, search for unknown elements which
-     * may be hiding the real task
-     */
-    protected TimedElement getTaskElement(Task task) {
-        TimedElement element = (TimedElement) tasks.get(task);
-        if (element != null) {
-            return element;
-        }
-
-        for (Task key : tasks.keySet()) {
-            if (key instanceof UnknownElement) {
-                if (((UnknownElement) key).getTask() == task) {
-                    return tasks.get(key);
-                }
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * @see org.apache.tools.ant.BuildListener#messageLogged(BuildEvent)
-     */
-    /** {@inheritDoc}. */
-    public void messageLogged(BuildEvent event) {
-        
-    }
-
-    /**
-     * @see BuildLogger#setMessageOutputLevel(int)
-     */
-    /** {@inheritDoc}. */
-    public void setMessageOutputLevel(int level) {
-        if (level >= Project.MSG_ERR && level <= Project.MSG_DEBUG) {
-            loglevel = level;
-        }
-    }
-
-    /**
-     * @see BuildLogger#setOutputPrintStream(PrintStream)
-     */
-    /** {@inheritDoc}. */
-    public void setOutputPrintStream(PrintStream output) {
-        outStream = output;
-    }
-
-
-    /**
-     * @see BuildLogger#setErrorPrintStream(PrintStream)
-     */
-    /** {@inheritDoc}. */
-    public void setErrorPrintStream(PrintStream err) {
-        setOutputPrintStream(err);
-    }
-
-    /**
-     * Set the project associated with this recorder entry.
-     *
-     * @param project the project instance
-     *
-     * @since 1.6.2
-     */
-    public void setProject(Project project) {
-        this.project = project;
-        if (project != null) {
-            project.addBuildListener(this);
-        }
-    }
-    
-    /**
-     * @since 1.6.2
-     */
-    public void cleanup() {
-        closeFile();
-        if (project != null) {
-            project.removeBuildListener(this);
-        }
-        project = null;
-    }
-    
-    /**
-     * Closes the file associated with this recorder.
-     * Used by Recorder.
-     * @since 1.6.3
-     */
-    void closeFile() {
-        finishBuild();
-        Writer out = null;
-        try {
-            // specify output in UTF8 otherwise accented characters will blow
-            // up everything
-            OutputStream stream = outStream;
-            if (stream == null) {
-                stream = new FileOutputStream(filename);
-            }
-            out = new OutputStreamWriter(stream, "UTF8");
-            out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-            (new DOMElementWriter()).write(buildElement.element, out, 0, "\t");
-            out.flush();
-        } catch (IOException exc) {
-            throw new BuildException("Unable to write log file " + exc.getMessage(), exc);
-        } finally {
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e) {
-                    e = null; // ignore
-                }
-            }
-        }
-        buildElement = null;
-    }
-    
-    void startBuild() {
-        buildElement = new TimedElement();
-        buildElement.startTime = System.currentTimeMillis();
-        buildElement.element = doc.createElement(BUILD_TAG);
-    }
-    
-    void finishBuild() {
-        long totalTime = System.currentTimeMillis() - buildElement.startTime;
-        buildElement.element.setAttribute(TIME_ATTR,
-                DateUtils.formatElapsedTime(totalTime));
-    }
-
-    @Override
-    public void setEmacsMode(boolean emacsMode) {
-        // Not needed.
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/CoverageRecorderTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -25,6 +25,8 @@
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Recorder;
 
+import com.nokia.ant.listener.CoverageRecorderEntry;
+
 /**
  * Adds a listener, which inherits the Ant Record task, to the current build process that records the
  * output to a XML file.
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/DeconfigureTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
- * 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.ant.taskdefs;
-
-
-/**
- * ANT wrapper task for the GSCM deconfigure.pl script.
- * 
- * @ant.task category="SCM"
- */
-public class DeconfigureTask extends AbstractScmBaseTask {
-  // The attributes of this task
-  private Boolean considerBranchReleases;
-
-  /**
-   * Return the considerBranchReleases.
-   * 
-   * @return the considerBranchReleases.
-   */
-  public Boolean getConsiderBranchReleases() {
-    return considerBranchReleases;
-  }
-
-  /**
-   * Set if we want deconfigure.pl script to check for branch differences
-   * based on the 'included_releases' attribute of project.
-   * 
-   * @param considerBranchReleases
-   * @ant.not-required Default is no.
-   */
-  public void setconsiderBranchReleases(Boolean considerBranchReleases) {
-    this.considerBranchReleases = considerBranchReleases;
-    log("Set considerBranchReleases to " + considerBranchReleases);
-  }
-
-  /**
-   * Build a command list consisting of all the required and optional command
-   * arguments of the current task.
-   */
-  protected void buildCommandList() {
-    addCommandArg("database", "-d", true, getDatabase());
-    addCommandArg("password", "-P", true, getPassword());
-    addCommandArg("ccmProject", "-p", true, getCcmProject());
-    addCommandArg("considerBranchReleases", "-b", getConsiderBranchReleases());
-  }
-
-  /**
-   * Method validates the given arguments.
-   */
-  protected void validateArguments() {
-    // Do nothing
-  }
-
-  /**
-   * Set the execution script.
-   * 
-   */
-  protected void setExecutionScript() {
-    append2CommandString("deconfigure.pl");
-  }
-
-  /**
-   * Method returns the correct verbosity level for the input choice.
-   * 
-   * @param choice
-   *            is the verbosity choice set by user.
-   * @return the verbosity level to set.
-   */
-  protected String getVerbosity(int choice) {
-    String cmd = "";
-    switch (choice) {
-    case 0:
-      cmd = "-q ";
-      break;
-    case 1:
-      cmd = "-V ";
-      break;
-    case 2:
-      cmd = "-W ";
-      break;
-    default:
-      raiseError("Verbosity level is not recognised. "
-          + "Legal values are: 0 - quiet, 1 - verbose or 2 - very verbose");
-    }
-    return cmd;
-  }
-  
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/HlmExecTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/HlmExecTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -38,28 +38,28 @@
       */
     public void execute()
     {
-        String p = getProject().getProperty("number.of.threads");
-        if (p != null)
+        String property = getProject().getProperty("number.of.threads");
+        if (property != null)
         {
-            ((ThreadPoolExecutor)threadPool).setCorePoolSize(Integer.parseInt(p));
-            ((ThreadPoolExecutor)threadPool).setMaximumPoolSize(Integer.parseInt(p));
+            ((ThreadPoolExecutor)threadPool).setCorePoolSize(Integer.parseInt(property));
+            ((ThreadPoolExecutor)threadPool).setMaximumPoolSize(Integer.parseInt(property));
         }
-        TaskRunnable tr = new TaskRunnable();
-        threadPool.submit(tr);
+        TaskRunnable taskRunnable = new TaskRunnable();
+        threadPool.submit(taskRunnable);
         try {
             synchronized (semaphore) {
-                while (!tr.isFinished())
+                while (!taskRunnable.isFinished())
                     semaphore.wait();
             }
         } catch (InterruptedException e) { e.printStackTrace(); }
           
-        Throwable t = tr.getException();
-        if (t != null)
+        Throwable exception = taskRunnable.getException();
+        if (exception != null)
         {
-            if (t instanceof BuildException)
-                throw (BuildException)t;
+            if (exception instanceof BuildException)
+                throw (BuildException)exception;
             else
-                t.printStackTrace();
+                exception.printStackTrace();
         }
     }
     
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/RBTTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,502 +0,0 @@
-/*
- * 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.ant.taskdefs;
-
-
-/**
- * ANT wrapper task for the GSCM rbt.pl script.
- * 
- * <pre>
- * Deconfigure Only:
- * 
- * Usage: &lt;hlm:rebaseanddeconf database=&quot;${dbname}&quot;
- *                              password=&quot;${UNIX-password}&quot; 
- *                              verbosity=&quot;${0-3}&quot;
- *                              ccmProject=&quot;${ccm.project.name}&quot; 
- *                              release=&quot;${release.name}&quot;
- *                              deconfigure=&quot;yes&quot; /&gt;
- * </pre>
- * 
- * <pre>
- * Rebaseline Only:
- * 
- * Usage:   &lt;hlm:rebaseanddeconf database=&quot;${dbname}&quot;
- *                              password=&quot;${UNIX-password}&quot; 
- *                              verbosity=&quot;${0-3}&quot;
- *                              ccmProject=&quot;${ccm.project.name}&quot;
- *                              release=&quot;${release.name}&quot; 
- *                              releaseBaseline=&quot;yes&quot; 
- *                              skipDeconfigure=&quot;yes&quot; /&gt;
- * </pre>
- * 
- * <pre>
- * Rebaseline with deconfigure:
- * 
- * Usage:   &lt;hlm:rebaseanddeconf database=&quot;${dbname}&quot;
- *                              password=&quot;${UNIX-password}&quot; 
- *                              verbosity=&quot;${0-3}&quot;
- *                              ccmProject=&quot;${ccm.project.name}&quot;
- *                              release=&quot;${release.name}&quot; 
- *                              releaseBaseline=&quot;yes&quot; 
- *                              deconfigure=&quot;yes&quot; /&gt;
- * </pre>
- * 
- * @ant.task name="rebaseanddeconf" category="SCM"
- */
-public class RBTTask extends AbstractScmBaseTask {
-
-  // The attributes of this task
-  private String baseline; // -B baselinename = Four-part name of existing
-  // baseline (incompatible with -p and -n)
-  private String version; // -v version = New project hierarchy version
-  private String release; // -r release = New release object name (Two-part
-  // name)
-  private String newBaselineName; // -n name = New baseline name
-
-  private Boolean releaseBaseline; // -R = Release the newly created baseline
-  private Boolean publish; // -P = Publish the newly created baseline
-  private Boolean deconfigure; // -s = Replace subprojects only (NO
-  // REBASELINE)
-  private Boolean leaveFoldersWritable; // -F = Don't freeze folders (Leave
-  // folders writable)
-  private Boolean enableTaskRebadgingGenericRelease; // -t = Enable task
-  // rebadging (associated
-  // modifiable tasks with
-  // generic release only)
-  private Boolean enableTaskRebadging; // -T = Enable task rebadging (all
-  // associated modifiable tasks)
-  private Boolean rebadgeObjectVersions; // -o = Rebadge object versions
-  // (requires ccm_admin)
-  private Boolean createBaselineForRollingReleaseTag; // -i = Create
-  // additional
-  // integration baseline
-  // for rolling-release
-  // tag
-  private Boolean skipDeconfigure; // -S = Do NOT replace subprojects (NO
-  // DECONFIGURE)
-  private Boolean active; // -a = Specified release remains active
-  private Boolean useBranchReleaseMethodology; // -b = Utilize branch release
-
-  // methodology
-
-  /**
-   * Return the baseline.
-   * 
-   * @return the baseline.
-   */
-  public String getBaseline() {
-    return baseline;
-  }
-
-  /**
-   * Set four-part name of existing baseline (incompatible with 'projectName'
-   * and 'baselineName' attributes) to be used by rebaseline.pl script.
-   * 
-   * @param baseline
-   *            is the baseline to set
-   * @ant.not-required
-   */
-  public void setBaseline(String baseline) {
-    this.baseline = baseline;
-    log("Set baseline to " + baseline);
-  }
-
-  /**
-   * Return the version.
-   * 
-   * @return the version.
-   */
-  public String getVersion() {
-    return version;
-  }
-
-  /**
-   * Set version of new project created.
-   * 
-   * @param version
-   *            is the version to set.
-   * @ant.not-required
-   */
-  public void setVersion(String version) {
-    this.version = version;
-    log("Set version to " + version);
-  }
-
-  /**
-   * Return the leaveFoldersWritable.
-   * 
-   * @return the leaveFoldersWritable.
-   */
-  public Boolean getLeaveFoldersWritable() {
-    return leaveFoldersWritable;
-  }
-
-  /**
-   * Set whether to leave the folders writable in the baseline project
-   * created.
-   * 
-   * @param leaveFoldersWritable
-   *            indicates whether to leave folders writable.
-   * @ant.not-required Default is no.
-   */
-  public void setLeaveFoldersWritable(Boolean leaveFoldersWritable) {
-    this.leaveFoldersWritable = leaveFoldersWritable;
-    log("Set leaveFoldersWritable to " + leaveFoldersWritable);
-  }
-
-  /**
-   * Return the rebadgeObjectVersions
-   * 
-   * @return the rebadgeObjectVersions.
-   */
-  public Boolean getRebadgeObjectVersions() {
-    return rebadgeObjectVersions;
-  }
-
-  /**
-   * Set whether to rebadge object versions in the rebaseline.pl script.
-   * 
-   * @param rebadgeObjectVersions
-   *            indicates whether to rebadge object versions to a given release tag.
-   * @ant.not-required Default is no.
-   */
-  public void setRebadgeObjectVersions(Boolean rebadgeObjectVersions) {
-    this.rebadgeObjectVersions = rebadgeObjectVersions;
-    log("Set rebadgeObjectVersions to " + rebadgeObjectVersions);
-  }
-
-  /**
-   * Return the releaseBaseline.
-   * 
-   * @return the releaseBaseline.
-   */
-  public Boolean getReleaseBaseline() {
-    return releaseBaseline;
-  }
-
-  /**
-   * Set whether to release the newly created baseline or not.
-   * 
-   * @param releaseBaseline
-   *            indicates whether to release the newly created baseline 
-   */
-  public void setReleaseBaseline(Boolean releaseBaseline) {
-    this.releaseBaseline = releaseBaseline;
-    log("Set releaseBaseline to " + releaseBaseline);
-  }
-
-  /**
-   * Return the publish.
-   * 
-   * @return the publish.
-   */
-  public Boolean getPublish() {
-    return publish;
-  }
-
-  /**
-   * Set whether to publish the newly created baseline or not.
-   * 
-   * @param publish
-   *            the publish to set
-   */
-  public void setPublish(Boolean publish) {
-    this.publish = publish;
-    log("Set publish to " + publish);
-  }
-
-  /**
-   * Return the createBaselineForRollingReleaseTag.
-   * 
-   * @return the createBaselineForRollingReleaseTag.
-   */
-  public Boolean getCreateBaselineForRollingReleaseTag() {
-    return createBaselineForRollingReleaseTag;
-  }
-
-  /**
-   * Set whether to create additional integration baseline for rolling-release
-   * tag.
-   * 
-   * @param createBaselineForRollingReleaseTag
-   * @ant.not-required Default is no.
-   */
-  public void setCreateBaselineForRollingReleaseTag(
-      Boolean createBaselineForRollingReleaseTag) {
-    this.createBaselineForRollingReleaseTag = createBaselineForRollingReleaseTag;
-    log("Set createBaselineForRollingReleaseTag to "
-        + createBaselineForRollingReleaseTag);
-  }
-
-  /**
-   * Return the enableTaskRebadgingGenericRelease.
-   * 
-   * @return the enableTaskRebadgingGenericRelease.
-   */
-  public Boolean getEnableTaskRebadgingGenericRelease() {
-    return enableTaskRebadgingGenericRelease;
-  }
-
-  /**
-   * Set enable task rebadging (associated modifiable tasks with generic
-   * release only). Not supported in rebaseline.pl
-   * 
-   * @param enableTaskRebadgingGenericRelease
-   *            the enableTaskRebadgingGenericRelease to set
-   */
-  public void setEnableTaskRebadgingGenericRelease(
-      Boolean enableTaskRebadgingGenericRelease) {
-    this.enableTaskRebadgingGenericRelease = enableTaskRebadgingGenericRelease;
-    log("Set enableTaskRebadgingGenericRelease to "
-        + enableTaskRebadgingGenericRelease);
-  }
-
-  /**
-   * Return the enableTaskRebadging
-   * 
-   * @return the enableTaskRebadging.
-   */
-  public Boolean getEnableTaskRebadging() {
-    return enableTaskRebadging;
-  }
-
-  /**
-   * Set enable task rebadging (all associated modifiable tasks). Not supported in rebaseline.pl
-   * 
-   * @param enableTaskRebadging
-   *            the enableTaskRebadging to set
-   */
-  public void setEnableTaskRebadging(Boolean enableTaskRebadging) {
-    this.enableTaskRebadging = enableTaskRebadging;
-    log("Set enableTaskRebadging to " + enableTaskRebadging);
-  }
-
-  /**
-   * Return the skipDeconfigure.
-   * 
-   * @return the skipDeconfigure.
-   */
-  public Boolean getSkipDeconfigure() {
-    return skipDeconfigure;
-  }
-
-  /**
-   * Set to skip deconfigure.
-   * 
-   * @param skipDeconfigure
-   *            the skipDeconfigure to set
-   */
-  public void setSkipDeconfigure(Boolean skipDeconfigure) {
-    this.skipDeconfigure = skipDeconfigure;
-    log("Set skipDeconfigure to " + skipDeconfigure);
-  }
-
-  /**
-   * Return the deconfigure
-   * 
-   * @return the deconfigure.
-   */
-  public Boolean getDeconfigure() {
-    return deconfigure;
-  }
-
-  /**
-   * Set deconfigure.
-   * 
-   * @param deconfigure
-   *            the deconfigure to set
-   */
-  public void setDeconfigure(Boolean deconfigure) {
-    this.deconfigure = deconfigure;
-    log("Set deconfigure to " + deconfigure);
-  }
-
-  /**
-   * Return the active.
-   * 
-   * @return the active.
-   */
-  public Boolean getActive() {
-    return active;
-  }
-
-  /**
-   * Set whether the current release is active or not.
-   * 
-   * @param active
-   *            the active to set
-   */
-  public void setActive(Boolean active) {
-    this.active = active;
-    log("Set active to " + active);
-  }
-
-  /**
-   * Return useBranchReleaseMethodology.
-   * 
-   * @return the useBranchReleaseMethodology.
-   */
-  public Boolean getUseBranchReleaseMethodology() {
-    return useBranchReleaseMethodology;
-  }
-
-  /**
-   * Set whether to utilize branch release methodology or not.
-   * 
-   * @param useBranchReleaseMethodology
-   *            is the boolean value to set.
-   * @ant.not-required Default is no.
-   */
-  public void setUseBranchReleaseMethodology(
-      Boolean useBranchReleaseMethodology) {
-    this.useBranchReleaseMethodology = useBranchReleaseMethodology;
-    log("Set useBranchReleaseMethodology to " + useBranchReleaseMethodology);
-  }
-
-  /**
-   * Return the release tag.
-   * 
-   * @return the release tag.
-   */
-  public String getRelease() {
-    return release;
-  }
-
-  /**
-   * Set release tag (Two-part name) for the release project created.
-   * 
-   * @param release
-   *            is the release tag to set
-   * @ant.not-required
-   */
-  public void setRelease(String release) {
-    this.release = release;
-    log("Set release to " + release);
-  }
-
-  /**
-   * Return the newBaselineName.
-   * 
-   * @return the newBaselineName.
-   */
-  public String getNewBaselineName() {
-    return newBaselineName;
-  }
-
-  /**
-   * Set new baseline name to use.
-   * 
-   * @param newBaselineName
-   *            is the new baseline name to set.
-   * @ant.not-required
-   */
-  public void setNewBaselineName(String newBaselineName) {
-    this.newBaselineName = newBaselineName;
-    log("Set newBaselineName to " + newBaselineName);
-  }
-
-  /**
-   * Set the execution script.
-   * 
-   */
-  protected void setExecutionScript() {
-    append2CommandString("rbt.pl");
-  }
-
-  /**
-   * Build a command list consisting of all the required and optional command
-   * arguments of the current task.
-   */
-  protected void buildCommandList() {
-    addCommandArg("database", "-d", true, getDatabase());
-    addCommandArg("password", "-U", true, getPassword());
-    addCommandArg("ccmProject", "-p", getCcmProject());
-    addCommandArg("baseline", "-B", getBaseline());
-    addCommandArg("version", "-v", getVersion());
-    addCommandArg("releaseBaseline", "-R", getReleaseBaseline());
-    addCommandArg("publish", "-P", getPublish());
-    addCommandArg("deconfigure", "-s", getDeconfigure());
-    addCommandArg("leaveFoldersWritable", "-F", getLeaveFoldersWritable());
-    addCommandArg("enableTaskRebadgingGenericRelease", "-t", getEnableTaskRebadgingGenericRelease());
-    addCommandArg("enableTaskRebadging", "-T", getEnableTaskRebadging());
-    addCommandArg("rebadgeObjectVersions", "-o", getRebadgeObjectVersions());
-    addCommandArg("createBaselineForRollingReleaseTag", "-i", getCreateBaselineForRollingReleaseTag());
-    addCommandArg("active", "-a", getActive());
-    addCommandArg("skipDeconfigure", "-S", getSkipDeconfigure());
-    addCommandArg("useBranchReleaseMethodology", "-b", getUseBranchReleaseMethodology());
-    addCommandArg("release", "-r", getRelease());
-    addCommandArg("newBaselineName", "-n", getNewBaselineName());
-  }
-
-  /**
-   * Method validates the given arguments.
-   */
-  protected void validateArguments() {
-
-    if (baseline != null && (getCcmProject() != null || newBaselineName != null)) {
-      raiseError("Option 'baseline' cannot be used with 'ccmProject' and 'newBaselineName'");
-    }
-
-    if (deconfigure != null && deconfigure && skipDeconfigure != null
-        && skipDeconfigure) {
-      raiseError("Use option either 'deconfigure' or 'skipDeconfigure'");
-    }
-
-    if (deconfigure != null && deconfigure && release == null) {
-      raiseError("Option 'release' is mandatory if 'deconfigure' is set");
-    }
-
-    if (publish != null && publish && releaseBaseline != null
-        && releaseBaseline) {
-      raiseError("Use Option either 'publish' or 'releaseBaseline'");
-    }
-
-    if (enableTaskRebadging != null && enableTaskRebadging
-        && enableTaskRebadgingGenericRelease != null
-        && enableTaskRebadgingGenericRelease) {
-      raiseError("Use Option either 'enableTaskRebadging' or 'enableTaskRebadgingGenericRelease'");
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  protected String getVerbosity(int choice) {
-    String cmd = "";
-    switch (choice) {
-    case 0:
-      cmd = "-Q";
-      break;
-    case 1:
-      cmd = "-V";
-      break;
-    case 2:
-      cmd = "-I";
-      break;
-    case 3:
-      cmd = "-W";
-      break;
-    default:
-      raiseError("Verbosity level is not recognised. "
-          + "Legal values are: 0 - quiet, 1 - verbose, 2 - Interactive "
-          + "or 3 - Walk-through Rehearsal");
-    }
-    return cmd;
-  }
-
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/RebaselineTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * 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.ant.taskdefs;
-
-
-/**
- * ANT wrapper task for the GSCM rebaseline.pl script.
- * &lt;hlm:rebaseline database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/&gt;
- * @ant.task name="rebaseline" category="SCM"
- */
-public class RebaselineTask extends RBTTask {
-  // The attributes of this task
-  private Boolean disableTaskRebadging;
-
-  /**
-   * Return disableTaskRebadging
-   * 
-   * @return the disableTaskRebadging.
-   */
-  public Boolean getDisableTaskRebadging() {
-    return disableTaskRebadging;
-  }
-
-  /**
-   * Set whether to disable task rebadging (incompatible with
-   * 'rebadgeObjectVersions' attribute) in the rebaseline.pl script.
-   * 
-   * @param disableTaskRebadging
-   * @ant.not-required Default is no.
-   */
-  public void setdisableTaskRebadging(Boolean disableTaskRebadging) {
-    this.disableTaskRebadging = disableTaskRebadging;
-    log("Set disableTaskRebadging to " + disableTaskRebadging);
-  }
-
-  /**
-   * Set the execution script.
-   * 
-   */
-  protected void setExecutionScript() {
-    append2CommandString("rebaseline.pl");
-  }
-
-  /**
-   * Build a command list consisting of all the required and optional command
-   * arguments of the current task.
-   */
-  protected void buildCommandList() {
-    addCommandArg("database", "-d", true, getDatabase());
-    addCommandArg("password", "-P", true, getPassword());
-    addCommandArg("ccmProject", "-p", true, getCcmProject());
-    addCommandArg("release", "-r", getRelease());
-    addCommandArg("baseline", "-B", getBaseline());
-    addCommandArg("version", "-v", getVersion());
-    addCommandArg("newBaselineName", "-n", getNewBaselineName());
-    addCommandArg("releaseBaseline", "-R", getReleaseBaseline());
-    addCommandArg("leaveFolderswritable", "-w", getLeaveFoldersWritable());
-    addCommandArg("disableTaskRebadging", "-x", getDisableTaskRebadging());
-    addCommandArg("rebadgeObjectVersions", "-a", getRebadgeObjectVersions());
-    addCommandArg("useBranchReleaseMethodology", "-b", getUseBranchReleaseMethodology());
-    addCommandArg("createBaselineForRollingReleaseTag", "-i", getCreateBaselineForRollingReleaseTag());
-  }
-
-  /**
-   * Method returns the correct verbosity level for the input choice.
-   * 
-   * @param choice
-   *            is the verbosity choice set by user.
-   * @return the verbosity level to set.
-   */
-  protected String getVerbosity(int choice) {
-    String cmd = "";
-    switch (choice) {
-    case 0:
-      cmd = "-q ";
-      break;
-    case 1:
-      cmd = "-V ";
-      break;
-    default:
-      raiseError("Verbosity level is not recognised. "
-          + "Legal values are: 0 - quiet, 1 - verbose.");
-    }
-    return cmd;
-  }
-
-  /**
-   * Method validates the given arguments.
-   */
-  protected void validateArguments() {
-    // Do nothing
-  }
-  
-}
\ No newline at end of file
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/Signal.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
-* 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.ant.taskdefs;
-
-/**
- * This class stores a signal while being deferred. 
- *
- */
-public class Signal {
-
-    private String name;
-    private String message;
-
-    public String getMessage() {
-        return message;
-    }
-    
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public String getName() {
-        return name;
-    }
-    
-    public void setName(String name) {
-        this.name = name;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsole.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* 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.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import com.nokia.ant.HeliumLogger;
-
-/**
- * This task will control the outputing of the Helium logger.
- * 
- * Example of usage, to stop logging to console:
- * <pre>
- * &lt;hlm:logtoconsole action="stop"/&gt;
- * </pre>
- *  
- * To resume logging to console:
- * <pre>
- * &lt;hlm:logtoconsole action="start"/&gt;
- * </pre> 
- * 
- * @ant.task name="logtoconsole" category="Logging"
- */ 
-public class StopLogToConsole extends Task 
-{   
-    private boolean stopLogToConsole;
-    
-    /**
-     * Action to perform, stop/start logging.
-     * @ant.not-required Default value is start.
-     */
-    public void setAction(String msg)
-    {
-        if ( msg.equalsIgnoreCase("stop") )
-        {
-            stopLogToConsole = true;
-        }
-        else
-        {
-            stopLogToConsole = false;
-        }       
-    }
-
-    @Override
-    public void execute()
-    {
-        super.execute();
-        if (HeliumLogger.getStopLogToConsole() != stopLogToConsole)
-        {
-            if (stopLogToConsole)
-                log("Logging to console suspended.");             
-            HeliumLogger.setStopLogToConsole(stopLogToConsole);   
-            if (!stopLogToConsole)
-                log("Logging to console resumed."); 
-        }       
-    }   
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/StopLogToConsoleTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* 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.ant.taskdefs;
+
+import org.apache.tools.ant.Task;
+import com.nokia.ant.HeliumLogger;
+
+/**
+ * This task will control the outputing of the Helium logger.
+ * 
+ * Example of usage, to stop logging to console:
+ * <pre>
+ * &lt;hlm:logtoconsole action="stop"/&gt;
+ * </pre>
+ *  
+ * To resume logging to console:
+ * <pre>
+ * &lt;hlm:logtoconsole action="start"/&gt;
+ * </pre> 
+ * 
+ * @ant.task name="logtoconsole" category="Logging"
+ */ 
+public class StopLogToConsoleTask extends Task 
+{   
+    private boolean stopLogToConsole;
+    
+    /**
+     * Action to perform, stop/start logging.
+     * @ant.not-required Default value is start.
+     */
+    public void setAction(String msg)
+    {
+        if ( msg.equalsIgnoreCase("stop") )
+        {
+            stopLogToConsole = true;
+        }
+        else
+        {
+            stopLogToConsole = false;
+        }       
+    }
+
+    @Override
+    public void execute()
+    {
+        super.execute();
+        if (HeliumLogger.getStopLogToConsole() != stopLogToConsole)
+        {
+            if (stopLogToConsole)
+                log("Logging to console suspended.");             
+            HeliumLogger.setStopLogToConsole(stopLogToConsole);   
+            if (!stopLogToConsole)
+                log("Logging to console resumed."); 
+        }       
+    }   
+}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/AddTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-import java.util.Vector;
-import com.nokia.ant.types.ccm.Task;
-
-/**
- * This object creates new ccm task and contains all the Tasks in a list.
- *
- */
-public class AddTask extends CcmCommand
-{
-    private String folder;
-    private Vector<Task> tasks = new Vector<Task>();
-
-    public String getFolder()
-    {
-        return folder;
-    }
-
-    public void setFolder(String folder)
-    {
-        this.folder = folder;
-    }
-    
-    public Task createTask() {
-        Task task = new Task();
-        tasks.add(task);
-        return task;
-    }
-    
-    public Task[] getTasks() {
-        Task[] result = new Task[tasks.size()];
-        tasks.copyInto(result);
-        return result;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/CcmCommand.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-import com.nokia.ant.taskdefs.CcmTask;
-
-/**
- * Creates command string based on runtime class name.
- *
- */
-public class CcmCommand
-{
-    private CcmTask task;
-
-    /**
-     * @return the task
-     */
-    public CcmTask getTask()
-    {
-        return task;
-    }
-
-    /**
-     * @param task
-     *            the task to set
-     */
-    public void setTask(CcmTask task)
-    {
-        this.task = task;
-    }
-    
-    
-    public String getName()
-    {
-        String className = getClass().getName();
-        String commandName = className.substring(className.lastIndexOf('.') + 1).toLowerCase();
-        return commandName;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/ChangeReleaseTag.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-/**
- * This object contains the current release tag.
- *
- */
-public class ChangeReleaseTag extends CcmCommand
-{
-    private String folder;
-    private String newreleasetag;
-    
-    
-    public String getFolder()
-    {
-        return folder;
-    }
-
-    public void setFolder(String folder)
-    {
-        this.folder = folder;
-    }
-    
-    public String getReleaseTag()
-    {
-        return newreleasetag;
-    }
-
-    public void setReleasetag(String newreleasetag)
-    {
-        this.newreleasetag = newreleasetag;
-    }
-
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Checkout.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-/**
- * This object is used to check out a ccm project.
- *
- */
-public class Checkout extends CcmCommand
-{
-    private String project;
-    private String release;
-    private String version;
-    private String purpose;
-    private String wa;
-    private boolean recursive;
-    private boolean relative;
-
-    public String getProject()
-    {
-        return project;
-    }
-
-    public void setProject(String project)
-    {
-        this.project = project;
-    }
-    
-    public String getRelease()
-    {
-        return release;
-    }
-
-    public void setRelease(String release)
-    {
-        this.release = release;
-    }
-    
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public void setVersion(String version)
-    {
-        this.version = version;
-    }
-
-    public String getPurpose()
-    {
-        return purpose;
-    }
-
-    public void setPurpose(String purpose)
-    {
-        this.purpose = purpose;
-    }
-
-    public String getWa()
-    {
-        return wa;
-    }
-
-    public void setWa(String wa)
-    {
-        this.wa = wa;
-    }
-
-    public boolean getRecursive()
-    {
-        return recursive;
-    }
-
-    public void setRecursive(boolean recursive)
-    {
-        this.recursive = recursive;
-    }
-
-    public boolean getRelative()
-    {
-        return relative;
-    }
-
-    public void setRelative(boolean relative)
-    {
-        this.relative = relative;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Close.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-/**
- * To close the ccm session
- *
- */
-public class Close extends CcmCommand
-{
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Reconcile.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-/**
- * This object is used to reconcile a ccm project.
- *
- */
-public class Reconcile extends CcmCommand
-{
-    private String project;
-
-    public String getProject()
-    {
-        return project;
-    }
-
-    public void setProject(String project)
-    {
-        this.project = project;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Snapshot.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-/**
- * This object is used to snap shot a ccm project.
- *
- */
-public class Snapshot extends CcmCommand
-{
-    private String project;
-    private String dir;
-    private boolean recursive;
-    private boolean fast;
-
-    public String getProject()
-    {
-        return project;
-    }
-
-    public void setProject(String project)
-    {
-        this.project = project;
-    }
-    
-    public String getDir()
-    {
-        return dir;
-    }
-
-    public void setDir(String dir)
-    {
-        this.dir = dir;
-    }
-    
-    public boolean getRecursive()
-    {
-        return recursive;
-    }
-
-    public void setRecursive(boolean recursive)
-    {
-        this.recursive = recursive;
-    }
-    
-    public boolean getFast()
-    {
-        return fast;
-    }
-
-    public void setFast(boolean fast)
-    {
-        this.fast = fast;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Synchronize.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-
-/**
- * This object is used to Synchronize a ccm project.
- *
- */
-public class Synchronize extends CcmCommand
-{
-    private String project;
-    private boolean recursive = true;
-    
-
-    public String getProject()
-    {
-        return project;
-    }
-
-    public void setProject(String project)
-    {
-        this.project = project;
-    }
-    
-    public boolean getRecursive()
-    {
-        return recursive;
-    }
-
-    public void setRecursive(boolean recursive)
-    {
-        this.recursive = recursive;
-    } 
-    
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Update.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-/**
- * This object is used to update a ccm project.
- *
- */
-public class Update extends CcmCommand
-{
-    private String project;
-
-    public String getProject()
-    {
-        return project;
-    }
-
-    public void setProject(String project)
-    {
-        this.project = project;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/ccm/commands/Workarea.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
-* 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.ant.taskdefs.ccm.commands;
-/**
- * Creates interface to get\set workarea informations for a given project.
- *
- */
-public class Workarea extends CcmCommand
-{
-    private String project;
-    private String path;
-    private String pst;
-    private boolean maintain;
-    private boolean recursive;
-    private boolean relative;
-    private boolean wat;
-
-    public String getProject()
-    {
-        return project;
-    }
-
-    public void setProject(String project)
-    {
-        this.project = project;
-    }
-    
-    public boolean getMaintain()
-    {
-        return maintain;
-    }
-
-    public void setMaintain(boolean maintain)
-    {
-        this.maintain = maintain;
-    }
-    
-    public boolean getRecursive()
-    {
-        return recursive;
-    }
-
-    public void setRecursive(boolean recursive)
-    {
-        this.recursive = recursive;
-    }
-
-    public boolean getRelative()
-    {
-        return relative;
-    }
-
-    public void setRelative(boolean relative)
-    {
-        this.relative = relative;
-    }
-
-    public String getPath()
-    {
-        return path;
-    }
-
-    public void setPath(String path)
-    {
-        this.path = path;
-    }
-
-    public String getPst()
-    {
-        return pst;
-    }
-
-    public void setPst(String pst)
-    {
-        this.pst = pst;
-    }
-
-    public boolean getWat()
-    {
-        return wat;
-    }
-
-    public void setWat(boolean wat)
-    {
-        this.wat = wat;
-    }
-}
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/Session.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
-* 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.ant.types.ccm;
-
-import org.apache.tools.ant.types.DataType;
-
-/**
- * This class abstract a synergy session.
- * It store the address to an already existing session.
- * @ant.type name="session" category="SCM"
- */
-public class Session extends DataType {
-    // store the ccm_addr value
-    private String addr;
-    
-    /**
-     * Sets the synergy address.
-     * @param addr string representing the ccm_addr
-     */
-    public void setAddr(String addr) {
-        this.addr = addr;
-    }
-    
-    /**
-     * Get the synergy address.
-     * @return string representing the ccm_addr
-     */
-    public String getAddr() {
-        return this.addr;
-    }
-}
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/SessionSet.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* 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.ant.types.ccm;
-
-import org.apache.tools.ant.types.DataType;
-import java.util.Vector;
-
-/**
- * This class implement an Ant Datatype that represents a set of
- * synergy sessions.
- * @ant.type name="sessionset" category="SCM"
- */
-public class SessionSet extends DataType {
-    private Vector<Session> sessions = new Vector<Session>();
-    
-    /**
-     * Create and register a Session object. 
-     * @return a Session object.
-     */
-    public Session createSession() {
-        Session session = new Session();
-        sessions.add(session);
-        return session;
-    }
-    
-    /**
-     * Returns an array of Session object.
-     * @returns an array of Session object
-     */
-    public Session[] getSessions() {
-        Session[] result = new Session[sessions.size()];
-        sessions.copyInto(result);
-        return result; 
-    }
-}
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/Task.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
-* 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.ant.types.ccm;
-
-import org.apache.tools.ant.types.DataType;
-
-/**
- * This class abstract a synergy session.
- * It store the address to an already existing session. 
- */
-public class Task extends DataType {
-    // store the ccm_addr value
-    private String name;
-    
-    /**
-     * Sets the synergy address.
-     * @param name string representing the ccm_addr
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-    
-    /**
-     * Get the synergy address.
-     * @return string representing the ccm_addr
-     */
-    public String getName() {
-        return name;
-    }
-}
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/types/ccm/TaskSet.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* 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.ant.types.ccm;
-
-import org.apache.tools.ant.types.DataType;
-import java.util.Vector;
-
-/**
- * This class abstract a synergy session.
- * It store the address to an already existing session. 
- */
-public class TaskSet extends DataType {
-    // store the Task objects
-    private Vector<Task> tasks = new Vector<Task>();
-    
-    /**
-     * Create and register a Session object. 
-     * @return a Session object.
-     */
-    public Task createTask() {
-        Task task = new Task();
-        tasks.add(task);
-        return task;
-    }
-    
-    /**
-     * Returns an array of Session object.
-     * @returns an array of Session object
-     */
-    public Task[] getSessions() {
-        Task[] result = new Task[tasks.size()];
-        tasks.copyInto(result);
-        return result; 
-    }
-}
-
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ivy/ToolResolver.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ivy/ToolResolver.java	Wed Jun 16 16:51:40 2010 +0300
@@ -132,8 +132,8 @@
                 continue;
             }
             if (versionMatcher.needModuleDescriptor(mrid, foundMrid)) {
-                ResolvedResource r = rmdparser.parse(rres.getResource(), rres.getRevision());
-                ModuleDescriptor md = ((MDResolvedResource)r).getResolvedModuleRevision().getDescriptor();
+                ResolvedResource resolvedResource = rmdparser.parse(rres.getResource(), rres.getRevision());
+                ModuleDescriptor md = ((MDResolvedResource)resolvedResource).getResolvedModuleRevision().getDescriptor();
                 if (md.isDefault()) {
                     Message.debug("\t" + name + ": default md rejected by version matcher requiring module descriptor: " + rres);
                     rejected.add(rres.getRevision() + " (MD)");
@@ -143,7 +143,7 @@
                     rejected.add(rres.getRevision() + " (MD)");
                     continue;
                 } else {
-                    found = r;
+                    found = resolvedResource;
                 }
             } else {
                 found = rres;
@@ -242,13 +242,13 @@
         Message.debug("\t\tm2compatible: " + isM2compatible());
         Message.debug("\t\tivy patterns:");
         for (ListIterator iter = getIvyPatterns().listIterator(); iter.hasNext();) {
-            String p = (String)iter.next();
-            Message.debug("\t\t\t" + p);
+            String pattern = (String)iter.next();
+            Message.debug("\t\t\t" + pattern);
         }
         Message.debug("\t\tartifact patterns:");
         for (ListIterator iter = getArtifactPatterns().listIterator(); iter.hasNext();) {
-            String p = (String)iter.next();
-            Message.debug("\t\t\t" + p);
+            String pattern = (String)iter.next();
+            Message.debug("\t\t\t" + pattern);
         }
     }
 
--- a/buildframework/helium/sf/java/legacy/src/com/nokia/tools/configuration/CONFIGURATIONTool.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/tools/configuration/CONFIGURATIONTool.java	Wed Jun 16 16:51:40 2010 +0300
@@ -17,8 +17,8 @@
 
 package com.nokia.tools.configuration;
 
+import com.nokia.helium.core.ant.MappedVariable;
 import com.nokia.helium.core.ant.types.VariableSet;
-import com.nokia.helium.core.ant.types.Variable;
 import com.nokia.tools.*;
 import org.apache.tools.ant.Project;
 
@@ -45,7 +45,7 @@
         String report = null;
         String varName;
         String value;
-        for (Variable variable : varSet.getVariables()) {
+        for (MappedVariable variable : varSet.getVariables()) {
             varName = variable.getName();
             value = variable.getValue();
             if (varName.equals("path")) {
--- a/buildframework/helium/sf/java/legacy/tests/antunit/test_deconfigure_task.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : test_deconfigure_task.ant.xml 
-Part of     : Helium 
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="test_deconfigure_task" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>
-        Deconfigure testing targets for script deconfigure.pl
-    </description>
-    <property environment="env"/>
-    <taskdef resource="com/nokia/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-  
-
-    <target name="test-deconfigure-no-arguments-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:deconfigure/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-deconfigure-task-database-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - password ccmProject">
-            <hlm:deconfigure database="to1tobet"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-    </target>
-
-    <target name="test-deconfigure-task-ccmproject-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database password">
-            <hlm:deconfigure ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-    </target>
-
-    <target name="test-deconfigure-task-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database ccmProject">
-            <hlm:deconfigure password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set password to ******"/>
-    </target>
-
-    <target name="test-deconfigure-task-consider-branch-releases-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:deconfigure considerBranchReleases="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set considerBranchReleases to true"/>
-    </target>
-
-    <target name="test-deconfigure-task-verbosity-set-to-quiet-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:deconfigure verbosity="0"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 0"/>
-    </target>
-
-    <target name="test-deconfigure-task-verbosity-set-to-verbose-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:deconfigure verbosity="1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 1"/>
-    </target>
-
-    <target name="test-deconfigure-task-verbosity-set-to-very-verbose-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:deconfigure verbosity="2"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 2"/>
-    </target>
-
-    <target name="test-deconfigure-task-database-and-ccmproject-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - password">
-            <hlm:deconfigure database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-deconfigure-task-database-and-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - ccmProject">
-            <hlm:deconfigure database="to1tobet" password="test"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-deconfigure-task-ccmproject-and-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: mandatory attributes are not defined - database">
-            <hlm:deconfigure ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-deconfigure-task-all-mandatory-arguments-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: Script execution failure.">
-            <hlm:deconfigure database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-        <au:assertLogContains text="Set password to ******" />
-    </target>
-
-    <target name="test-deconfigure-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: Script execution failure.">
-            <hlm:deconfigure database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" considerBranchReleases="yes" verbosity="1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******" />
-        <au:assertLogContains text="Set considerBranchReleases to true" />
-        <au:assertLogContains text="Set verbosity to 1" />
-    </target>
-
-    <target name="test-deconfigure-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-and-verbosity-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:deconfigure] Error: Verbosity level is not recognised. Legal values are: 0 - quiet, 1 - verbose or 2 - very verbose">
-            <hlm:deconfigure database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" considerBranchReleases="no" verbosity="9"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1"/>
-        <au:assertLogContains text="Set password to ******" />
-        <au:assertLogContains text="Set considerBranchReleases to false" />
-        <au:assertLogContains text="Set verbosity to 9" />
-    </target>
-
-</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/legacy/tests/antunit/test_rebaseanddeconf_task.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : test_rebaseanddeconf_task.ant.xml 
-Part of     : Helium 
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="test_rebaseanddeconf_task" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>
-        Rebaseline and Deconfigure testing targets for script rbt.pl
-    </description>
-    <property environment="env"/>
-    <taskdef resource="com/nokia/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-
-    <target name="test-rebaseanddeconf-no-arguments-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseanddeconf-task-database-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - password">
-            <hlm:rebaseanddeconf database="to1tobet"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-ccmproject-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database">
-            <hlm:rebaseanddeconf password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set password to ******" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-release-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf release="tony/test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set release to tony/test" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-baseline-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-version-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf version="RnD_2007wk49"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set version to RnD_2007wk49" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-releasebaseline-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf releaseBaseline="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set releaseBaseline to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-leavefolders-writable-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf leaveFoldersWritable="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set leaveFoldersWritable to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-enabletask-rebadging-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf enableTaskRebadging="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set enableTaskRebadging to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-enabletask-rebadging-generic-release-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf enableTaskRebadgingGenericRelease="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set enableTaskRebadgingGenericRelease to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-rebadge-object-versions-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf rebadgeObjectVersions="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set rebadgeObjectVersions to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-newbaselinename-set-to-quiet-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf newBaselineName="shoephone-RnD_2007wk49_01project:co1train#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set newBaselineName to shoephone-RnD_2007wk49_01project:co1train#1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-use-branchrelease-methodology-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf useBranchReleaseMethodology="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set useBranchReleaseMethodology to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-create-baseline-for-rollingreleasetag-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf createBaselineForRollingReleaseTag="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set createBaselineForRollingReleaseTag to true" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-verbosity-set-to-quiet-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf verbosity="0"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 0" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-verbosity-set-to-verbose-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseanddeconf verbosity="1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-database-and-ccmproject-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - password">
-            <hlm:rebaseanddeconf database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseanddeconf-task-database-and-baseline-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - password">
-            <hlm:rebaseanddeconf database="to1tobet" baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-    </target>
-    
-    <target name="test-rebaseanddeconf-task-ccmproject-and-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database">
-            <hlm:rebaseanddeconf ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseanddeconf-task-baseline-and-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: mandatory attributes are not defined - database">
-            <hlm:rebaseanddeconf baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-        <au:assertLogContains text="Set password to ******" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-with-ccmproject-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Script execution failure.">
-            <hlm:rebaseanddeconf database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-        <au:assertLogContains text="Set password to ******" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-with-baseline-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Script execution failure.">
-            <hlm:rebaseanddeconf database="to1tobet" baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-        <au:assertLogContains text="Set password to ******" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Script execution failure.">
-            <hlm:rebaseanddeconf database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******"/>
-        <au:assertLogContains text="Set verbosity to 1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-and-verbosity-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Verbosity level is not recognised. Legal values are: 0 - quiet, 1 - verbose, 2 - Interactive or 3 - Walk-through Rehearsal">
-            <hlm:rebaseanddeconf database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="9"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******"/>
-        <au:assertLogContains text="Set verbosity to 9" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-database-password-ccmproject-and-baseline-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Option 'baseline' cannot be used with 'ccmProject' and 'newBaselineName'">
-            <hlm:rebaseanddeconf database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="1"
-                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******"/>
-        <au:assertLogContains text="Set verbosity to 1" />
-        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-database-password-baseline-newbaselineName-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Option 'baseline' cannot be used with 'ccmProject' and 'newBaselineName'">
-            <hlm:rebaseanddeconf database="to1tobet" password="test" verbosity="1"
-                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" newBaselineName="shoephone-RnD_2007wk49_01project:co1train#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******"/>
-        <au:assertLogContains text="Set verbosity to 1" />
-        <au:assertLogContains text="Set newBaselineName to shoephone-RnD_2007wk49_01project:co1train#1" />
-    </target>
-
-    <target name="test-rebaseanddeconf-task-database-password-baseline-enabletaskrebadging-and-enabletaskrebadginggenericrelease-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Use Option either 'enableTaskRebadging' or 'enableTaskRebadgingGenericRelease'">
-            <hlm:rebaseanddeconf database="to1tobet" password="test" verbosity="1"
-                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" enableTaskRebadging="yes" enableTaskRebadgingGenericRelease="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******" />
-        <au:assertLogContains text="Set verbosity to 1" />
-        <au:assertLogContains text="Set enableTaskRebadging to true" />
-        <au:assertLogContains text="Set enableTaskRebadgingGenericRelease to true" />
-    </target>
-    
-    <target name="test-rebaseanddeconf-task-database-password-baseline-replacesubprojects-and-dontreplacesubprojects-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseanddeconf] Error: Use option either 'deconfigure' or 'skipDeconfigure'">
-            <hlm:rebaseanddeconf database="to1tobet" password="test" verbosity="1"
-                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" deconfigure="yes" skipDeconfigure="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******"/>
-        <au:assertLogContains text="Set verbosity to 1" />
-        <au:assertLogContains text="Set deconfigure to true" />
-        <au:assertLogContains text="Set skipDeconfigure to true" />
-    </target>
-</project>
--- a/buildframework/helium/sf/java/legacy/tests/antunit/test_rebaseline_task.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : test_rebaseline_task.ant.xml 
-Part of     : Helium 
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="test_rebaseline_task" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>
-        Rebaseline testing targets for script rebaseline.pl
-    </description>
-    <property environment="env"/>
-    <taskdef resource="com/nokia/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-
-
-    <target name="test-rebaseline-no-arguments-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseline-task-database-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - password ccmProject">
-            <hlm:rebaseline database="to1tobet"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-    </target>
-
-    <target name="test-rebaseline-task-ccmproject-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password">
-            <hlm:rebaseline ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-    </target>
-
-    <target name="test-rebaseline-task-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database ccmProject">
-            <hlm:rebaseline password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set password to ******" />
-    </target>
-
-    <target name="test-rebaseline-task-release-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline release="tony/test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set release to tony/test" />
-    </target>
-
-    <target name="test-rebaseline-task-baseline-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-    </target>
-
-    <target name="test-rebaseline-task-version-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline version="RnD_2007wk49"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set version to RnD_2007wk49" />
-    </target>
-
-    <target name="test-rebaseline-task-releasebaseline-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline releaseBaseline="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set releaseBaseline to true" />
-    </target>
-
-    <target name="test-rebaseline-task-leavefolders-writable-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline leaveFoldersWritable="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set leaveFoldersWritable to true" />
-    </target>
-
-    <target name="test-rebaseline-task-disable-taskrebadging-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline disableTaskRebadging="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set disableTaskRebadging to true" />
-    </target>
-
-    <target name="test-rebaseline-task-rebadgeobjectversions-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline rebadgeObjectVersions="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set rebadgeObjectVersions to true" />
-    </target>
-
-    <target name="test-rebaseline-task-newbaselineName-set-to-quiet-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline newBaselineName="shoephone-RnD_2007wk49_01project:co1train#1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set newBaselineName to shoephone-RnD_2007wk49_01project:co1train#1" />
-    </target>
-
-    <target name="test-rebaseline-task-usebranchrelease-methodology-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline useBranchReleaseMethodology="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set useBranchReleaseMethodology to true" />
-    </target>
-
-    <target name="test-rebaseline-task-create-baseline-for-rollingreleasetag-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline createBaselineForRollingReleaseTag="yes"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set createBaselineForRollingReleaseTag to true" />
-    </target>
-
-    <target name="test-rebaseline-task-verbosity-set-to-quiet-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline verbosity="0"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 0" />
-    </target>
-
-    <target name="test-rebaseline-task-verbosity-set-to-verbose-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database password ccmProject">
-            <hlm:rebaseline verbosity="1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set verbosity to 1" />
-    </target>
-
-    <target name="test-rebaseline-task-database-and-ccmproject-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - password">
-            <hlm:rebaseline database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseline-task-database-and-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - ccmProject">
-            <hlm:rebaseline database="to1tobet" password="test"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseline-task-ccmproject-and-password-set-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: mandatory attributes are not defined - database">
-            <hlm:rebaseline ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-    </target>
-
-    <target name="test-rebaseline-task-all-mandatory-arguments-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: Script execution failure.">
-            <hlm:rebaseline database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
-        <au:assertLogContains text="Set password to ******"/>
-    </target>
-
-    <target name="test-rebaseline-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: Script execution failure.">
-            <hlm:rebaseline database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="1"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******" />
-        <au:assertLogContains text="Set verbosity to 1" />
-    </target>
-
-    <target name="test-rebaseline-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-and-verbosity-wrong-case">
-        <au:expectfailure expectedMessage="[hlm:rebaseline] Error: Verbosity level is not recognised. Legal values are: 0 - quiet, 1 - verbose.">
-            <hlm:rebaseline database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="9"/>
-        </au:expectfailure>
-        <au:assertLogContains text="Set database to to1tobet" />
-        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
-        <au:assertLogContains text="Set password to ******" />
-        <au:assertLogContains text="Set verbosity to 9" />
-    </target>
-
-</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,9 +22,9 @@
 -->
 <antlib>
     <!-- Task definition -->
-    <taskdef name="record" classname="com.nokia.helium.logger.ant.taskdefs.LogRecorder"/>
-    <taskdef name="logreplace" classname="com.nokia.helium.logger.ant.taskdefs.LogReplace"/>
-    <taskdef name="triggerlogger" classname="com.nokia.helium.logger.ant.taskdefs.TriggerLogger"/>
+    <taskdef name="record" classname="com.nokia.helium.logger.ant.taskdefs.LogRecorderTask"/>
+    <taskdef name="logreplace" classname="com.nokia.helium.logger.ant.taskdefs.LogReplaceTask"/>
+    <taskdef name="triggerlogger" classname="com.nokia.helium.logger.ant.taskdefs.TriggerLoggerTask"/>
     
     <!-- Type definition -->
     <typedef name="stagerecord" classname="com.nokia.helium.logger.ant.types.StageLogging"/>
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/AntLoggingHandler.java	Wed Jun 16 16:51:40 2010 +0300
@@ -44,15 +44,14 @@
  */
 public class AntLoggingHandler implements Handler {
     private static Hashtable<File, RecorderEntry> recorderEntries = new Hashtable<File, RecorderEntry>();
+    private static HashMap<File, Boolean> fileCreatedMap = new HashMap<File, Boolean>();
+    private static boolean isDefaultStageStarted;
     private Map<String, Stage> stagesMapping;
     private Map<String, StageLogging> stageRecordMap;
     private HashMap<String, Vector<Target>> depStartTargetMap;
     private HashMap<String, Target> stageStartTargetMap;
-    private HashMap<File, Boolean> fileCreatedMap;
     private boolean isStageRecordingHappening;
     private boolean loggingStarted;
-    private boolean isStageInformationInited;
-    private boolean isDefaultStageStarted;
     private int loglevel = -1;
     private VerbosityLevelChoices antLogLevel;
     private Logger log = Logger.getLogger(AntLoggingHandler.class);
@@ -71,7 +70,7 @@
         stageRecordMap = new HashMap<String, StageLogging>();
         depStartTargetMap = new HashMap<String, Vector<Target>>();
         stageStartTargetMap = new HashMap<String, Target>();
-        fileCreatedMap = new HashMap<File, Boolean>();
+        initStagesInformation(project);
     }
 
     /**
@@ -93,7 +92,11 @@
             log.debug("Stopping stage logging for  [" + currentStageName
                     + "] for target [" + event.getTarget().getName() + "]");
             stopLog(currentStageName, "default");
-            startLog("default");
+            if (!isDefaultStageStarted)
+            {
+                startLog("default");
+                isDefaultStageStarted = true;
+            }
             currentStageName = null;
         }
     }
@@ -104,25 +107,23 @@
     public void handleTargetStarted(BuildEvent event) {
 
         // log.debug("Started target [" + event.getTarget().getName() + "]");
-        if (!this.isStageInformationInited) {
-            initStagesInformation(event.getProject());
-            this.isStageInformationInited = true;
+
+        if (getLoggingStarted() && !isDefaultStageStarted) {
+            startLog("default");
+            isDefaultStageStarted = true;
         }
 
-        if (this.isStageInformationInited && getLoggingStarted()
-                && !this.isDefaultStageStarted) {
-            startLog("default");
-            this.isDefaultStageStarted = true;
-        }
-
-        if (currentStageName == null && !getIsStageRecordingHappening()
-                && (getLoggingStarted())) {
-            String stageName = isStageValid(event.getTarget(), event
-                    .getProject());
+        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() + "]");
-                stopLog("default", stageName);
+
+                if (isDefaultStageStarted)
+                {
+                    stopLog("default", stageName);
+                    isDefaultStageStarted = false;
+                }
                 startLog(stageName);
                 currentStageName = stageName;
             }
@@ -147,7 +148,11 @@
          */
         if (getLoggingStarted() && getIsStageRecordingHappening()) {
             stopLog(currentStageName, "default");
-            startLog("default");
+            if (!isDefaultStageStarted)
+            {
+                startLog("default");
+                isDefaultStageStarted = true;
+            }
             currentStageName = null;
         }
 
@@ -155,8 +160,9 @@
          * If default stage logging happening stop logging into default ant log
          * file.
          */
-        if (this.isDefaultStageStarted && getLoggingStarted()) {
+        if (isDefaultStageStarted && getLoggingStarted()) {
             stopLog("default", null, event);
+            isDefaultStageStarted = false;
         }
         this.cleanup();
     }
@@ -202,6 +208,7 @@
     private void cleanup() {
         log.debug("Cleaning up recorder entries of stagerecord");
         recorderEntries.clear();
+        fileCreatedMap.clear();
 
     }
 
@@ -239,6 +246,8 @@
         String time = getDateTime();
         File fileName;
         if (stageName.equalsIgnoreCase("default")) {
+            if (stageRecordMap.get("default") == null)
+                throw new BuildException("stageRecordMap.get('default') is null");
             fileName = stageRecordMap.get("default").getDefaultOutput();
         } else {
             fileName = stageRecordMap.get(stageName).getOutput();
@@ -337,7 +346,6 @@
      * @param stageName
      */
     private void startLog(String stageName) {
-
         File fileName;
         String message;
         String time = getDateTime();
@@ -371,8 +379,7 @@
      * @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()) {
@@ -381,12 +388,8 @@
             }
             if (fileName.exists()) {
                 long timestamp = System.currentTimeMillis();
-                StatusAndLogListener.getStatusAndLogListener().getProject()
-                        .log(
-                                "Backing up of " + fileName + " into "
-                                        + fileName + "." + timestamp);
-                fileName.renameTo(new File(fileName.getAbsoluteFile() + "."
-                        + 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);
@@ -416,7 +419,6 @@
      */
     private void stopLog(String stopStageName, String startStageName,
             BuildEvent event) {
-
         File fileName;
         String message;
         String time = getDateTime();
@@ -463,7 +465,8 @@
         recorderEntry.setMessageOutputLevel(loglevel);
         recorderEntry.setEmacsMode(false);
         recorderEntry.setRecordState(false);
-        fileCreatedMap.put(fileName, false);
+        if (fileCreatedMap.get(fileName) == null)
+            fileCreatedMap.put(fileName, false);
     }
 
     /**
@@ -474,14 +477,9 @@
      * @return
      */
     private String isStageValid(Target target, Project proj) {
-
-        if (!proj.getName().equals(
-                StatusAndLogListener.getStatusAndLogListener().getProject()
-                        .getName())
-                && (StatusAndLogListener.getStatusAndLogListener().getProject()
-                        .getName() != null)) {
+        //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())
@@ -672,8 +670,7 @@
                 }
             }
         }
-        throw new BuildException(
-                "There should be one default stagerecord datatype.");
+        throw new BuildException("There should be one default stagerecord datatype.");
     }
 
     /**
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/RecorderEntry.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/RecorderEntry.java	Wed Jun 16 16:51:40 2010 +0300
@@ -333,14 +333,14 @@
      * Registering ourselves to the StatusAndLogListener.
      */
     public void register() {
-        StatusAndLogListener l = StatusAndLogListener.getStatusAndLogListener();
-        if (l != null) {
+        StatusAndLogListener listener = StatusAndLogListener.getStatusAndLogListener();
+        if (listener != null) {
             this.log.debug("register");
-            synchronized (l) {
-                l.register((BuildEventHandler)this);
-                l.register((TargetEventHandler)this);
-                l.register((TaskEventHandler)this);
-                l.register((MessageEventHandler)this);
+            synchronized (listener) {
+                listener.register((BuildEventHandler)this);
+                listener.register((TargetEventHandler)this);
+                listener.register((TaskEventHandler)this);
+                listener.register((MessageEventHandler)this);
             }
         }
     }
@@ -349,14 +349,14 @@
      * Unregistering ourselves from the StatusAndLogListener.
      */
     public void unregister() {
-        StatusAndLogListener l = StatusAndLogListener.getStatusAndLogListener();
-        if (l != null) {
+        StatusAndLogListener listener = StatusAndLogListener.getStatusAndLogListener();
+        if (listener != null) {
             this.log.debug("unregister");
-            synchronized (l) {
-                l.remove((MessageEventHandler)this);
-                l.remove((TaskEventHandler)this);
-                l.remove((TargetEventHandler)this);
-                l.remove((BuildEventHandler)this);
+            synchronized (listener) {
+                listener.remove((MessageEventHandler)this);
+                listener.remove((TaskEventHandler)this);
+                listener.remove((TargetEventHandler)this);
+                listener.remove((BuildEventHandler)this);
             }
         }
     }
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StatusAndLogListener.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/listener/StatusAndLogListener.java	Wed Jun 16 16:51:40 2010 +0300
@@ -188,7 +188,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void register ( Handler handler ) {
+    public synchronized void register( Handler handler ) {
         Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers);
         tmpBuildHandlers.add( handler );
         buildHandlers = tmpBuildHandlers;
@@ -203,7 +203,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void remove ( Handler handler ) {
+    public synchronized void remove( Handler handler ) {
         Vector<BuildEventHandler> tmpBuildHandlers = new Vector<BuildEventHandler>(buildHandlers);
         tmpBuildHandlers.remove( handler );
         buildHandlers = tmpBuildHandlers;
@@ -218,7 +218,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void register ( BuildEventHandler handler ) {
+    public synchronized void register( BuildEventHandler handler ) {
         Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
         tmp.add( handler );
         buildHandlers = tmp;
@@ -230,7 +230,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void remove ( BuildEventHandler handler ) {
+    public synchronized void remove( BuildEventHandler handler ) {
         Vector<BuildEventHandler> tmp = new Vector<BuildEventHandler>(buildHandlers);
         tmp.remove( handler );
         buildHandlers = tmp;
@@ -242,7 +242,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void register ( TargetEventHandler handler ) {
+    public synchronized void register( TargetEventHandler handler ) {
         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
         tmp.add( handler );
         targetHandlers  = tmp;
@@ -254,7 +254,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void remove ( TargetEventHandler handler ) {
+    public synchronized void remove( TargetEventHandler handler ) {
         Vector<TargetEventHandler> tmp = new Vector<TargetEventHandler>(targetHandlers);
         tmp.remove( handler );
         targetHandlers  = tmp;
@@ -267,7 +267,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void register ( SubBuildEventHandler handler ) {
+    public synchronized void register( SubBuildEventHandler handler ) {
         Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers);
         tmp.add( handler );
         subBuildHandlers  = tmp;
@@ -279,7 +279,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void remove ( SubBuildEventHandler handler ) {
+    public synchronized void remove( SubBuildEventHandler handler ) {
         Vector<SubBuildEventHandler> tmp = new Vector<SubBuildEventHandler>(subBuildHandlers);
         tmp.remove( handler );
         subBuildHandlers  = tmp;
@@ -291,7 +291,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void register ( MessageEventHandler handler ) {
+    public synchronized void register( MessageEventHandler handler ) {
         Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers);
         tmp.add( handler );
         messageHandlers  = tmp;
@@ -303,7 +303,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void remove ( MessageEventHandler handler ) {
+    public synchronized void remove( MessageEventHandler handler ) {
         Vector<MessageEventHandler> tmp = new Vector<MessageEventHandler>(messageHandlers);
         tmp.remove( handler );
         messageHandlers  = tmp;
@@ -315,7 +315,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void register ( TaskEventHandler handler ) {
+    public synchronized void register( TaskEventHandler handler ) {
         Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers);
         tmp.add( handler );
         taskHandlers  = tmp;
@@ -327,7 +327,7 @@
      * @param handler
      *            is the handler to register
      */
-    public synchronized void remove ( TaskEventHandler handler ) {
+    public synchronized void remove( TaskEventHandler handler ) {
         Vector<TaskEventHandler> tmp = new Vector<TaskEventHandler>(taskHandlers);
         tmp.remove( handler );
         taskHandlers  = tmp;
@@ -339,7 +339,7 @@
      * @return
      */
     public Project getProject() {
-      return project;   
+      return project;
     }
     
     /**
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorder.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,368 +0,0 @@
-/*
-* 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.logger.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.LogLevel;
-
-import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
-import com.nokia.helium.logger.ant.listener.Handler;
-import com.nokia.helium.logger.ant.listener.RecorderEntry;
-import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
-import com.nokia.helium.logger.ant.types.RecordFilter;
-import com.nokia.helium.logger.ant.types.RecordFilterSet;
-
-/**
- * For recording ant logging output.
- *  
- * <pre>
- *      &lt;hlm:record name="${build.log.dir}/${build.id}_test.log" action="start" append="false" backup="true" loglevel="info"&gt;
- *           &lt;hlm:recordfilterset refid="recordfilter.config"/&gt;
- *           &lt;hlm:recordfilter category="info" regexp="^INFO:" /&gt;
- *      &lt;/hlm:record&gt;
- *      
- * </pre>
- * 
- * @ant.task name="Record" category="Logging".
- *
- */
-
-public class LogRecorder extends Task implements Handler {
-    
-    private static Hashtable<File, RecorderEntry> recorderEntries = new Hashtable<File, RecorderEntry>();
-    private File fileName;
-    private boolean append ;
-    private Boolean start ;
-    private boolean backup;
-    private String backupProperty;
-    private int loglevel = -1;
-    private boolean emacsMode ;
-    private Vector<RecordFilter> recordFilters = new Vector<RecordFilter>();
-    private Vector<RecordFilterSet> recordFilterSet = new Vector<RecordFilterSet>();
-    private Vector<String> regExpList = new Vector<String>();
-    
-    
-    /**
-     * Run by the task.
-     */
-    public void execute () {
-        if (StatusAndLogListener.getStatusAndLogListener() == null) {
-            log("The StatusAndLogListener is not available.", Project.MSG_WARN);
-            return;
-        }
-        AntLoggingHandler antLoggingHandler  = (AntLoggingHandler)StatusAndLogListener.getStatusAndLogListener().getHandler(AntLoggingHandler.class);
-        
-        /* To validate attributes passed. */
-        validateAttributes();
-        
-        /* to add regular filters */
-        addAllRecordFilters();
-        
-        
-        /* Init password/record filter and replace any unset properties */
-        initAndReplaceProperties();
-        
-        //Create the root folder path.
-        if (this.start && this.start.booleanValue() && this.backup) {
-            if (fileName.exists()) {
-                File backupFile;
-                try {
-                    backupFile = File.createTempFile(fileName.getName(), null, fileName.getParentFile());
-                    backupFile.delete();
-                    log("Backing up " + fileName + " as " + backupFile);
-                    if (!fileName.renameTo(backupFile)) {
-                        log("Error renaming the backup file.", Project.MSG_ERR);
-                    }
-                    if (backupFile.exists() && backupProperty != null) {
-                        getProject().setNewProperty(backupProperty, backupFile.getAbsolutePath());
-                    }
-                } catch (IOException e) {
-                    log("Error creating the backup file: " + e, Project.MSG_ERR);
-                }
-            }    
-        }
-        if (!fileName.getParentFile().exists()) {
-            fileName.getParentFile().mkdirs();
-        }
-
-        RecorderEntry recorder = getRecorder(fileName, getProject());
-        // set the values on the recorder
-        recorder.setMessageOutputLevel(loglevel);
-        recorder.setEmacsMode(emacsMode);
-        if (start != null) {
-            if (start.booleanValue()) {
-                if (antLoggingHandler != null) {
-                    if (antLoggingHandler.getCurrentStageName() != null) {
-                        antLoggingHandler.doLoggingAction(antLoggingHandler.getCurrentStageName(), false, "Stopping", this, getOwningTarget());
-                    } else {
-                        antLoggingHandler.doLoggingAction("default", false, "Stopping", this, getOwningTarget());
-                    }
-                }
-                recorder.reopenFile();
-                recorder.setRecordState(start.booleanValue());
-            } else {
-                recorder.setRecordState(start.booleanValue());
-                recorder.closeFile();
-                if (antLoggingHandler != null) {
-                    if (antLoggingHandler.getCurrentStageName() != null) {
-                        antLoggingHandler.doLoggingAction(antLoggingHandler.getCurrentStageName(), true, "Starting", this, getOwningTarget());
-                    } else {
-                        antLoggingHandler.doLoggingAction("default", true, "Starting", this, getOwningTarget());
-                    }
-                }
-            }
-        }
-        
-    }
-    /**
-     * To Validate is the fileName set for recording.
-     */
-    private void validateAttributes() {
-        if (fileName == null) {
-            throw new BuildException("filename attribute should be specified for helium recorder task.");
-        }
-        
-    }
-
-    /**
-     * Set the file name to record.
-     * @param fileName
-     * @ant.required
-     */
-    public void setName(File fileName) {
-        this.fileName = fileName;
-    }
-    
-    /**
-     * Return the fileName.
-     * @return
-     */
-    public File getName() {
-        return this.fileName;
-    }
-    
-    /**
-     * Set the append parameter.
-     * @param append
-     * @ant.not-required Default is false
-     */
-    public void setAppend(boolean append) {
-        this.append = append;
-    }
-    
-    
-    
-    /**
-     * Enable backup of 
-     * @param backup 
-     * @ant.not-required
-     */
-    public void setBackup(boolean backup) {
-        this.backup = backup;
-    }
-
-    /**
-     * Name of the property that will contains the backed up log.
-     * @param property a property name.
-     * @ant.not-required Only works if backup is true.
-     */
-    public void setBackupProperty(String property) {
-        this.backupProperty = property;
-    }
-    
-    /**
-     * Set logLevel to log the information.
-     * @param level
-     * @ant.not-required
-     */
-    public void setLoglevel(VerbosityLevelChoices level) {
-        loglevel = level.getLevel();
-    }
-    
-    /**
-     * Set the EmacsMode.
-     * @param emacsMode
-     * @ant.not-required
-     */
-    public void setEmacsMode(boolean emacsMode) {
-        this.emacsMode = emacsMode;
-    }
-    
-    /**
-     * Return the emacsMode.
-     * @return
-     */
-    public boolean getEmacsMode() {
-        return this.emacsMode;
-    }
-    
-    /**
-     * create the type of recorderfilter.
-     * @param logFilter
-     */
-    public void addRecordFilter(RecordFilter logFilter) {
-        if (!recordFilters.contains(logFilter)) {
-            recordFilters.add(logFilter);
-        }
-    }
-    
-    /**
-     * Create the type of recoderfilterset
-     * @param logFilterSet
-     */
-    public void addRecordFilterSet(RecordFilterSet logFilterSet) {
-        if (!recordFilterSet.contains(logFilterSet)) {
-            recordFilterSet.add(logFilterSet);
-        }
-    }
-    
-    /**
-     * Set the action of stop/start.
-     * @param action
-     * @ant.not-required
-     */
-    public void setAction(ActionChoices action) {
-        if (action.getValue().equalsIgnoreCase("start")) {
-            start = Boolean.TRUE;
-        } else {
-            start = Boolean.FALSE;
-        }
-    }
-    
-    /**
-     * To get the action state of current recorder.
-     * @return
-     */
-    public boolean getAction() {
-        return start.booleanValue();
-    }
-    
-    
-    /**
-     * A list of possible values for the <code>setAction()</code> method.
-     * Possible values include: start and stop.
-     */
-    public static class ActionChoices extends EnumeratedAttribute {
-        private static final String[] VALUES = {"start", "stop"};
-
-        /**
-         * @see EnumeratedAttribute#getValues()
-         */
-        /** {@inheritDoc}. */
-        public String[] getValues() {
-            return VALUES;
-        }
-    }
-    
-    /**
-     * To set the verbosity levels
-     * 
-     *
-     */
-    public static class VerbosityLevelChoices extends LogLevel {
-    }
-    
-    
-    /**
-     * To register the recorder entry
-     */
-    protected RecorderEntry getRecorder(File name, Project proj) {
-        RecorderEntry entry = recorderEntries.get(name);
-        if (entry == null) {
-            // create a recorder entry
-            entry = new RecorderEntry(name);
-            for (String regExp : regExpList) {
-                if (!regExp.equals("")) {
-                    String pattern = Pattern.quote(regExp);
-                    entry.addRegexp(pattern);
-                }
-            }
-            entry.openFile(append);
-            recorderEntries.put(fileName, entry);
-        }
-        return entry;
-    }
-    
-    /**
-     * Get all the recorderfilters from recorderfilterset refid.
-     */
-    public void addAllRecordFilters() {
-        for (RecordFilterSet recFilterSet : recordFilterSet ) {
-            recordFilters.addAll(recFilterSet.getAllFilters());
-        }
-    }
-    
-    public void handleBuildFinished(BuildEvent event) {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void handleBuildStarted(BuildEvent event) {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void handleTargetFinished(BuildEvent event) {
-        // TODO Auto-generated method stub
-    }
-
-    public void handleTargetStarted(BuildEvent event) {
-        // TODO Auto-generated method stub
-
-    }
-    
-    /**
-     * To init password and record filters. 
-     * Replace with values if any property values are unset.
-     */
-    public void initAndReplaceProperties() {
-        
-        Pattern pattern = null; 
-        Matcher match = null;
-        for (RecordFilter recordFilter : recordFilters) { 
-            if (recordFilter.getRegExp() == null) {
-                throw new BuildException("\"regexp\" attribute should not have null value for recordfilter");
-            }
-            if (recordFilter.getRegExp() != null) {
-                pattern = Pattern.compile("\\$\\{(.*)}");
-                match = pattern.matcher(recordFilter.getRegExp());
-                if (match.find()) {
-                    regExpList.add(getProject().replaceProperties(recordFilter.getRegExp()));
-                } else {
-                    regExpList.add(recordFilter.getRegExp());
-                }
-            }
-        }
-    }
-    
-    
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogRecorderTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,368 @@
+/*
+* 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.logger.ant.taskdefs;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.tools.ant.BuildEvent;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.EnumeratedAttribute;
+import org.apache.tools.ant.types.LogLevel;
+
+import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
+import com.nokia.helium.logger.ant.listener.Handler;
+import com.nokia.helium.logger.ant.listener.RecorderEntry;
+import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
+import com.nokia.helium.logger.ant.types.RecordFilter;
+import com.nokia.helium.logger.ant.types.RecordFilterSet;
+
+/**
+ * For recording ant logging output.
+ *  
+ * <pre>
+ *      &lt;hlm:record name="${build.log.dir}/${build.id}_test.log" action="start" append="false" backup="true" loglevel="info"&gt;
+ *           &lt;hlm:recordfilterset refid="recordfilter.config"/&gt;
+ *           &lt;hlm:recordfilter category="info" regexp="^INFO:" /&gt;
+ *      &lt;/hlm:record&gt;
+ *      
+ * </pre>
+ * 
+ * @ant.task name="Record" category="Logging".
+ *
+ */
+
+public class LogRecorderTask extends Task implements Handler {
+    
+    private static Hashtable<File, RecorderEntry> recorderEntries = new Hashtable<File, RecorderEntry>();
+    private File fileName;
+    private boolean append ;
+    private Boolean start ;
+    private boolean backup;
+    private String backupProperty;
+    private int loglevel = -1;
+    private boolean emacsMode ;
+    private Vector<RecordFilter> recordFilters = new Vector<RecordFilter>();
+    private Vector<RecordFilterSet> recordFilterSet = new Vector<RecordFilterSet>();
+    private Vector<String> regExpList = new Vector<String>();
+    
+    
+    /**
+     * Run by the task.
+     */
+    public void execute() {
+        StatusAndLogListener statusAndLogListener = new StatusAndLogListener();
+        AntLoggingHandler antLoggingHandler = new AntLoggingHandler(getProject());
+        antLoggingHandler.setLoggingStarted(true);
+        statusAndLogListener.register(antLoggingHandler);
+            
+        /* To validate attributes passed. */
+        validateAttributes();
+        
+        /* to add regular filters */
+        addAllRecordFilters();
+        
+        /* Init password/record filter and replace any unset properties */
+        initAndReplaceProperties();
+        
+        //Create the root folder path.
+        if (this.start && this.start.booleanValue() && this.backup) {
+            if (fileName.exists()) {
+                File backupFile;
+                try {
+                    backupFile = File.createTempFile(fileName.getName(), null, fileName.getParentFile());
+                    backupFile.delete();
+                    log("Backing up " + fileName + " as " + backupFile);
+                    if (!fileName.renameTo(backupFile)) {
+                        log("Error renaming the backup file.", Project.MSG_ERR);
+                    }
+                    if (backupFile.exists() && backupProperty != null) {
+                        getProject().setNewProperty(backupProperty, backupFile.getAbsolutePath());
+                    }
+                } catch (IOException e) {
+                    log("Error creating the backup file: " + e, Project.MSG_ERR);
+                }
+            }    
+        }
+        if (!fileName.getParentFile().exists()) {
+            fileName.getParentFile().mkdirs();
+        }
+
+        RecorderEntry recorder = getRecorder(fileName, getProject());
+        // set the values on the recorder
+        recorder.setMessageOutputLevel(loglevel);
+        recorder.setEmacsMode(emacsMode);
+        if (start != null) {
+            if (start.booleanValue()) {
+                getProject().addBuildListener(statusAndLogListener);
+                if (antLoggingHandler != null) {
+                    if (antLoggingHandler.getCurrentStageName() != null) {
+                        antLoggingHandler.doLoggingAction(antLoggingHandler.getCurrentStageName(), false, "Stopping", this, getOwningTarget());
+                    } else {
+                        antLoggingHandler.doLoggingAction("default", false, "Stopping", this, getOwningTarget());
+                    }
+                }
+                recorder.reopenFile();
+                recorder.setRecordState(start.booleanValue());
+            } else {
+                recorder.setRecordState(start.booleanValue());
+                recorder.closeFile();
+                getProject().removeBuildListener(statusAndLogListener);
+                if (antLoggingHandler != null) {
+                    if (antLoggingHandler.getCurrentStageName() != null) {
+                        antLoggingHandler.doLoggingAction(antLoggingHandler.getCurrentStageName(), true, "Starting", this, getOwningTarget());
+                    } else {
+                        antLoggingHandler.doLoggingAction("default", true, "Starting", this, getOwningTarget());
+                    }
+                }
+            }
+        }
+        
+    }
+    /**
+     * To Validate is the fileName set for recording.
+     */
+    private void validateAttributes() {
+        if (fileName == null) {
+            throw new BuildException("filename attribute should be specified for helium recorder task.");
+        }
+        
+    }
+
+    /**
+     * Set the file name to record.
+     * @param fileName
+     * @ant.required
+     */
+    public void setName(File fileName) {
+        this.fileName = fileName;
+    }
+    
+    /**
+     * Return the fileName.
+     * @return
+     */
+    public File getName() {
+        return this.fileName;
+    }
+    
+    /**
+     * Set the append parameter.
+     * @param append
+     * @ant.not-required Default is false
+     */
+    public void setAppend(boolean append) {
+        this.append = append;
+    }
+    
+    
+    
+    /**
+     * Enable backup of 
+     * @param backup 
+     * @ant.not-required
+     */
+    public void setBackup(boolean backup) {
+        this.backup = backup;
+    }
+
+    /**
+     * Name of the property that will contains the backed up log.
+     * @param property a property name.
+     * @ant.not-required Only works if backup is true.
+     */
+    public void setBackupProperty(String property) {
+        this.backupProperty = property;
+    }
+    
+    /**
+     * Set logLevel to log the information.
+     * @param level
+     * @ant.not-required
+     */
+    public void setLoglevel(VerbosityLevelChoices level) {
+        loglevel = level.getLevel();
+    }
+    
+    /**
+     * Set the EmacsMode.
+     * @param emacsMode
+     * @ant.not-required
+     */
+    public void setEmacsMode(boolean emacsMode) {
+        this.emacsMode = emacsMode;
+    }
+    
+    /**
+     * Return the emacsMode.
+     * @return
+     */
+    public boolean getEmacsMode() {
+        return this.emacsMode;
+    }
+    
+    /**
+     * create the type of recorderfilter.
+     * @param logFilter
+     */
+    public void addRecordFilter(RecordFilter logFilter) {
+        if (!recordFilters.contains(logFilter)) {
+            recordFilters.add(logFilter);
+        }
+    }
+    
+    /**
+     * Create the type of recoderfilterset
+     * @param logFilterSet
+     */
+    public void addRecordFilterSet(RecordFilterSet logFilterSet) {
+        if (!recordFilterSet.contains(logFilterSet)) {
+            recordFilterSet.add(logFilterSet);
+        }
+    }
+    
+    /**
+     * Set the action of stop/start.
+     * @param action
+     * @ant.not-required
+     */
+    public void setAction(ActionChoices action) {
+        if (action.getValue().equalsIgnoreCase("start")) {
+            start = Boolean.TRUE;
+        } else {
+            start = Boolean.FALSE;
+        }
+    }
+    
+    /**
+     * To get the action state of current recorder.
+     * @return
+     */
+    public boolean getAction() {
+        return start.booleanValue();
+    }
+    
+    
+    /**
+     * A list of possible values for the <code>setAction()</code> method.
+     * Possible values include: start and stop.
+     */
+    public static class ActionChoices extends EnumeratedAttribute {
+        private static final String[] VALUES = {"start", "stop"};
+
+        /**
+         * @see EnumeratedAttribute#getValues()
+         */
+        /** {@inheritDoc}. */
+        public String[] getValues() {
+            return VALUES;
+        }
+    }
+    
+    /**
+     * To set the verbosity levels
+     * 
+     *
+     */
+    public static class VerbosityLevelChoices extends LogLevel {
+    }
+    
+    
+    /**
+     * To register the recorder entry
+     */
+    protected RecorderEntry getRecorder(File name, Project proj) {
+        RecorderEntry entry = recorderEntries.get(name);
+        if (entry == null) {
+            // create a recorder entry
+            entry = new RecorderEntry(name);
+            for (String regExp : regExpList) {
+                if (!regExp.equals("")) {
+                    String pattern = Pattern.quote(regExp);
+                    entry.addRegexp(pattern);
+                }
+            }
+            entry.openFile(append);
+            recorderEntries.put(fileName, entry);
+        }
+        return entry;
+    }
+    
+    /**
+     * Get all the recorderfilters from recorderfilterset refid.
+     */
+    public void addAllRecordFilters() {
+        for (RecordFilterSet recFilterSet : recordFilterSet ) {
+            recordFilters.addAll(recFilterSet.getAllFilters());
+        }
+    }
+    
+    public void handleBuildFinished(BuildEvent event) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void handleBuildStarted(BuildEvent event) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void handleTargetFinished(BuildEvent event) {
+        // TODO Auto-generated method stub
+    }
+
+    public void handleTargetStarted(BuildEvent event) {
+        // TODO Auto-generated method stub
+
+    }
+    
+    /**
+     * To init password and record filters. 
+     * Replace with values if any property values are unset.
+     */
+    public void initAndReplaceProperties() {
+        
+        Pattern pattern = null; 
+        Matcher match = null;
+        for (RecordFilter recordFilter : recordFilters) { 
+            if (recordFilter.getRegExp() == null) {
+                throw new BuildException("\"regexp\" attribute should not have null value for recordfilter");
+            }
+            if (recordFilter.getRegExp() != null) {
+                pattern = Pattern.compile("\\$\\{(.*)}");
+                match = pattern.matcher(recordFilter.getRegExp());
+                if (match.find()) {
+                    regExpList.add(getProject().replaceProperties(recordFilter.getRegExp()));
+                } else {
+                    regExpList.add(recordFilter.getRegExp());
+                }
+            }
+        }
+    }
+    
+    
+
+}
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogReplace.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* 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.logger.ant.taskdefs;
-
-import java.util.regex.Pattern;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
-import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
-
-/**
- * To replace the property values with real values if the properties are not set at the begining of the build.
- * 
- * pre>
- *      &lt;hlm:logreplace regexp="${property.not.set}"/&gt;
- * </pre>
- * 
- * @ant.task name="logreplace" category="Logging".
- */
-public class LogReplace extends Task {
-    
-    private String regExp;
-    
-    /**
-     * Run by the task.
-     */
-    
-    public void execute () {
-        if (StatusAndLogListener.getStatusAndLogListener() == null) {
-            this.log("The StatusAndLogListener is not available.", Project.MSG_WARN);
-            return;
-        }
-
-        AntLoggingHandler antLoggingHandler  = (AntLoggingHandler)StatusAndLogListener.getStatusAndLogListener().getHandler(AntLoggingHandler.class);
-        
-        if (regExp == null ) {
-            throw new BuildException ("'regexp' attribute should not be null.");
-        }
-        
-        if (antLoggingHandler != null) {
-            String pattern = Pattern.quote(regExp);
-            antLoggingHandler.addRegExp(pattern);
-        }
-    }
-
-    /**
-     * @param regExp the regExp to set
-     * @ant.required
-     */
-    public void setRegExp(String regExp) {
-        this.regExp = regExp;
-    }
-
-    /**
-     * @return the regExp
-     */
-    public String getRegExp() {
-        return regExp;
-    }
-    
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/LogReplaceTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* 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.logger.ant.taskdefs;
+
+import java.util.regex.Pattern;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
+import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
+
+/**
+ * To replace the property values with real values if the properties are not set at the begining of the build.
+ * 
+ * pre>
+ *      &lt;hlm:logreplace regexp="${property.not.set}"/&gt;
+ * </pre>
+ * 
+ * @ant.task name="logreplace" category="Logging".
+ */
+public class LogReplaceTask extends Task {
+    
+    private String regExp;
+    
+    /**
+     * Run by the task.
+     */
+    
+    public void execute() {
+        if (StatusAndLogListener.getStatusAndLogListener() == null) {
+            this.log("The StatusAndLogListener is not available.", Project.MSG_WARN);
+            return;
+        }
+
+        AntLoggingHandler antLoggingHandler  = (AntLoggingHandler)StatusAndLogListener.getStatusAndLogListener().getHandler(AntLoggingHandler.class);
+        
+        if (regExp == null ) {
+            throw new BuildException("'regexp' attribute should not be null.");
+        }
+        
+        if (antLoggingHandler != null) {
+            String pattern = Pattern.quote(regExp);
+            antLoggingHandler.addRegExp(pattern);
+        }
+    }
+
+    /**
+     * @param regExp the regExp to set
+     * @ant.required
+     */
+    public void setRegExp(String regExp) {
+        this.regExp = regExp;
+    }
+
+    /**
+     * @return the regExp
+     */
+    public String getRegExp() {
+        return regExp;
+    }
+    
+
+}
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TriggerLogger.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
-* 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.logger.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
-import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
-import org.apache.log4j.Logger;
-
-/**
- * This task is used to start the helium logging listener.
- * @ant.task name="triggerlogger" category="Logging"
- */
-public class TriggerLogger extends Task {
-    
-    private Logger log = Logger.getLogger(TriggerLogger.class);
-    
-    public void execute() {
-        log.debug("Registering Ant logging to StatusAndLogListener listener");
-        if (StatusAndLogListener.getStatusAndLogListener() == null) {
-            this.log("The StatusAndLogListener is not available.", Project.MSG_WARN);
-            return;
-        }
-        AntLoggingHandler antLoggingHandler = (AntLoggingHandler)StatusAndLogListener.getStatusAndLogListener().getHandler(AntLoggingHandler.class);
-        if (antLoggingHandler != null ) {
-            if (!antLoggingHandler.getLoggingStarted()) {
-                log.debug("Starting Logging using 'AntLoggingHandler' first time.");
-                antLoggingHandler.setLoggingStarted(true);
-            } else {
-                log.debug("'AntLoggingHandler' is already started logging.");
-            }
-        } else {
-            log.debug("Could not find the AntLoggingHandler instance.");
-        }
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/taskdefs/TriggerLoggerTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* 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.logger.ant.taskdefs;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+
+import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
+import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
+import org.apache.log4j.Logger;
+
+/**
+ * This task is used to start the helium logging listener.
+ * @ant.task name="triggerlogger" category="Logging"
+ */
+public class TriggerLoggerTask extends Task {
+    
+    private Logger log = Logger.getLogger(TriggerLoggerTask.class);
+    
+    public void execute() {
+        log.debug("Registering Ant logging to StatusAndLogListener listener");
+        if (StatusAndLogListener.getStatusAndLogListener() == null) {
+            this.log("The StatusAndLogListener is not available.", Project.MSG_WARN);
+            return;
+        }
+        AntLoggingHandler antLoggingHandler = new AntLoggingHandler(getProject());
+        StatusAndLogListener.getStatusAndLogListener().register(antLoggingHandler);
+        if (antLoggingHandler != null ) {
+            if (!antLoggingHandler.getLoggingStarted()) {
+                log.debug("Starting Logging using 'AntLoggingHandler' first time.");
+                antLoggingHandler.setLoggingStarted(true);
+            } else {
+                log.debug("'AntLoggingHandler' is already started logging.");
+            }
+        } else {
+            log.debug("Could not find the AntLoggingHandler instance.");
+        }
+    }
+
+}
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/Stage.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/Stage.java	Wed Jun 16 16:51:40 2010 +0300
@@ -90,7 +90,7 @@
      * @param target
      * @return
      */
-    public boolean isStartTarget ( String target ) {
+    public boolean isStartTarget( String target ) {
         return this.startTarget.equals( target );
     }
     
@@ -99,7 +99,7 @@
      * @param target
      * @return
      */
-    public boolean isEndTarget ( String target ) {
+    public boolean isEndTarget( String target ) {
         return this.endTarget.equals( target );
     }
     
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageLogging.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageLogging.java	Wed Jun 16 16:51:40 2010 +0300
@@ -19,8 +19,6 @@
 import java.io.File;
 
 import org.apache.tools.ant.types.DataType;
-import com.nokia.helium.logger.ant.listener.AntLoggingHandler;
-import com.nokia.helium.logger.ant.listener.StatusAndLogListener;
 import org.apache.log4j.Logger;
 
 /**
@@ -53,16 +51,6 @@
     private String stageRefId;
     private Logger log = Logger.getLogger(getClass());
     
-    /**
-     * Constructor which will register the logging handler
-     */
-    public StageLogging () {
-        if (!isAntLoggerRegistered && StatusAndLogListener.getStatusAndLogListener() != null) {
-            log.debug("Registering stage record to the StatusAndLogListener listener");
-            StatusAndLogListener.getStatusAndLogListener().register(new AntLoggingHandler(getProject()));
-            isAntLoggerRegistered = true;
-        }
-    }
     
     /**
      * Sets output log file name.
--- a/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageSummary.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/src/com/nokia/helium/logger/ant/types/StageSummary.java	Wed Jun 16 16:51:40 2010 +0300
@@ -17,7 +17,7 @@
 package com.nokia.helium.logger.ant.types;
 
 import java.io.File;
-
+import org.apache.tools.ant.Project;
 import org.apache.log4j.Logger;
 import org.apache.tools.ant.types.DataType;
 
@@ -43,7 +43,9 @@
     private File template;
     private Logger log = Logger.getLogger(getClass());
 
-    public StageSummary () {
+    public void setProject(Project project)
+    {
+        super.setProject(project);
         if ( !isStageSummaryHandlerRegistered && StatusAndLogListener.getStatusAndLogListener() != null) {
             log.debug("Registering stage summary to the StatusAndLogListener listener");
             StatusAndLogListener.getStatusAndLogListener().register( new StageSummaryHandler() );
@@ -56,7 +58,7 @@
      * 
      * @return the template to display build stage summary.
      */
-    public File getTemplate () {
+    public File getTemplate() {
         return template;
     }
 
@@ -67,7 +69,7 @@
      *            the template to set
      * @ant.required           
      */
-    public void setTemplate ( File template ) {
+    public void setTemplate( File template ) {
         this.template = template;
     }
 }
--- a/buildframework/helium/sf/java/logging/tests/antunit/run-scenario.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/antunit/run-scenario.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -20,7 +20,7 @@
 
 ============================================================================
 -->
-<project name="run-scenario" >
+<project name="run-scenario" xmlns:ac="antlib:net.sf.antcontrib" xmlns:au="antlib:org.apache.ant.antunit">
     <description>Helium Antlib logger macro.</description>
 
     <target name="setUp">    
@@ -36,18 +36,28 @@
         <attribute name="scenario" />
         <attribute name="target" />
         <sequential>
-            <exec osfamily="windows" executable="cmd" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
-                <env key="ANT_ARGS" value="${env.ANT_ARGS} -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener" />
-                <arg line="/c ..\build.bat @{target}" />
-                <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
-                <arg value="-Dtemp.dir=${temp.dir}" />
-            </exec>
-            <exec osfamily="unix" executable="../bld.sh" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true">
-                <env key="ANT_ARGS" value="${env.ANT_ARGS} -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener" />
-                <arg line="@{target}" />
-                <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
-                <arg value="-Dtemp.dir=${temp.dir}" />
-            </exec>
+            <ac:trycatch property="scenario.unittest.error">
+                <try>
+                    <exec osfamily="windows" executable="cmd" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true" errorproperty="scenario.unittest.error.log">
+                        <env key="ANT_ARGS" value="${env.ANT_ARGS} -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener" />
+                        <arg line="/c ..\build.bat @{target}" />
+                        <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
+                        <arg value="-Dtemp.dir=${temp.dir}" />
+                    </exec>
+                    <exec osfamily="unix" executable="../bld.sh" dir="${file.run-scenario}/../../scenarii/@{scenario}" failonerror="true" errorproperty="scenario.unittest.error.log">
+                        <env key="ANT_ARGS" value="${env.ANT_ARGS} -listener com.nokia.helium.logger.ant.listener.StatusAndLogListener" />
+                        <arg line="@{target}" />
+                        <arg value="-Dant.executor.class=com.nokia.helium.core.ant.HeliumExecutor" />
+                        <arg value="-Dtemp.dir=${temp.dir}" />
+                    </exec>
+                </try>
+            </ac:trycatch>
+            <!--<loadfile property="scenario.unittest.error.log" srcFile="${temp.dir}/scenario.log" />-->
+            <au:assertTrue message="${scenario.unittest.error.log}">
+                <not>
+                    <isset property="scenario.unittest.error" />
+                </not>
+            </au:assertTrue>
         </sequential>
     </macrodef>
 
--- a/buildframework/helium/sf/java/logging/tests/scenarii/logger/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/logger/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,7 +22,8 @@
 -->
 <project name="test-recorder" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib logger unittests.</description>
-    
+    <import file="../../stages_config.ant.xml" />
+
     <target name="test-recorder">
         <echo message="something to be not be recorded" />
         <hlm:record name="${temp.dir}/record.log" action="start" />
--- a/buildframework/helium/sf/java/logging/tests/scenarii/valid_build/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/valid_build/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -63,6 +63,7 @@
         </ant> 
         
         <antcall target="parallel-test"/>
+        <antcall target="parallel-test2"/>
     </target>
     
     <target name="compile" depends="creatbom,get-password"/>
@@ -255,5 +256,34 @@
     <target name="clean-up">
         <delete dir="${build.log.dir}"/>
     </target>
+    
+    <target name="parallel-test2">
+        <parallel>
+            <antcall target="test2"/>
+            <antcall target="test3"/>
+        </parallel>
+    </target>
+    
+    <target name="test2">
+        <sleep seconds="2"/>
+        <hlm:record name="${build.log.dir}/${build.id}_error.log" action="start" loglevel="info"/>
+        <echo message="ERROR: Could not find:"/>
+        <hlm:record name="${build.log.dir}/${build.id}_error.log" append="true" action="stop" loglevel="info"/>
+        <loadfile property="error.log" srcFile="${build.log.dir}/${build.id}_error.log" />
+        <au:assertTrue>
+            <contains string="${error.log}" substring="ERROR:" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test3">
+        <hlm:record name="${build.log.dir}/${build.id}_info.log" action="start" loglevel="info"/>
+        <echo message="INFO: Could not find:"/>
+        <sleep seconds="5"/>
+        <hlm:record name="${build.log.dir}/${build.id}_info.log" append="true" action="stop" loglevel="info"/>
+        <loadfile property="info.log" srcFile="${build.log.dir}/${build.id}_info.log" />
+        <au:assertFalse>
+            <contains string="${info.log}" substring="ERROR:" />
+        </au:assertFalse>
+    </target>
 
 </project>
--- a/buildframework/helium/sf/java/logging/tests/scenarii/valid_build/prep-ccm-get-input.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/logging/tests/scenarii/valid_build/prep-ccm-get-input.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,7 +22,7 @@
 -->
 <project name="prep-ccm-get-input" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium Antlib Logging unittests.</description>
-        
+    <import file="../../stages_config.ant.xml" />
     
     <property environment="env"/>
     
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java	Wed Jun 16 16:51:40 2010 +0300
@@ -31,8 +31,6 @@
 import freemarker.template.SimpleNumber;
 import freemarker.template.TemplateModelIterator;
 import com.nokia.helium.jpa.ORMReader;
-import com.nokia.helium.jpa.ORMUtil;
-
 import org.apache.log4j.Logger;
 import freemarker.ext.beans.BeanModel;
 import freemarker.ext.beans.BeansWrapper;
@@ -113,10 +111,10 @@
         @Override
         public void notifyProgressEvent(Engine engine, int event, File src,
                 int pMode, Throwable error, Object param) throws Exception {
-            if (event == ProgressListener.EVENT_END_PROCESSING_SESSION) {
-                log.debug("notifyProgressEvent - finalizeORM");
-                ORMUtil.finalizeORM(dbPath);
-            }  
+            //if (event == ProgressListener.EVENT_END_PROCESSING_SESSION) {
+            //    log.debug("notifyProgressEvent - finalizeORM");
+            //    ORMUtil.finalizeORM(dbPath);
+            //}  
          }
     }
 
@@ -144,16 +142,21 @@
             //log.debug("QueryTemplateModel: query" + query);
             if (queryMode.equals("jpasingle")) {
                 //log.debug("query executing with single result mode");
-                resultObject = getModel((new ORMReader(dbPath)).executeSingleResult(query, returnType));
+                resultObject = getModel(dbPath, query, returnType);
+                
             } else {
                 //log.debug("query executing with multiple result mode");
-                resultObject = new ORMQueryModel(new ORMReader(dbPath), query, queryMode, returnType); 
+                resultObject = new ORMQueryModel(dbPath, query, queryMode, returnType); 
             }
             return resultObject;
         }
         
-        private TemplateModel getModel(Object result) {
-            return new ORMSequenceModel(result);
+        private TemplateModel getModel(String dbPath, String query, 
+                String returnType) {
+            ORMReader reader = new ORMReader(dbPath);
+            ORMSequenceModel model = new ORMSequenceModel(reader.executeSingleResult(query, returnType));
+            reader.close();
+            return model;
         }
 
         public boolean isEmpty() {
@@ -199,8 +202,8 @@
         private String query;
         private String returnType;
 
-        public ORMQueryModel (ORMReader reader, String queryString, String type, String retType) {
-            ormReader = reader;
+        public ORMQueryModel(String dbPath, String queryString, String type, String retType) {
+            ormReader = new ORMReader(dbPath);
             queryType = type;
             query = queryString;
             returnType = retType;
@@ -275,6 +278,7 @@
                     }
                     if (rowList == null || rowList.size() == 0) {
                         finished = true;
+                        ormReader.close();
                     }
                 }
             }
@@ -286,6 +290,5 @@
         public ORMObjectModel(Object obj) {
             super(obj, new BeansWrapper());
         }
-        
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,18 +22,19 @@
 -->
 <antlib>
     <!-- Task definition -->
-    <taskdef name="metadatarecord" classname="com.nokia.helium.metadata.ant.taskdefs.MetaDataRecord"/>
-    <taskdef name="metadatadelete" classname="com.nokia.helium.metadata.ant.taskdefs.MetaDataDelete"/>
+    <taskdef name="metadatarecord" classname="com.nokia.helium.metadata.ant.taskdefs.MetaDataRecordTask"/>
+    <taskdef name="metadatadelete" classname="com.nokia.helium.metadata.ant.taskdefs.MetaDataDeleteTask"/>
     <!-- Type definition -->
     <typedef name="textmetadatainput" classname="com.nokia.helium.metadata.ant.types.TextLogMetaDataInput"/>
     <typedef name="antmetadatainput" classname="com.nokia.helium.metadata.ant.types.AntLogMetaDataInput"/>
     <typedef name="abldmetadatainput" classname="com.nokia.helium.metadata.ant.types.AbldLogMetaDataInput"/>
     <typedef name="sbsmetadatainput" classname="com.nokia.helium.metadata.ant.types.SBSLogMetaDataInput"/>
+    <typedef name="imakermetadatainput" classname="com.nokia.helium.metadata.ant.types.IMakerLogMetaDataInput"/>
     <typedef name="policymetadatainput" classname="com.nokia.helium.metadata.ant.types.PolicyLogMetaDataInput"/>
     <typedef name="metadatafilterset" classname="com.nokia.helium.metadata.ant.types.MetaDataFilterSet"/>
     <typedef name="metadatafilter" classname="com.nokia.helium.metadata.ant.types.MetaDataFilter"/>
     
     <typedef name="metadataHasSeverity" classname="com.nokia.helium.metadata.ant.conditions.MetaDataLogCondition"/>
     <typedef name="metadataRegexTest" classname="com.nokia.helium.metadata.ant.conditions.MetaDataRegexTestCondition"/>
-    <typedef name="metadataCountSeverity" classname="com.nokia.helium.metadata.ant.taskdefs.MetaDataLogCount"/>
+    <typedef name="metadataCountSeverity" classname="com.nokia.helium.metadata.ant.taskdefs.MetaDataLogCountTask"/>
 </antlib>
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataLogCondition.java	Wed Jun 16 16:51:40 2010 +0300
@@ -105,14 +105,17 @@
         // log file under the DB is always represented with / and not \.
         String logname = logFile.replace('\\', '/'); 
         String query = "select Count(m.id) from MetadataEntry m JOIN  m.logFile as l JOIN m.priority as p where l.path like '%" + logname + "' and UPPER(p.priority)='" + severity.toUpperCase() + "'";
-        Number number = (Number) (new ORMReader(fileName.getAbsolutePath())).executeSingleResult(query, null);
+        ORMReader reader = new ORMReader(fileName.getAbsolutePath());
+        Number number = (Number)reader.executeSingleResult(query, null);
+        int retValue = number.intValue();
         // Looking for missing file as error
         if (countMissing && prty == Metadata.PriorityEnum.ERROR) {
             String queryMissing = "select Count(m.id) from WhatLogEntry m JOIN m.component as c JOIN c.logFile as l where l.path like '%" + logname + "' and m.missing=1";
-            Number numberMissing = (Number) (new ORMReader(fileName.getAbsolutePath())).executeSingleResult(queryMissing, null);
-            return number.intValue() + numberMissing.intValue();
+            Number numberMissing = (Number) reader.executeSingleResult(queryMissing, null);
+            retValue = number.intValue() + numberMissing.intValue();
         }
-        return number.intValue();
+        reader.close();
+        return retValue;
     }
 
     /**
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataRegexTestCondition.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/conditions/MetaDataRegexTestCondition.java	Wed Jun 16 16:51:40 2010 +0300
@@ -93,19 +93,19 @@
      * @return true if the string is matched with any of the pattern in the given priority, false otherwise.
      */
     public boolean eval() {
-      if (this.severity == null || (this.severity != null && this.severity.trim().isEmpty()))
-          throw new BuildException("'severity' attribute is not defined");
-      if (this.string == null || (this.string != null && this.string.isEmpty()))
-          throw new BuildException("'string' attribute is not defined");
-      for (MetaDataFilterSet set : filterSets) {
-          for (MetaDataFilter filter : set.getAllFilters()) {
-              Pattern p = filter.getPattern();
-              Matcher m = p.matcher(this.string);
-              if (m.matches()) {
-                  return this.severity.equalsIgnoreCase(filter.getPriority());
-              }
-          }
-      }
-      return false;
+        if (this.severity == null || (this.severity != null && this.severity.trim().isEmpty()))
+            throw new BuildException("'severity' attribute is not defined");
+        if (this.string == null || (this.string != null && this.string.isEmpty()))
+            throw new BuildException("'string' attribute is not defined");
+        for (MetaDataFilterSet set : filterSets) {
+            for (MetaDataFilter filter : set.getAllFilters()) {
+                Pattern pattern = filter.getPattern();
+                Matcher matcher = pattern.matcher(this.string);
+                if (matcher.matches()) {
+                    return this.severity.equalsIgnoreCase(filter.getPriority());
+                }
+            }
+        }
+        return false;
     }
 }
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataDelete.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
- * 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.metadata.ant.taskdefs;
-
-import org.apache.tools.ant.types.FileSet;
-
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Task;
-import java.util.Vector;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.log4j.Logger;
-import com.nokia.helium.metadata.db.*;
-
-/**
- * This task provide a way to delete the data from db for a log file set.
- * 
- * <pre>
- * Example 1:
- * &lt;metadadelete database=&quot;compile_log.db&quot;&gt;
- *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;sbs.log.file&quot;/&gt
- * &lt;/metadadelete&gt;
- * </pre>
- * 
- * @ant.task name="metadatadelete" category="Metadata"
- */
-public class MetaDataDelete extends Task {
-
-    private static Logger log = Logger.getLogger(MetaDataDelete.class);
-
-    private String database;
-    
-    private boolean failOnError = true;
-
-    private Vector<FileSet> fileSetList = new Vector<FileSet>();
-
-    /**
-     * Helper function to set the database parameter
-     * 
-     * @ant.required
-     */
-    public void setDatabase(String dbFile) {
-        database = dbFile;
-    }
-
-    public void setFailOnError(String failNotify) {
-        if (failNotify.equals("false")) {
-            failOnError = false;
-        }
-    }
-
-    /**
-     * Updates the list of filelist from the input fileset.
-     *  @param fileSetList input fileset list
-     *  @return the matched files including the base dir. 
-     */
-    private List<String> getFileListFromFileSet() {
-        List<String> fileList = new ArrayList<String>();
-        for (FileSet fs : fileSetList) {
-            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-            String[] includedFiles = ds.getIncludedFiles();
-            for ( String file : includedFiles ) {
-                fileList.add(file);
-                log.debug("includedfiles: " + file);
-            }
-        }
-        log.debug("fileList.size" + fileList.size());
-        return fileList;
-    }
-
-    /**
-     * Adds the fileset (list of input log files to be processed).
-     *  @param fileSet fileset to be added
-     * 
-     */
-    public void add(FileSet fileSet) {
-        fileSetList.add(fileSet);
-    }   
-
-    /**
-     * Helper function to get the database
-     * 
-     */
-    public String getDatabase() {
-        return database;
-    }
-
-    
-    @Override
-    public void execute() {
-        /*
-        MetaDataDb metadataDb = null;
-        try {
-            log.debug("Initializing DB: " + database + "to delete");
-            log("time before removing entries from db" + new Date());
-            metadataDb = new MetaDataDb(database);
-            metadataDb.removeEntries(getFileListFromFileSet());
-            log("time after removing entries from db" + new Date());
-        } catch (BuildException ex1) {
-            if (failOnError) {
-                throw ex1;
-            }
-        } catch (Exception ex) {
-            if (failOnError) {
-                throw new BuildException("Failed during writing data to db");
-            }
-        } finally {
-            log.debug("finalizing DB: " + database);
-            if (metadataDb != null) {
-                metadataDb.finalizeDB();
-            }
-        }
-        */
-    }
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataDeleteTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,130 @@
+/*
+ * 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.metadata.ant.taskdefs;
+
+import org.apache.tools.ant.types.FileSet;
+
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Task;
+import java.util.Vector;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.log4j.Logger;
+import com.nokia.helium.metadata.db.*;
+
+/**
+ * This task provide a way to delete the data from db for a log file set.
+ * 
+ * <pre>
+ * Example 1:
+ * &lt;metadadelete database=&quot;compile_log.db&quot;&gt;
+ *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;sbs.log.file&quot;/&gt
+ * &lt;/metadadelete&gt;
+ * </pre>
+ * 
+ * @ant.task name="metadatadelete" category="Metadata"
+ */
+public class MetaDataDeleteTask extends Task {
+
+    private static Logger log = Logger.getLogger(MetaDataDeleteTask.class);
+
+    private String database;
+    
+    private boolean failOnError = true;
+
+    private Vector<FileSet> fileSetList = new Vector<FileSet>();
+
+    /**
+     * Helper function to set the database parameter
+     * 
+     * @ant.required
+     */
+    public void setDatabase(String dbFile) {
+        database = dbFile;
+    }
+
+    public void setFailOnError(String failNotify) {
+        if (failNotify.equals("false")) {
+            failOnError = false;
+        }
+    }
+
+    /**
+     * Updates the list of filelist from the input fileset.
+     *  @param fileSetList input fileset list
+     *  @return the matched files including the base dir. 
+     */
+    private List<String> getFileListFromFileSet() {
+        List<String> fileList = new ArrayList<String>();
+        for (FileSet fs : fileSetList) {
+            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
+            String[] includedFiles = ds.getIncludedFiles();
+            for ( String file : includedFiles ) {
+                fileList.add(file);
+                log.debug("includedfiles: " + file);
+            }
+        }
+        log.debug("fileList.size" + fileList.size());
+        return fileList;
+    }
+
+    /**
+     * Adds the fileset (list of input log files to be processed).
+     *  @param fileSet fileset to be added
+     * 
+     */
+    public void add(FileSet fileSet) {
+        fileSetList.add(fileSet);
+    }   
+
+    /**
+     * Helper function to get the database
+     * 
+     */
+    public String getDatabase() {
+        return database;
+    }
+
+    
+    @Override
+    public void execute() {
+        /*
+        MetaDataDb metadataDb = null;
+        try {
+            log.debug("Initializing DB: " + database + "to delete");
+            log("time before removing entries from db" + new Date());
+            metadataDb = new MetaDataDb(database);
+            metadataDb.removeEntries(getFileListFromFileSet());
+            log("time after removing entries from db" + new Date());
+        } catch (BuildException ex1) {
+            if (failOnError) {
+                throw ex1;
+            }
+        } catch (Exception ex) {
+            if (failOnError) {
+                throw new BuildException("Failed during writing data to db");
+            }
+        } finally {
+            log.debug("finalizing DB: " + database);
+            if (metadataDb != null) {
+                metadataDb.finalizeDB();
+            }
+        }
+        */
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataLogCount.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-/*
- * 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.metadata.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import com.nokia.helium.metadata.ant.conditions.MetaDataLogCondition;
-
-/**
- * This class sets a property to the number of matching severity inside a Metadata db for a log.
- * Example:
- * <pre>
- *     &lt;hlm:metadataCountSeverity severity=&quot;error&quot; log=&quot;*_fixslashes_raptor.log&quot; db=&quot;${build.log.dir}/metadata.db&quot; property=&quot;fixslashes.error&quot;/&gt;
- * </pre>
-
- * @ant.task name="metadataCountSeverity" category="Metadata"
- */
-public class MetaDataLogCount extends Task {
-
-    private File fileName;
-    private String logFile;
-    private String severity;
-    private String property;
-    private boolean countMissing = true;
-
-    /**
-     * File to be parsed.
-     * 
-     * @param filename
-     * @ant.required
-     */
-    public void setDb(File filename) {
-        fileName = filename;
-    }
-    
-    public void setLog(String log) {
-        logFile = log;
-    }
-    
-    /**
-     * Defines the severity name to be counted.
-     * 
-     * @param severity
-     * @ant.required
-     */
-    public void setSeverity(String severity) {
-        this.severity = severity;
-    }
-
-    /**
-     * Name of the property to be set.
-     * @param property the property name
-     * @ant.required
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-    /**
-     * Should the count of missing files for error severity.
-     * @param countMissing enable the count of missing files 
-     *                     for error severity
-     * @ant.not-required Default is true
-     */
-    public void setCountMissing(boolean countMissing) {
-        this.countMissing = countMissing;
-    }
-    
-    /**
-     *  Execute the task. Set the property with number of severities.  
-     * @throws BuildException
-     */
-    public void execute() {
-        if (property == null)
-            throw new BuildException("'property' attribute is not defined");
-        
-        MetaDataLogCondition cond = new MetaDataLogCondition();
-        cond.setDb(fileName);
-        cond.setLog(logFile);
-        cond.setSeverity(severity);
-        cond.setCountMissing(countMissing);
-        getProject().setNewProperty(property, "" + cond.getSeverity());
-    }
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataLogCountTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,101 @@
+/*
+ * 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.metadata.ant.taskdefs;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import com.nokia.helium.metadata.ant.conditions.MetaDataLogCondition;
+
+/**
+ * This class sets a property to the number of matching severity inside a Metadata db for a log.
+ * Example:
+ * <pre>
+ *     &lt;hlm:metadataCountSeverity severity=&quot;error&quot; log=&quot;*_fixslashes_raptor.log&quot; db=&quot;${build.log.dir}/metadata.db&quot; property=&quot;fixslashes.error&quot;/&gt;
+ * </pre>
+
+ * @ant.task name="metadataCountSeverity" category="Metadata"
+ */
+public class MetaDataLogCountTask extends Task {
+
+    private File fileName;
+    private String logFile;
+    private String severity;
+    private String property;
+    private boolean countMissing = true;
+
+    /**
+     * File to be parsed.
+     * 
+     * @param filename
+     * @ant.required
+     */
+    public void setDb(File filename) {
+        fileName = filename;
+    }
+    
+    public void setLog(String log) {
+        logFile = log;
+    }
+    
+    /**
+     * Defines the severity name to be counted.
+     * 
+     * @param severity
+     * @ant.required
+     */
+    public void setSeverity(String severity) {
+        this.severity = severity;
+    }
+
+    /**
+     * Name of the property to be set.
+     * @param property the property name
+     * @ant.required
+     */
+    public void setProperty(String property) {
+        this.property = property;
+    }
+
+    /**
+     * Should the count of missing files for error severity.
+     * @param countMissing enable the count of missing files 
+     *                     for error severity
+     * @ant.not-required Default is true
+     */
+    public void setCountMissing(boolean countMissing) {
+        this.countMissing = countMissing;
+    }
+    
+    /**
+     *  Execute the task. Set the property with number of severities.  
+     * @throws BuildException
+     */
+    public void execute() {
+        if (property == null)
+            throw new BuildException("'property' attribute is not defined");
+        
+        MetaDataLogCondition cond = new MetaDataLogCondition();
+        cond.setDb(fileName);
+        cond.setLog(logFile);
+        cond.setSeverity(severity);
+        cond.setCountMissing(countMissing);
+        getProject().setNewProperty(property, "" + cond.getSeverity());
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecord.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +0,0 @@
-/*
- * 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.metadata.ant.taskdefs;
-
-import com.nokia.helium.metadata.CustomMetaDataProvider;
-import com.nokia.helium.metadata.MetaDataInput;
-import com.nokia.helium.jpa.entity.metadata.Metadata;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import java.util.Vector;
-import java.util.Iterator;
-import org.apache.log4j.Logger;
-import com.nokia.helium.metadata.db.*;
-import java.util.Date;
-
-/**
- * This task provide a way to record the data in the Database.
- * 
- * <pre>
- * Example 1:
- * &lt;metadatarecord database=&quot;compile_log.db&quot;&gt;
- *     &lt;sbsmetadatainput&gt;
- *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;sbs.log.file&quot;/&gt
- *         &lt;metadatafiltelistref refid=&quot;compilation&quot;/&gt;
- *     &lt;/sbsmetadatainput&gt;
- * &lt;/metadatarecord&gt;
- * 
- * Example 2:
- * 
- * &lt;metadatarecord database=&quot;metadata.db&quot;&gt;
- *     &lt;antmetadatainput&gt;
- *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;${build.id}_ant_build.log&quot;/&gt
- *         &lt;metadatafiltelistref refid=&quot;compilation&quot;/&gt;
- *     &lt;/antmetadatainput&gt;
- * &lt;/metadatarecord&gt;
-
- * </pre>
- * 
- * @ant.task name="metadatarecord" category="Metadata"
- */
-public class MetaDataRecord extends Task {
-
-    private static Logger log = Logger.getLogger(MetaDataRecord.class);
-
-    private String database;
-    
-    private boolean failOnError = true;
-    
-    private Vector<MetaDataInput> metadataList = new Vector<MetaDataInput>();
-
-    /**
-     * Helper function to set the database parameter
-     * 
-     * @ant.required
-     */
-    public void setDatabase(String dbFile) {
-        database = dbFile;
-    }
-
-    public void setFailOnError(String failNotify) {
-        if (failNotify.equals("false")) {
-            failOnError = false;
-        }
-    }
-    /**
-     * Helper function to get the database
-     * 
-     */
-    public String getDatabase() {
-        return database;
-    }
-
-    /**
-     * Helper function to return the metadatalist
-     *  @return build metadata object
-     * 
-     */
-    public Vector<MetaDataInput> getMetaDataList() throws Exception {
-        if (metadataList.isEmpty()) {
-            throw new Exception("metadata list is empty");
-        }
-        return metadataList;
-    }
-
-    /**
-     * Helper function to add the metadatalist
-     *  @param build metadata list to add
-     * 
-     */
-    public void add(MetaDataInput interf) {
-        metadataList.add(interf);
-    }
-
-    
-    @Override
-    public void execute() {
-        ORMMetadataDB ormDB = null;
-        try {
-            log.debug("Getting Contents to write to db: " + database);
-            log.debug("Initializing DB: " + database);
-            log.debug("initializing ORM db");
-            ormDB = new ORMMetadataDB(database);
-            log.debug("Parsing the input and writing to DB");
-            Date before = new Date();
-            log("Time before recording to db: " + before);
-            for (MetaDataInput metadataInput : metadataList) {
-                boolean removed = false;
-                String logPath = null;
-                Iterator<Metadata.LogEntry> inputIterator = metadataInput.iterator();
-                while (inputIterator.hasNext()) {
-                    Metadata.LogEntry logEntry = inputIterator.next();
-                    if (!removed) {
-                        logPath = logEntry.getLogPath();
-                        ormDB.removeEntries(logPath);
-                        removed = true;
-                    }
-                    //initializes the metadata if none exists
-                    ormDB.addLogEntry(logEntry);
-                }
-                if (logPath != null && metadataInput instanceof CustomMetaDataProvider) {
-                    CustomMetaDataProvider provider = (CustomMetaDataProvider)metadataInput;
-                    provider.provide(ormDB, logPath);
-                }
-                if (logPath != null) {
-                    ormDB.finalizeMetadata(logPath);
-                }
-            }
-            Date after = new Date();
-            log("Time after recording to db: " + after);
-            log("Elapsed time: " + (after.getTime() - before.getTime()) + " ms");
-            log.debug("Successfully writen to DB");
-        } catch (BuildException ex1) {
-            log.debug("BuildException during writing to db: ", ex1);
-            if (failOnError) {
-                throw ex1;
-            }
-        } finally {
-            if (ormDB != null) {
-                ormDB.finalizeDB();
-            }
-        }
-    }
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/taskdefs/MetaDataRecordTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,177 @@
+/*
+ * 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.metadata.ant.taskdefs;
+
+import com.nokia.helium.metadata.CustomMetaDataProvider;
+import com.nokia.helium.metadata.MetaDataInput;
+import com.nokia.helium.jpa.entity.metadata.Metadata;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import java.util.Vector;
+import java.util.Iterator;
+import org.apache.log4j.Logger;
+import com.nokia.helium.metadata.db.*;
+import java.util.Date;
+
+/**
+ * This task provide a way to record the data in the Database.
+ * 
+ * <pre>
+ * Example 1:
+ * &lt;metadatarecord database=&quot;compile_log.db&quot;&gt;
+ *     &lt;sbsmetadatainput&gt;
+ *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;sbs.log.file&quot;/&gt
+ *         &lt;metadatafiltelistref refid=&quot;compilation&quot;/&gt;
+ *     &lt;/sbsmetadatainput&gt;
+ * &lt;/metadatarecord&gt;
+ * 
+ * Example 2:
+ * 
+ * &lt;metadatarecord database=&quot;metadata.db&quot;&gt;
+ *     &lt;antmetadatainput&gt;
+ *     &lt;fileset casesensitive=&quot;false&quot; file=&quot;${build.id}_ant_build.log&quot;/&gt
+ *         &lt;metadatafiltelistref refid=&quot;compilation&quot;/&gt;
+ *     &lt;/antmetadatainput&gt;
+ * &lt;/metadatarecord&gt;
+
+ * </pre>
+ * 
+ * @ant.task name="metadatarecord" category="Metadata"
+ */
+public class MetaDataRecordTask extends Task {
+
+    private static Logger log = Logger.getLogger(MetaDataRecordTask.class);
+
+    private String database;
+    
+    private boolean failOnError = true;
+    
+    private Vector<MetaDataInput> metadataList = new Vector<MetaDataInput>();
+
+    /**
+     * Helper function to set the database parameter
+     * 
+     * @ant.required
+     */
+    public void setDatabase(String dbFile) {
+        database = dbFile;
+    }
+
+    public void setFailOnError(String failNotify) {
+        if (failNotify.equals("false")) {
+            failOnError = false;
+        }
+    }
+    /**
+     * Helper function to get the database
+     * 
+     */
+    public String getDatabase() {
+        return database;
+    }
+
+    /**
+     * Helper function to return the metadatalist
+     *  @return build metadata object
+     * 
+     */
+    public Vector<MetaDataInput> getMetaDataList() throws Exception {
+        if (metadataList.isEmpty()) {
+            throw new Exception("metadata list is empty");
+        }
+        return metadataList;
+    }
+
+    /**
+     * Helper function to add the metadatalist
+     *  @param build metadata list to add
+     * 
+     */
+    public void add(MetaDataInput interf) {
+        metadataList.add(interf);
+    }
+
+    
+    @Override
+    public void execute() {
+        ORMMetadataDB ormDB = null;
+        try {
+            log.debug("Getting Contents to write to db: " + database);
+            log.debug("Initializing DB: " + database);
+            log.debug("initializing ORM db");
+            ormDB = new ORMMetadataDB(database);
+            log.debug("Parsing the input and writing to DB");
+            Date before = new Date();
+            log("Time before recording to db: " + before);
+            for (MetaDataInput metadataInput : metadataList) {
+                boolean removed = false;
+                String logPath = null;
+                String currentLogPath = null;
+                Iterator<Metadata.LogEntry> inputIterator = metadataInput.iterator();
+                while (inputIterator.hasNext()) {
+                    //Todo: better way of log handling, with metadatainput
+                    // metadata initialization for each logfile within 
+                    //metadatainput itself would be better. this is temporary.
+                    Metadata.LogEntry logEntry = inputIterator.next();
+                    logPath = logEntry.getLogPath();
+                    if (currentLogPath == null) {
+                        currentLogPath = logPath;
+                        removed = false;
+                    } else if (!currentLogPath.equals(logPath)) {
+                        finalizeForLogPath(currentLogPath, metadataInput, ormDB);
+                        currentLogPath = logPath;
+                        removed = false;
+                    }
+                    if (!removed ) {
+                        log.debug("processing for log: " + logPath);
+                        ormDB.removeEntries(logPath);
+                        removed = true;
+                    }
+                    //initializes the metadata if none exists
+                    ormDB.addLogEntry(logEntry);
+                }
+                finalizeForLogPath(currentLogPath, metadataInput, ormDB);
+            }
+            Date after = new Date();
+            log("Time after recording to db: " + after);
+            log("Elapsed time: " + (after.getTime() - before.getTime()) + " ms");
+            log.debug("Successfully writen to DB");
+        } catch (BuildException ex1) {
+            log.debug("BuildException during writing to db: ", ex1);
+            if (failOnError) {
+                throw ex1;
+            }
+        } finally {
+            if (ormDB != null) {
+                ormDB.finalizeDB();
+            }
+        }
+    }
+    
+    private void finalizeForLogPath(String currentLogPath, 
+            MetaDataInput metadataInput, ORMMetadataDB ormDB) {
+        if (currentLogPath != null) {
+            if (metadataInput instanceof CustomMetaDataProvider) {
+                CustomMetaDataProvider provider = 
+                    (CustomMetaDataProvider)metadataInput;
+                provider.provide(ormDB, currentLogPath);
+            }
+            ormDB.finalizeMetadata(currentLogPath);
+        }
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AbldLogMetaDataInput.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/AbldLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -133,28 +133,28 @@
             setCurrentReader(currentReader);
         } catch (FileNotFoundException ex) {
             log.debug("FileNotFoundException in AbldLogMetadata", ex);
-           try {
-               currentReader.close();
-           } catch ( IOException iex) {
-               // We are Ignoring the errors as no need to fail the build. 
-               log.debug("Exception in closing reader", iex);
-           }
-           currentReader = null;
-           setCurrentReader(null);
-           exceptions = exceptions + ex.getMessage() + "\n";
-           return false;
+            try {
+                currentReader.close();
+            } catch ( IOException iex) {
+                // We are Ignoring the errors as no need to fail the build. 
+                log.debug("Exception in closing reader", iex);
+            }
+            currentReader = null;
+            setCurrentReader(null);
+            exceptions = exceptions + ex.getMessage() + "\n";
+            return false;
         } catch (IOException ex) {
             log.debug("IOException in AbldLogMetadata", ex);
-           try {
-               currentReader.close();
-           } catch ( IOException iex) {
+            try {
+                currentReader.close();
+            } catch ( IOException iex) {
                // We are Ignoring the errors as no need to fail the build. 
                log.debug("IOException in closing reader", iex);
-           }
-           currentReader = null;
-           setCurrentReader(null);
-           exceptions = exceptions + ex.getMessage() + "\n";
-           return false;
+            }
+            currentReader = null;
+            setCurrentReader(null);
+            exceptions = exceptions + ex.getMessage() + "\n";
+            return false;
         }
         if (!exceptions.equals("")) {
             throw new BuildException(exceptions);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/IMakerLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,215 @@
+/*
+ * 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.metadata.ant.types;
+
+import java.io.*;
+import org.apache.tools.ant.BuildException;
+import java.util.*;
+
+import org.apache.log4j.Logger;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+/**
+ * This Type is to specify and use the abld logparser type to parse and store
+ * the data.
+ * 
+ * <pre>
+ * &lt;hlm:metadatafilterset id="abld.metadata.filter"&gt;
+ *    &lt;metadatafilterset filterfile="common.csv" /&gt;
+ * &lt;/hlm:metadatafilterset&gt;
+ * 
+ * &lt;hlm:imakermetadatainput&gt;
+ *    &lt;fileset dir="${project.dir}/../data/"&gt;
+ *        &lt;include name="*_compile*.log"/&gt;
+ *    &lt;/fileset&gt;
+ *    &lt;metadatafilterset refid="abld.metadata.filter" /&gt;
+ * &lt;/hlm:imakermetadatainput&gt;
+ * </pre>
+ * 
+ * @ant.task name="imakermetadatainput" category="Metadata"
+ */
+public class IMakerLogMetaDataInput extends TextLogMetaDataInput {
+
+    /** Internal data storage. */
+    private class Entry {
+
+        private String fileName;
+        private int lineNumber;
+        private String text;
+        private String severity;
+
+        public Entry(String fileName, int lineNumber, String text, String severity) {
+            super();
+            this.text = text;
+            this.lineNumber = lineNumber;
+            this.fileName = fileName;
+            this.severity = severity;
+        }
+
+        public String getText() {
+            return text;
+        }
+
+        public int getLineNumber() {
+            return lineNumber;
+        }
+
+        public String getFileName() {
+            return fileName;
+        }
+
+        public String getSeverity() {
+            return severity;
+        }
+
+    }
+
+    private Logger log = Logger.getLogger(AbldLogMetaDataInput.class);
+
+    private Pattern iMakerFpsxPattern = Pattern.compile("/([^/]*?\\.fpsx)");
+
+    private String currentComponent;
+
+    private boolean entryCreated;
+
+    private boolean isRecordingIssues;
+
+    public IMakerLogMetaDataInput() {
+    }
+
+    /**
+     * Function to check from the input stream if is there any entries
+     * available.
+     * 
+     * @return true if there are any entry available otherwise false.
+     */
+    public boolean isEntryCreated(File currentFile) {
+        String exceptions = "";
+        entryCreated = false;
+        int lineNumber = getLineNumber();
+        BufferedReader currentReader = getCurrentReader();
+        log.debug("Getting next set of log entries for iMaker input");
+        try {
+            if (currentReader == null) {
+                lineNumber = 0;
+                setLineNumber(lineNumber);
+                log.debug("Processing iMaker log file name: " + currentFile);
+                currentReader = new BufferedReader(new FileReader(currentFile));
+                setCurrentReader(currentReader);
+            }
+
+            List<Entry> entriesCache = new ArrayList<Entry>();
+            String logText = null;
+            while ((logText = currentReader.readLine()) != null) {
+                lineNumber++;
+                setLineNumber(lineNumber);
+
+                // Remove Ant task comment text, e.g. "[imaker]"
+                logText = logText.replaceFirst("'^\\s*\\[.+?\\]\\s*", "");
+                // log.debug("Parsing log line: " + logText);
+
+                // See if the line should be captured
+                if (isRecordingIssues) {
+                    // Check for a line with an issue
+                    String severity = getSeverity(logText);
+                    if (severity != null) {
+                        Entry entry = new Entry(currentFile.toString(), lineNumber, logText, severity);
+                        entriesCache.add(entry);
+                    }
+
+                    // Check if the iMaker FPSX image name is on this line, to
+                    // get the component
+                    if (currentComponent == null) {
+                        Matcher componentMatch = iMakerFpsxPattern.matcher(logText);
+                        if (componentMatch.find()) {
+                            currentComponent = componentMatch.group(1);
+                            log.debug("Matched component: " + currentComponent);
+                        }
+                    }
+
+                    // See if the component log block has ended
+                    if (logText.startsWith("++ Finished at")) {
+                        // Add all cached issues
+                        if (currentComponent != null && entriesCache.size() > 0) {
+                            for (int i = 0; i < entriesCache.size(); i++) {
+                                Entry entry = entriesCache.get(i);
+                                addEntry(entry.getSeverity(), currentComponent, entry.getFileName(), entry.getLineNumber(), entry.getText());
+                            }
+                            entryCreated = true;
+                            currentComponent = null;
+                            return true;
+                        }
+                        // Or add a default entry to record the logfile
+                        else {
+                            addEntry("DEFAULT", currentComponent, currentFile.toString(), lineNumber, "");
+                            entryCreated = true;
+                            currentComponent = null;
+                            return true;
+                        }
+                    }
+                }
+                else {
+                    // Check for the start of a block
+                    if (logText.startsWith("++ Started at")) {
+                        isRecordingIssues = true;
+                    }
+                }
+            }
+            currentReader.close();
+            currentReader = null;
+            setCurrentReader(currentReader);
+        }
+        catch (FileNotFoundException ex) {
+            log.debug("FileNotFoundException in AbldLogMetadata", ex);
+            try {
+                if (currentReader != null) {
+                    currentReader.close();
+                }
+            }
+            catch (IOException iex) {
+                // We are Ignoring the errors as no need to fail the build.
+                log.debug("Exception in closing reader", iex);
+            }
+            currentReader = null;
+            setCurrentReader(null);
+            exceptions = exceptions + ex.getMessage() + "\n";
+            return false;
+        }
+        catch (IOException ex) {
+            log.debug("IOException in AbldLogMetadata", ex);
+            try {
+                if (currentReader != null) {
+                    currentReader.close();
+                }
+            }
+            catch (IOException iex) {
+                // We are Ignoring the errors as no need to fail the build.
+                log.debug("IOException in closing reader", iex);
+            }
+            currentReader = null;
+            setCurrentReader(null);
+            exceptions = exceptions + ex.getMessage() + "\n";
+            return false;
+        }
+        if (!exceptions.equals("")) {
+            throw new BuildException(exceptions);
+        }
+        return entryCreated;
+    }
+}
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/LogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -147,29 +147,29 @@
      */
     
     boolean isEntryAvailable() {
-            int fileListSize = getFileList().size();
-            while (currentFileIndex < fileListSize) {
-                boolean entryCreated = false;
-                File currentFile = getCurrentFile();
-                entryCreated = isEntryCreated(currentFile);
-                if (entryCreated) {
-                    if (!entryAddedForLog) {
-                        entryAddedForLog = true;
-                    }
-                    return entryCreated;
-                }
+        int fileListSize = getFileList().size();
+        while (currentFileIndex < fileListSize) {
+            boolean entryCreated = false;
+            File currentFile = getCurrentFile();
+            entryCreated = isEntryCreated(currentFile);
+            if (entryCreated) {
                 if (!entryAddedForLog) {
-                    // If no entry, then logfile is added to the database.
-                    addEntry("default", "general",
-                            getCurrentFile().toString(), -1, "", -1, null);
                     entryAddedForLog = true;
-                    return true;
                 }
-                if (isAdditionalEntry()) {
-                    return true;
-                }
-                currentFileIndex ++;
+                return entryCreated;
             }
+            if (!entryAddedForLog) {
+                // If no entry, then logfile is added to the database.
+                addEntry("default", "general",
+                        getCurrentFile().toString(), -1, "", -1, null);
+                entryAddedForLog = true;
+                return true;
+            }
+            if (isAdditionalEntry()) {
+                return true;
+            }
+            currentFileIndex ++;
+        }
         return false;
     }
 
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterSet.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/MetaDataFilterSet.java	Wed Jun 16 16:51:40 2010 +0300
@@ -97,7 +97,7 @@
                 return allFilters;
             }
             log.debug("Filterset object is not instance of MetaDataFilterSet");
-            throw new BuildException ("Filterset object is not instance of MetaDataFilterSet");
+            throw new BuildException("Filterset object is not instance of MetaDataFilterSet");
         }
         // Add any nested filtersets
         for (MetaDataFilterSet filterSet : filterSets) {
@@ -188,22 +188,22 @@
             throw iex;
         }
         int size = 0;
-            log.debug("filter CSV record size: " + csvs.size());
-            size = csvs.size();
-            for (int i = 0; i < size; i++) {
-                TemplateSequenceModel model = (TemplateSequenceModel) csvs
-                .get(i);
-                int modelSize = model.size();
-                if (modelSize != 3 ) {
-                    log.debug("Metadata CSV file filter file format is invalid. It has row size " + size);
-                    throw new Exception("Metadata CSV file filter file format is invalid. It has row size " + size);
-                }
-                MetaDataFilter filter = new MetaDataFilter();
-                filter.setPriority(model.get(0).toString());
-                filter.setRegex(model.get(1).toString());
-                filter.setDescription(model.get(2).toString());
-                filters.add(filter);
+        log.debug("filter CSV record size: " + csvs.size());
+        size = csvs.size();
+        for (int i = 0; i < size; i++) {
+            TemplateSequenceModel model = (TemplateSequenceModel) csvs
+            .get(i);
+            int modelSize = model.size();
+            if (modelSize != 3 ) {
+                log.debug("Metadata CSV file filter file format is invalid. It has row size " + size);
+                throw new Exception("Metadata CSV file filter file format is invalid. It has row size " + size);
             }
+            MetaDataFilter filter = new MetaDataFilter();
+            filter.setPriority(model.get(0).toString());
+            filter.setRegex(model.get(1).toString());
+            filter.setDescription(model.get(2).toString());
+            filters.add(filter);
+        }
     }
 }
 
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/PolicyLogMetaDataInput.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/PolicyLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -77,7 +77,7 @@
      * @param streamReader: the input stream reader which contains the xml data to be parsed for recording data.
      * @return true if there are any element to be added to the database.
      */
-    boolean startElement (XMLStreamReader streamReader) {
+    boolean startElement(XMLStreamReader streamReader) {
         String tagName = streamReader.getLocalName();
         if (tagName.equalsIgnoreCase("error")) {
             currentAttributeMap = getAttributes(streamReader);
@@ -92,33 +92,33 @@
      */
     boolean endElement(XMLStreamReader streamReader) {
         boolean retValue = false;
-           String tagName = streamReader.getLocalName();
-            String priority = "ERROR";
-            log.debug("endElement: " + tagName);
-            if (tagName.equalsIgnoreCase("error")) {
-                log.debug("tagName matches error");
-                String errorType = currentAttributeMap.get("type");
-                log.debug("errorType:" + errorType);
-                if (errorType.equals("unknownstatus")) {
-                    addEntry(priority, "CSV validation", getCurrentFile().toString(), -1, currentAttributeMap.get("message") + 
-                            currentAttributeMap.get("value"));
-                    retValue = true;
-                } else if (errorType.equals("A") || errorType.equals("B") 
-                        || errorType.equals("C") || errorType.equals("D")) {
-                    int flags = Pattern.CASE_INSENSITIVE | Pattern.DOTALL ;
-                    Pattern pattern = Pattern.compile("([\\\\/][^\\\\/]+?)$", flags);
-                    addEntry(priority, "Issues", getCurrentFile().toString(), -1, 
-                            errorType + "Found incorrect value for" + 
-                            pattern.matcher(currentAttributeMap.get("message")).replaceAll(""));
-                    retValue = true;
-                } else if (errorType.equals("missing")) {
-                    addEntry(priority, "Missing", getCurrentFile().toString(), -1, currentAttributeMap.get("message"));
-                    retValue = true;
-                } else if (errorType.equals("invalidencoding")) {
-                    addEntry(priority, "Incorrect policy files", getCurrentFile().toString(), -1,  currentAttributeMap.get("message"));
-                    retValue = true;
-                }
+        String tagName = streamReader.getLocalName();
+        String priority = "ERROR";
+        log.debug("endElement: " + tagName);
+        if (tagName.equalsIgnoreCase("error")) {
+            log.debug("tagName matches error");
+            String errorType = currentAttributeMap.get("type");
+            log.debug("errorType:" + errorType);
+            if (errorType.equals("unknownstatus")) {
+                addEntry(priority, "CSV validation", getCurrentFile().toString(), -1, currentAttributeMap.get("message") + 
+                        currentAttributeMap.get("value"));
+                retValue = true;
+            } else if (errorType.equals("A") || errorType.equals("B") 
+                    || errorType.equals("C") || errorType.equals("D")) {
+                int flags = Pattern.CASE_INSENSITIVE | Pattern.DOTALL ;
+                Pattern pattern = Pattern.compile("([\\\\/][^\\\\/]+?)$", flags);
+                addEntry(priority, "Issues", getCurrentFile().toString(), -1, 
+                        errorType + "Found incorrect value for" + 
+                        pattern.matcher(currentAttributeMap.get("message")).replaceAll(""));
+                retValue = true;
+            } else if (errorType.equals("missing")) {
+                addEntry(priority, "Missing", getCurrentFile().toString(), -1, currentAttributeMap.get("message"));
+                retValue = true;
+            } else if (errorType.equals("invalidencoding")) {
+                addEntry(priority, "Incorrect policy files", getCurrentFile().toString(), -1,  currentAttributeMap.get("message"));
+                retValue = true;
             }
+        }
         return retValue;
     }
     
@@ -126,7 +126,7 @@
      * @param streamReader: the input stream reader which contains the xml data to be parsed for recording data.
      * @return true if there are any element to be added to the database.
      */
-    boolean characters (XMLStreamReader streamReader) {
+    boolean characters(XMLStreamReader streamReader) {
         return false;
     }
 }
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/SBSLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -159,7 +159,7 @@
      */
     @Deprecated
     public void setCleanLogFile(File logFile) {
-       log("The usage of the cleanLogFile is deprecated.");
+        log("The usage of the cleanLogFile is deprecated.");
     }
 
     /**
@@ -217,7 +217,7 @@
                         toProcess.put(text.trim(), streamReader.getLocation().getLineNumber() + i);
                     }
                     i++;
-               }
+                }
                 boolean entryCreated = false;
                 //Check for any general errors.
                 for (String textString : toProcess.keySet()) {
@@ -238,64 +238,64 @@
      * @return true if there are any element to be added to the database.
      */
     public boolean startElement (XMLStreamReader streamReader) {
-            String tagName = streamReader.getLocalName();
-            if (tagName.equalsIgnoreCase("buildlog")) {
-                logger.debug("starting with buildlog");
-                inMainDataSection  = true;
+        String tagName = streamReader.getLocalName();
+        if (tagName.equalsIgnoreCase("buildlog")) {
+            logger.debug("starting with buildlog");
+            inMainDataSection  = true;
+        }
+        if (tagName.equalsIgnoreCase("recipe") ) {
+            lineNumber = streamReader.getLocation().getLineNumber();
+            currentComponent = getComponent(streamReader);
+            recordText = true;
+            inMainDataSection = false;
+            recipeStatus = "ok";
+        } if (tagName.equalsIgnoreCase("status") ) {
+            String exit = streamReader.getAttributeValue(null, "exit");
+            recipeStatus = (exit != null) ? exit : "ok";
+        } else if (tagName.equalsIgnoreCase("error")
+                || tagName.equalsIgnoreCase("warning")) {
+            lineNumber = streamReader.getLocation().getLineNumber();
+            currentComponent = getComponent(streamReader);
+            recordText = true;
+            inMainDataSection = false;
+        } else if (tagName.equalsIgnoreCase("whatlog")) {
+            members.clear();
+            currentComponent = getComponent(streamReader);
+            inMainDataSection = false;
+            inWhatLogSection = true;
+        } else if (inWhatLogSection && tagName.equals("export")) {
+            String text = SBSLogMetaDataInput.getAttribute("destination", streamReader);
+            if (text != null && text.trim().length() > 0) {
+                String member = SBSLogMetaDataInput.removeDriveAndBldInf(text);
+                boolean exists = (new File(text)).exists();
+                Metadata.WhatLogMember entry = new Metadata.WhatLogMember(member, exists);
+                members.add(entry);
             }
-            if (tagName.equalsIgnoreCase("recipe") ) {
-                lineNumber = streamReader.getLocation().getLineNumber();
-                currentComponent = getComponent(streamReader);
-                recordText = true;
-                inMainDataSection = false;
-                recipeStatus = "ok";
-            } if (tagName.equalsIgnoreCase("status") ) {
-                String exit = streamReader.getAttributeValue(null, "exit");
-                recipeStatus = (exit != null) ? exit : "ok";
-            } else if (tagName.equalsIgnoreCase("error")
-                    || tagName.equalsIgnoreCase("warning")) {
-                lineNumber = streamReader.getLocation().getLineNumber();
-                currentComponent = getComponent(streamReader);
-                recordText = true;
-                inMainDataSection = false;
-            } else if (tagName.equalsIgnoreCase("whatlog")) {
-                members.clear();
-                currentComponent = getComponent(streamReader);
-                inMainDataSection = false;
-                inWhatLogSection = true;
-            } else if (inWhatLogSection && tagName.equals("export")) {
-                String text = SBSLogMetaDataInput.getAttribute("destination", streamReader);
-                if (text != null && text.trim().length() > 0) {
-                    String member = SBSLogMetaDataInput.removeDriveAndBldInf(text);
-                    boolean exists = (new File(text)).exists();
-                    Metadata.WhatLogMember entry = new Metadata.WhatLogMember(member, exists);
-                    members.add(entry);
+        } else if (inWhatLogSection && !tagName.equals("export")) {
+            logTextInfo = "";
+            recordText = true;                
+        } else if (tagName.equalsIgnoreCase("time")) {
+            inMainDataSection = false;
+            currentElapsedTime = Float.valueOf(getAttribute("elapsed", streamReader)).floatValue();
+            logger.debug("currentElapsedTime: " + currentElapsedTime);
+            if (currentComponent != null) {
+                TimeEntry timeObject = componentTimeMap.get(currentComponent);
+                logger.debug("currentComponent:" + currentComponent);
+                if (timeObject == null) {
+                    timeObject = new TimeEntry(currentElapsedTime, getCurrentFile().toString());
+                    componentTimeMap.put(currentComponent, timeObject);
+                    logger.debug("creating to new time object");
+                } else  {
+                    timeObject.addElapsedTime(currentElapsedTime);
+                    logger.debug("adding it to existing time object");
                 }
-            } else if (inWhatLogSection && !tagName.equals("export")) {
-                logTextInfo = "";
-                recordText = true;                
-            } else if (tagName.equalsIgnoreCase("time")) {
-                inMainDataSection = false;
-                currentElapsedTime = Float.valueOf(getAttribute("elapsed", streamReader)).floatValue();
-                logger.debug("currentElapsedTime: " + currentElapsedTime);
-                if (currentComponent != null) {
-                    TimeEntry timeObject = componentTimeMap.get(currentComponent);
-                    logger.debug("currentComponent:" + currentComponent);
-                    if (timeObject == null) {
-                        timeObject = new TimeEntry(currentElapsedTime, getCurrentFile().toString());
-                        componentTimeMap.put(currentComponent, timeObject);
-                        logger.debug("creating to new time object");
-                    } else  {
-                        timeObject.addElapsedTime(currentElapsedTime);
-                        logger.debug("adding it to existing time object");
-                    }
-                }
-            } else if (tagName.equalsIgnoreCase("clean")) {
-                inMainDataSection = false;
-            } else if (tagName.equalsIgnoreCase("info")) {
-                inMainDataSection = false;
-                recordText = true;
             }
+        } else if (tagName.equalsIgnoreCase("clean")) {
+            inMainDataSection = false;
+        } else if (tagName.equalsIgnoreCase("info")) {
+            inMainDataSection = false;
+            recordText = true;
+        }
         return false;
     }
 
@@ -306,40 +306,40 @@
      * @return true if there are any element to be added to the database.
      */
     public boolean isAdditionalEntry() {
-            if (!componentTimeMap.isEmpty()) {
-                Set<String> componentSet = componentTimeMap.keySet();
-                for (String component : componentSet) {
-                    
-                    TimeEntry entry = componentTimeMap.get(component);
-                    addEntry("default", component, entry.getFilePath(), -1, 
-                            null, entry.getElapsedTime(), null);
-                    componentTimeMap.remove(component);
-                    return true;
+        if (!componentTimeMap.isEmpty()) {
+            Set<String> componentSet = componentTimeMap.keySet();
+            for (String component : componentSet) {
+                
+                TimeEntry entry = componentTimeMap.get(component);
+                addEntry("default", component, entry.getFilePath(), -1, 
+                        null, entry.getElapsedTime(), null);
+                componentTimeMap.remove(component);
+                return true;
+            }
+        }
+        if (!categorizationCompleted) {
+            if (cleanLogFile != null) {
+                if (categorizationHandler == null ) {
+                    logger.debug("initializing categorization handler");
+                    categorizationHandler = 
+                        new CategorizationHandler(cleanLogFile, generalTextEntries);
                 }
             }
-            if (!categorizationCompleted) {
-                if (cleanLogFile != null) {
-                    if (categorizationHandler == null ) {
-                        logger.debug("initializing categorization handler");
-                        categorizationHandler = 
-                            new CategorizationHandler(cleanLogFile, generalTextEntries);
+            if (categorizationHandler != null && categorizationHandler.hasNext()) {
+                try {
+                    CategoryEntry entry = categorizationHandler.getNext();
+                    if (entry != null) {
+                        addEntry(entry.getSeverity(), entry.getCategory(), entry.getLogFile(), 
+                                entry.getLineNumber(), entry.getText());
+                        return true;
                     }
+                } catch (XMLStreamException ex) {
+                    logger.debug("Exception during categorization handler", ex);
+                    return false;
                 }
-                if (categorizationHandler != null && categorizationHandler.hasNext()) {
-                    try {
-                        CategoryEntry entry = categorizationHandler.getNext();
-                        if (entry != null) {
-                            addEntry(entry.getSeverity(), entry.getCategory(), entry.getLogFile(), 
-                                    entry.getLineNumber(), entry.getText());
-                            return true;
-                        }
-                    } catch (XMLStreamException ex) {
-                        logger.debug("Exception during categorization handler", ex);
-                        return false;
-                    }
-                }
-                categorizationCompleted = true;
             }
+            categorizationCompleted = true;
+        }
         return false;
     }
 
@@ -349,68 +349,68 @@
      * @return true if there are any element to be added to the database.
      */
     public boolean endElement(XMLStreamReader streamReader) {
-            String tagName = streamReader.getLocalName();
-            if (tagName.equalsIgnoreCase("recipe")) {
-                inMainDataSection = true;
-                recordText = false;
-                if (logTextInfo != null) {
-                    if (currentComponent == null) {
-                        currentComponent = "general";
-                    }
-                    Statistics stat = new Statistics();
-                    boolean entryCreated = findAndAddEntries(logTextInfo, currentComponent,
-                            getCurrentFile().toString(), lineNumber, stat);
-                    if (stat.getSeveriry("error") == 0 && recipeStatus.equals("failed")) {
-                        addEntry("error", currentComponent, getCurrentFile().toString(), 
-                                lineNumber, FAILED_STATUS_MESSAGE);
-                        entryCreated = true;
-                    }
-                    logTextInfo = "";
-                    recipeStatus = "ok";
-                    return entryCreated;
-                }
-            } else if (tagName.equalsIgnoreCase("error")
-                    || tagName.equalsIgnoreCase("warning")) {
-                inMainDataSection = true;
-                recordText = false;
+        String tagName = streamReader.getLocalName();
+        if (tagName.equalsIgnoreCase("recipe")) {
+            inMainDataSection = true;
+            recordText = false;
+            if (logTextInfo != null) {
                 if (currentComponent == null) {
                     currentComponent = "general";
                 }
-                addEntry(tagName, currentComponent, getCurrentFile().toString(), lineNumber, 
-                        logTextInfo);
-                logTextInfo = "";
-                return true;
-            } else if (tagName.equalsIgnoreCase("whatlog") ) {
-                inWhatLogSection = false;
-                inMainDataSection = true;
-                recordText = false;
-                logTextInfo = "";
-                addEntry("default", currentComponent, getCurrentFile().toString(), 
-                        streamReader.getLocation().getLineNumber(), "what log info", -1,  new Metadata.WhatEntry(currentComponent, members));
-                return true;
-            } else if (inWhatLogSection && !tagName.equalsIgnoreCase("export") && !tagName.equalsIgnoreCase("whatlog")) {
-                if (logTextInfo.trim().length() > 0) {
-                    String member = SBSLogMetaDataInput.removeDriveAndBldInf(logTextInfo.trim());
-                    boolean exists = (new File(logTextInfo.trim())).exists();
-                    Metadata.WhatLogMember entry = new Metadata.WhatLogMember(member, exists);
-                    members.add(entry);
+                Statistics stat = new Statistics();
+                boolean entryCreated = findAndAddEntries(logTextInfo, currentComponent,
+                        getCurrentFile().toString(), lineNumber, stat);
+                if (stat.getSeveriry("error") == 0 && recipeStatus.equals("failed")) {
+                    addEntry("error", currentComponent, getCurrentFile().toString(), 
+                            lineNumber, FAILED_STATUS_MESSAGE);
+                    entryCreated = true;
                 }
                 logTextInfo = "";
-                recordText = false;
-            } else if (tagName.equalsIgnoreCase("clean")) {
-                inMainDataSection = true;                
-            } else if (tagName.equalsIgnoreCase("info")) {
-                inMainDataSection = true;
-                recordText = false;
-                if (logTextInfo != null) {
-                    Matcher m = buildTimeMatcher.matcher(logTextInfo);
-                    if (m.matches()) {
-                        buildTime = Integer.parseInt(m.group(1));
-                        logger.info("Run time: " + buildTime);
-                    }
+                recipeStatus = "ok";
+                return entryCreated;
+            }
+        } else if (tagName.equalsIgnoreCase("error")
+                || tagName.equalsIgnoreCase("warning")) {
+            inMainDataSection = true;
+            recordText = false;
+            if (currentComponent == null) {
+                currentComponent = "general";
+            }
+            addEntry(tagName, currentComponent, getCurrentFile().toString(), lineNumber, 
+                    logTextInfo);
+            logTextInfo = "";
+            return true;
+        } else if (tagName.equalsIgnoreCase("whatlog") ) {
+            inWhatLogSection = false;
+            inMainDataSection = true;
+            recordText = false;
+            logTextInfo = "";
+            addEntry("default", currentComponent, getCurrentFile().toString(), 
+                    streamReader.getLocation().getLineNumber(), "what log info", -1,  new Metadata.WhatEntry(currentComponent, members));
+            return true;
+        } else if (inWhatLogSection && !tagName.equalsIgnoreCase("export") && !tagName.equalsIgnoreCase("whatlog")) {
+            if (logTextInfo.trim().length() > 0) {
+                String member = SBSLogMetaDataInput.removeDriveAndBldInf(logTextInfo.trim());
+                boolean exists = (new File(logTextInfo.trim())).exists();
+                Metadata.WhatLogMember entry = new Metadata.WhatLogMember(member, exists);
+                members.add(entry);
+            }
+            logTextInfo = "";
+            recordText = false;
+        } else if (tagName.equalsIgnoreCase("clean")) {
+            inMainDataSection = true;                
+        } else if (tagName.equalsIgnoreCase("info")) {
+            inMainDataSection = true;
+            recordText = false;
+            if (logTextInfo != null) {
+                Matcher matcher = buildTimeMatcher.matcher(logTextInfo);
+                if (matcher.matches()) {
+                    buildTime = Integer.parseInt(matcher.group(1));
+                    logger.info("Run time: " + buildTime);
                 }
-                logTextInfo = "";
             }
+            logTextInfo = "";
+        }
         return false;
     }
 
@@ -725,27 +725,27 @@
                 while (xmlStreamReader.hasNext()) {
                     int eventType = xmlStreamReader.next();
                     switch (eventType) {
-                    case XMLEvent.START_ELEMENT:
-                        startElement(xmlStreamReader);
-                        break;
-                    case XMLEvent.END_ELEMENT:
-                        endElement(xmlStreamReader);
-                        break;
-                    case XMLEvent.CHARACTERS:
-                        String path = characters(xmlStreamReader);
-                        if (path != null ) {
-                            currentList = getEntry(path);
-                            if (currentList != null && !currentList.isEmpty()) {
-                                if (currentComponent != null) {
-                                    updateCategoryEntries(currentList, currentComponent);
-                                    CategoryEntry entry = (CategoryEntry)currentList.remove(0);
-                                    return entry;
+                        case XMLEvent.START_ELEMENT:
+                            startElement(xmlStreamReader);
+                            break;
+                        case XMLEvent.END_ELEMENT:
+                            endElement(xmlStreamReader);
+                            break;
+                        case XMLEvent.CHARACTERS:
+                            String path = characters(xmlStreamReader);
+                            if (path != null ) {
+                                currentList = getEntry(path);
+                                if (currentList != null && !currentList.isEmpty()) {
+                                    if (currentComponent != null) {
+                                        updateCategoryEntries(currentList, currentComponent);
+                                        CategoryEntry entry = (CategoryEntry)currentList.remove(0);
+                                        return entry;
+                                    }
                                 }
                             }
-                        }
-                        break;
-                    default:
-                        break;
+                            break;
+                        default:
+                            break;
                     }
                 }
                 if (xmlStreamReader != null) {
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ant/types/XMLLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -46,11 +46,11 @@
      * Constructor
      */
     public XMLLogMetaDataInput() {
-            inParsing = true;
-            xmlInputFactory = XMLInputFactory.newInstance();
-            xmlInputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,Boolean.TRUE);
-            xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,Boolean.FALSE);
-            xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING , Boolean.TRUE);
+        inParsing = true;
+        xmlInputFactory = XMLInputFactory.newInstance();
+        xmlInputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,Boolean.TRUE);
+        xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,Boolean.FALSE);
+        xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING , Boolean.TRUE);
 
     }
     
@@ -88,17 +88,17 @@
                 while (xmlStreamReader.hasNext()) {
                     eventType = xmlStreamReader.next();
                     switch (eventType) {
-                    case XMLEvent.START_ELEMENT:
-                        entryCreated = startElement(xmlStreamReader);
-                        break;
-                    case XMLEvent.END_ELEMENT:
-                        entryCreated = endElement(xmlStreamReader);
-                        break;
-                    case XMLEvent.CHARACTERS:
-                        entryCreated = characters(xmlStreamReader);
-                        break;
-                    default:
-                        break;
+                        case XMLEvent.START_ELEMENT:
+                            entryCreated = startElement(xmlStreamReader);
+                            break;
+                        case XMLEvent.END_ELEMENT:
+                            entryCreated = endElement(xmlStreamReader);
+                            break;
+                        case XMLEvent.CHARACTERS:
+                            entryCreated = characters(xmlStreamReader);
+                            break;
+                        default:
+                            break;
                     }
                     if ( entryCreated) {
                         return true; 
@@ -115,7 +115,7 @@
             log.debug("FileNotFoundException in isEntryCreated" + ex);
         // CheckStyle:IllegalCatch OFF
         } catch (RuntimeException ex) { //have to catch this otherwise it crashes other parts of the code
-            throw new BuildException ("Failed during writing data to db:  ", ex);
+            throw new BuildException("Failed during writing data to db:  ", ex);
         }
         // CheckStyle:IllegalCatch ON
         return false;
@@ -127,7 +127,7 @@
      * @param streamReader: the input stream reader which contains the xml data to be parsed for recording data.
      * @return true if there are any element to be added to the database.
      */
-    abstract boolean startElement (XMLStreamReader streamReader) ;
+    abstract boolean startElement(XMLStreamReader streamReader) ;
 
     /**
      * Function implemented by the subclasses to process the end event of xml stream callback.
@@ -141,5 +141,5 @@
      * @param streamReader: the input stream reader which contains the xml data to be parsed for recording data.
      * @return true if there are any element to be added to the database.
      */
-    abstract boolean characters (XMLStreamReader streamReader);
+    abstract boolean characters(XMLStreamReader streamReader);
 }
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/db/ORMMetadataDB.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/db/ORMMetadataDB.java	Wed Jun 16 16:51:40 2010 +0300
@@ -58,7 +58,7 @@
     }
 
     public void finalizeMetadata(String logPath) {
-        MetadataUtil.finalizeMetadata(logPath);
+        MetadataUtil.finalizeMetadata(dbPath, logPath);
     }
 
     public void finalizeDB() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_metadata.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_metadata.ant.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test-metadata" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium antlib metadata tests.</description>
+
+    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef name="fmpp" classname="fmpp.tools.AntTask" onerror="report"/>
+
+    <target name="check-metadata">
+        <hlm:metadatarecord srcfile="${basedir}\data\gensis.txt" database="${basedir}\metadata_db">
+            <fileset dir="data" includes="gensis.txt"/>
+            <hlm:textlogparser>
+                <!-- Single set defined by csv file 
+                <hlm:metadatafilterset filterFile="${basedir}\data\common.csv"/>-->
+                <!-- Set defined by nested single filter and another nested set -->
+                <hlm:metadatafilterset>
+                    <hlm:metadatafilter priority="error" regex=".*Warning: Could not find file.*" description="Test pattern for missing file."/>
+                    <!--<hlm:metadatafilterset>
+                        <hlm:metadatafilter priority="warning" regex="File not found" description="Test pattern for missing file."/>
+                    </hlm:metadatafilterset>-->
+                </hlm:metadatafilterset>
+            </hlm:textlogparser>
+        </hlm:metadatarecord>
+        <!--<au:assertLogContains text="Successfully executed codescanner"/>
+        <au:assertLogContains text="Output format: xml,html"/>
+        <au:assertFileExists file="${codescanner.output.dir}/problemIndex.xml"/>-->
+    </target>
+    
+    
+    <target name="render-scanlog">
+        <property name="build.logs.dir" value="${bmd.test.project.dir}/test_bmd" />
+        <fmpp sourceFile="${basedir}/../src/templates/readdata.xml.ftl"
+                      outputFile="${basedir}/readdata.xml">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${basedir}/../src/templates
+            </freemarkerLinks>
+            <data>
+                templatedir: "${basedir}/src/templates"
+                template: "components_status.xml.ftl"
+                dbPath: "tests/metadata_db"
+                countOnly: "true"
+                tableName: "out"
+                queryString: "where priority='WARNING' or priority='error'"
+                limit: "500"
+                ant: antProperties()
+            </data>
+        </fmpp>
+    </target>
+
+    <hlm:metadatafilterset id="metadata.regex.test">
+        <hlm:metadatafilter priority="ERROR" regex="^Error \d+: this is some serious error.*" description="Test pattern for testing metadataRegexTest condition."/>
+    </hlm:metadatafilterset>
+
+    <target name="test-scanlog-metadata-regex-pass">
+        <au:assertTrue>
+            <hlm:metadataRegexTest severity="ERROR" string="Error 193: this is some serious error">
+                <hlm:metadatafilterset refid="metadata.regex.test"/>
+            </hlm:metadataRegexTest>
+        </au:assertTrue>
+    </target>
+    <target name="test-scanlog-metadata-regex-fail-1">
+        <au:expectfailure>
+            <fail>
+                <condition>
+                    <hlm:metadataRegexTest severity="ERROR">
+                        <hlm:metadatafilterset refid="metadata.regex.test"/>
+                    </hlm:metadataRegexTest>
+                </condition>
+            </fail>
+        </au:expectfailure>
+    </target>
+    <target name="test-scanlog-metadata-regex-fail-2">
+        <au:expectfailure>
+            <fail>
+                <condition>
+                    <hlm:metadataRegexTest string="Error 193: this is some serious error">
+                        <hlm:metadatafilterset refid="metadata.regex.test"/>
+                    </hlm:metadataRegexTest>
+                </condition>
+            </fail>
+        </au:expectfailure>
+    </target>
+    
+    
+    <hlm:metadatafilterset id="filterset.imaker">
+        <metadatafilter priority="error" regex="^\s*Total duration:\s+\d+:\d+\s+Status:\s+FAILED" description="" />
+        <metadatafilter priority="error" regex="^.+- DOESN'T EXIST" description="" />
+    </hlm:metadatafilterset>
+    <hlm:metadatafilterset id="filterset.abld">
+        <metadatafilter priority="error" regex="^ERROR:" description="" />
+        <metadatafilter priority="warning" regex="^WARNING:.*" description="" />
+    </hlm:metadatafilterset>
+    
+    <target name="test-rombuild-metadata">
+        <hlm:metadatarecord database="${basedir}\metadata_db">
+            <hlm:imakermetadatainput>
+                <fileset casesensitive="false" file="${basedir}/../data/build_roms_sample.log" />
+                <fileset casesensitive="false" file="${basedir}/../data/sample_abld.log" />
+                <metadatafilterset refid="filterset.imaker" />
+            </hlm:imakermetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadatarecord database="${basedir}\metadata_db">
+            <hlm:imakermetadatainput>
+                <fileset casesensitive="false" file="${basedir}/../data/sample_abld.log" />
+                <metadatafilterset refid="filterset.abld" />
+            </hlm:imakermetadatainput>
+        </hlm:metadatarecord>
+        
+        <fmpp sourceFile="${basedir}/../../../../../tools/common/templates/diamonds/build_roms_diamonds.xml.ftl"
+                     outputfile="build_roms_diamonds.xml">
+            <data expandProperties="yes">
+                dbPath: ${basedir}\metadata_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        
+        <loadfile srcfile="build_roms_diamonds.xml" property="diamonds.output"/>
+        <au:assertMatches string="${diamonds.output}" pattern=".*?RM-XXX_010\.014_00\.01_79\.92_prd\.rofs3\.fpsx.*" singleline="true"/>
+        <delete file="build_roms_diamonds.xml"/>
+        <delete dir="${basedir}\metadata_db"/>
+    </target>
+    
+</project>
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_regex.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,800 @@
+<!-- 
+============================================================================ 
+Name        : test_regex.ant.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test-metadata-regex" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib metadata unittests.</description>
+
+    <property environment="env" />
+    
+    <dirname property="project.dir" file="${ant.file.test-metadata-regex}" />
+    
+    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef name="fmpp" classname="fmpp.tools.AntTask" onerror="report"/>
+
+    <property name="metadata-filterfile" value="${project.dir}/../data/common.csv"/>
+    <property name="metadata-log-files" value="${project.dir}/../data/*.log"/>
+    
+    <hlm:metadatafilterset id="all-regex-filterfile">
+        <metadatafilterset filterfile="${metadata-filterfile}" />
+    </hlm:metadatafilterset>
+
+    <target name="setUp">
+        <mkdir dir="${test.temp.dir}" />
+    </target>
+    
+    <!-- Test categorization for sbs scanlog
+    -->
+    <target name="test-categorization">
+        <delete dir="${test.temp.dir}/categorization_db" failonerror="false" />
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${test.temp.dir}/categorization_db">
+            <hlm:sbsmetadatainput cleanLogFile="${project.dir}/../data/categorization_clean.log">
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="categorization.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/parsing_result.ini.ftl"
+                     outputfile="${test.temp.dir}/categorization_db_result.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/categorization_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <property file="${test.temp.dir}/categorization_db_result.ini" />
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.logs}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.execution.times}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${execution.time.0}" arg2="226" />
+        </au:assertTrue>
+        <hlm:metadataCountSeverity severity="error" log="categorization.log" db="${test.temp.dir}/categorization_db" property="cleanlog_errors"/>
+        <echo>cleanlog_errors: ${cleanlog_errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${cleanlog_errors}" arg2="2"/>
+        </au:assertTrue>
+    </target>
+    <!-- Test parser error
+    -->
+    <!-- Test parser error
+    -->
+    <target name="parser-error">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_all_filterfile_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false"/>
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <!-- do some checks that files are present and raise asserts if not present-->
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+        
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="all_regex_type.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <!-- check we have created the DB file-->
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <target name="parser-error1">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_all_filterfile_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false"/>
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <!-- do some checks that files are present and raise asserts if not present-->
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+        
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="all_regex1_type.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <!-- check we have created the DB file-->
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-parser-error-ant-call">
+        <parallel>
+            <antcall target="parser-error" />
+            <antcall target="parser-error1" />
+        </parallel>
+    </target>
+
+    <!-- Test parser error-->
+    <target name="test-parser-error-keepgoing">
+        <delete dir="${test.temp.dir}/parser_error_db" failonerror="false" />
+        <hlm:metadatarecord database="${test.temp.dir}/parser_error_db" failonerror="false">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="parser_error.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+    </target>
+
+    <!-- Test categorization without cleanLogFile
+    -->
+    <target name="test-categorization-nocleanlog">
+        <delete dir="${test.temp.dir}/categorization_no_clean_db" failonerror="false" />
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${test.temp.dir}/categorization_no_clean_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="categorization.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="categorization.log" db="${test.temp.dir}/categorization_no_clean_db" property="nocleanlog_errors"/>
+        <echo>test-categorization-nocleanlog: ${nocleanlog_errors}</echo>
+        <au:assertTrue>
+            <equals arg1="${nocleanlog_errors}" arg2="2"/>
+        </au:assertTrue>
+    </target>
+    <target name="test-categorization-component-check">
+        <delete dir="${test.temp.dir}/log-entry-category_component_check_db" failonerror="false" />
+        <echo message="component error check for categorization" />
+        <hlm:metadatarecord database="${test.temp.dir}/log-entry-category_component_check_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="categorization_compile.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../../src/templates/faults.txt.ftl"
+                     outputfile="${test.temp.dir}/faults.txt">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${project.dir}/../../src/templates
+            </freemarkerLinks>
+            
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/log-entry-category_component_check_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <loadfile property="componentlogEntry"
+              srcFile="${test.temp.dir}/faults.txt"/>
+        <au:assertMatches string="${componentlogEntry}" pattern="sf/app/organizer/group:error:2" 
+                     casesensitive="false"/>
+    </target>
+    
+    <target name="test-categorization-nocleanlog-failed-empty-recipe">
+        <delete dir="${test.temp.dir}/log-entry-failed-empty-recipe_db" failonerror="false" />
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${test.temp.dir}/log-entry-failed-empty-recipe_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="categorization_failed_empty_recipe.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="categorization_failed_empty_recipe.log" db="${test.temp.dir}/log-entry-failed-empty-recipe_db" property="empty_nocleanlog_errors"/>
+        <au:assertTrue>
+            <equals arg1="${empty_nocleanlog_errors}" arg2="2"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-categorization-nocleanlog-failed-error-in-recipe">
+        <delete dir="${test.temp.dir}/log-entry-failed-error-in-recipe_db" failonerror="false" />
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${test.temp.dir}/log-entry-failed-error-in-recipe_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="categorization_failed_error_in_recipe.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="categorization_failed_error_in_recipe.log" db="${test.temp.dir}/log-entry-failed-error-in-recipe_db" property="empty_nocleanlog_errors1"/>
+        <au:assertTrue>
+            <equals arg1="${empty_nocleanlog_errors1}" arg2="2"/>
+        </au:assertTrue>
+    </target>
+
+<!-- 
+    <target name="test-log-entry-for-no-errors">
+        <delete dir="${test.temp.dir}/log-entry-for-no-error_db" failonerror="false" />
+        <echo message="categorization validation" />
+        <hlm:metadatarecord database="${test.temp.dir}/log-entry-for-no-error_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="noerror.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../../src/templates/general_category.txt.ftl"
+                     outputfile="${test.temp.dir}/general_category.txt">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${project.dir}/../../src/templates/macro
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/log-entry-for-no-error_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <au:assertFileExists file="${test.temp.dir}/general_category.txt" message="Error in test cases"/>
+        <loadfile property="logEntry"
+              srcFile="${test.temp.dir}/general_category.txt"/>
+        <au:assertMatches string="${logEntry}" pattern="component : general : logfile : " 
+                     casesensitive="false"/>
+    </target>
+    -->
+    <!-- Check for all the regular expression defined in the filter file,
+    The log file contains text for matching regular expression.
+    -->
+    <target name="test-all-regex-filterfile">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_all_filterfile_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false"/>
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <!-- do some checks that files are present and raise asserts if not present-->
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+        
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*regex*.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <!-- check we have created the DB file-->
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <!-- To verify some lengthy text for recipe tag from 
+    sbs metadata input.
+    -->
+    <target name="test-recipe-lengthy-text">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_lengthy_text_db"/>
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <delete dir="${metadata-read-db}" failonerror="false"/>
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="receipe*.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-filterfile" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <!--modify the errors so regex=".*warning U4010" description="mingw error" is no longer 
+    an error but a warning-->
+    <hlm:metadatafilterset id="all-regex-combined">
+        <metadatafilter priority="WARNING" regex=".*warning U4010" description="mingw error" />
+        <metadatafilterset filterfile="${metadata-filterfile}" />
+    </hlm:metadatafilterset>
+
+    <property name="metadata-all-db" value="${test.temp.dir}/log_all_combined_db"/>
+
+    <target name="test-all-regex-combined">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_all_combined_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*regex*.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-combined" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+
+    <property name="metadata-error-db" value="${test.temp.dir}/log_error_combined_db"/>
+    <!--create an invalid priority type, so contains message invalid 
+    priority and set to error as priority -->
+    <hlm:metadatafilterset id="all-regex-combined-error">
+        <metadatafilter priority="INCORRECT" regex=".*warning U4010" description="test error handling so incorrect priority" />
+        <metadatafilterset filterfile="${metadata-filterfile}" />
+    </hlm:metadatafilterset>
+    <!--create an invalid priority type, which contains warning invalid priority 
+    and continues with other data. 
+    -->
+    <target name="test-all-regex-combined-error">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_error_combined_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}" >
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*regex*.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-combined-error" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <!-- no need to check the DB file not present as it won't be-->
+    </target>
+    <!--try to add a different different filter type but not add the parameter so has an error-->
+    <hlm:metadatafilterset id="all-regex-combined-no-priority">
+        <metadatafilter regex=".*warning U4010" description="test error handling so incorrect priority" />
+        <metadatafilterset filterfile="${metadata-filterfile}" />
+    </hlm:metadatafilterset>
+    <!--try to add a different different filter type but not add the parameter so has an error-->
+    <target name="test-all-regex-combined-no-priority">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_error_combined_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*regex*.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-combined-no-priority" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <!-- no need to check the DB file not present as it won't be-->
+    </target>
+    
+
+    <!--try to add a different different filter type but not add the parameter so has an error-->
+    <hlm:metadatafilterset id="all-regex-combined-no-regex">
+        <metadatafilter priority="INCORRECT" description="test error handling so incorrect priority" />
+        <metadatafilter priority="WARNING" description="test error handling so incorrect priority" />
+        <metadatafilterset filterfile="${metadata-filterfile}" />
+    </hlm:metadatafilterset>
+
+    <!--try to add a different different filter type but not add the parameter so has an error-->
+    <target name="test-all-regex-combined-no-regex">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_error_combined_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="all regular expression validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*regex*.log"/>
+                </fileset>
+                <metadatafilterset refid="all-regex-combined-no-regex" />
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <!-- no need to check the DB file not present as it won't be-->
+    </target>
+    <hlm:metadatafilterset id="text_log_metadata_input">
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
+
+    <target name="test-text_log_metadata_input">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_text_metadata_input_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="text log metadata input validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*_fixslashes*.log"/>
+                </fileset>
+                <metadatafilterset refid="text_log_metadata_input" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <hlm:metadatafilterset id="abld_log_metadata_input">
+        <metadatafilter priority="WARNING" regex=".*warning U4010" description="mingw error" />
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
+
+
+    <target name="test-abld_log_metadata_input">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_abld_metadata_input_db"/>
+        <delete dir="${test.temp.dir}/log_abld_metadata_input_db" failonerror="false" />
+        <echo message="abld log metadata input validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:abldmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*sample_abld.log"/>
+                </fileset>
+                <metadatafilterset refid="abld_log_metadata_input" />
+            </hlm:abldmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+
+    <target name="test-policy_metadata_input">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_policy_metadata_input_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="policy metadata input validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:policymetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*policy*.log"/>
+                </fileset>
+            </hlm:policymetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <hlm:metadatafilterset id="ant_log_metadata_input">
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
+
+
+    <target name="test-ant_log_metadata_input">
+        <property name="metadata-read-db" value="${test.temp.dir}/log_ant_metadata_input_db"/>
+        <delete dir="${metadata-read-db}" failonerror="false" />
+        <echo message="ant log metadata input validation" />
+        <echo message="database:${metadata-read-db}" />
+        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
+        <mkdir dir="${test.temp.dir}"/>
+
+        <hlm:metadatarecord database="${metadata-read-db}">
+            <hlm:antmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*ant*.log"/>
+                </fileset>
+                <metadatafilterset refid="ant_log_metadata_input" />
+            </hlm:antmetadatainput>
+        </hlm:metadatarecord>
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+    </target>
+
+    <property name="metadata-read-ftl" value="${project.dir}/../../src/templates/readdata.xml.ftl"/>
+    <property name="metadata-read-output" value="${test.temp.dir}/readdata.html"/>
+<!-- 
+    <target name="test-readdata" depends="test-text_log_metadata_input" >
+        <property name="metadata-template-dir" value="${project.dir}/../../src/templates/" />
+        <property name="metadata-output-dir" value="${test.temp.dir}" />
+        <property name="metadata-read-ftl" value="${metadata-template-dir}/readdata.xml.ftl"/>
+        <property name="metadata-read-db" value="${metadata-output-dir}/log_text_metadata_input_db"/>
+        <property name="metadata-read-output" value="${metadata-output-dir}/readdata.html"/>
+        <delete file="${metadata-read-output}" failonerror="false" />
+        <au:assertFileExists file="${metadata-read-db}" message="${metadata-read-db} DB file was not created"/>
+        <fmpp sourceFile="${metadata-template-dir}/readdata.xml.ftl"
+                     outputfile="${metadata-output-dir}/readdata.html">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${project.dir}/../../src/templates
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                dbPath: ${metadata-read-db}
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <fmpp sourceFile="${metadata-template-dir}/build_status.xml.ftl"
+                     outputfile="${metadata-output-dir}/build_status.xml">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${project.dir}/../../src/templates
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                dbPath: ${metadata-read-db}
+                logfile: ido_abs_mcl_devlon70_robot_MCL.70.500_fixslashes_raptor.log
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <fmpp sourceFile="${metadata-template-dir}/email_new.html.ftl"
+                     outputfile="${metadata-output-dir}/build_status.html">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${project.dir}/../../src/templates
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                dbPath: ${metadata-read-db}
+                logfile: ido_abs_mcl_devlon70_robot_MCL.70.500_fixslashes_raptor.log
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <au:assertFileExists file="${metadata-read-output}" message="${metadata-read-output} DB file was not created"/>
+    </target>
+-->
+
+    <target name="test-generate-summary" depends="test-text_log_metadata_input">
+        <property name="metadata-summary-ftl" value="${project.dir}/../../src/templates/summary.html.ftl"/>
+        <property name="metadata-summary-output" value="${test.temp.dir}/summary.html"/>
+        <property name="metadata-output-dir" value="${test.temp.dir}/" />
+        <delete file="${metadata-summary-output}" failonerror="false" />
+        <property name="metadata-read-db" value="${metadata-output-dir}/log_text_metadata_input_db"/>
+        
+        <fmpp sourceFile="${metadata-summary-ftl}"
+                     outputfile="${metadata-summary-output}">
+            <freemarkerLinks expandProperties="yes">
+                macro: ${project.dir}/../../src/templates/macro
+            </freemarkerLinks>
+            <data expandProperties="yes">
+                dbPath: ${metadata-read-db}
+                loginfo: xml(${project.dir}/../data/ido_abs_mcl_devlon70_robot_MCL.70.500_info.log)
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <!-- check we have created the files -->
+        <au:assertTrue>
+            <available type="dir" file="${metadata-read-db}" />
+        </au:assertTrue>
+        <au:assertFileExists file="${metadata-summary-output}" message="${metadata-summary-output} summary output file was not created"/>
+    </target>
+    
+    <target name="test-countseverity">
+        <delete dir="${test.temp.dir}/dp_db" failonerror="false" />
+
+        <hlm:metadatarecord database="${test.temp.dir}/dp_db">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="*_fixslashes*.log"/>
+                </fileset>
+                <metadatafilterset refid="text_log_metadata_input" />
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+
+        <hlm:metadataCountSeverity severity="error" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" property="errors"/>
+        <echo message="${errors}" />
+        <au:assertTrue>
+            <equals arg1="${errors}" arg2="24"/>
+        </au:assertTrue>
+        <au:assertTrue>
+            <hlm:metadataHasSeverity severity="error" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" />
+        </au:assertTrue>
+        <au:assertFalse>
+            <hlm:metadataHasSeverity severity="fatal" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" />
+        </au:assertFalse>
+        
+    </target>
+
+    <target name="test-metadatacount-no-error-with-missing-files-path-with-backslashes">
+        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="metadatacount_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="data\metadatacount_missing_files.log" db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"/>
+        <au:assertTrue message="We must have 5 missing files counted as error.">
+            <equals arg1="${errors}" arg2="5"/>
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-very-long-warning">
+        <delete dir="${test.temp.dir}/very_long_warning_db" failonerror="false" />
+
+        <hlm:metadatarecord database="${test.temp.dir}/very_long_warning_db">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="very_long_warning.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+
+        <hlm:metadataCountSeverity severity="warning" log="very_long_warning.log" db="${test.temp.dir}/very_long_warning_db" property="warnings"/>
+        <echo message="test-very-long-warning: ${warnings}" />
+        <au:assertTrue>
+            <equals arg1="${warnings}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-whatlog-parsing">
+        <delete dir="${test.temp.dir}/whatlog_db" failonerror="false" />
+
+        <hlm:metadatarecord database="${test.temp.dir}/whatlog_db">
+            <hlm:sbsmetadatainput whatLogFile="${project.dir}/../data/build_whatlog.whatlog.log">
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="build_whatlog.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/whatlog_result.ini.ftl"
+                     outputfile="${test.temp.dir}/whatlog_result.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/whatlog_db
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <property file="${test.temp.dir}/whatlog_result.ini" />
+        <au:assertTrue message="Invalid number of logs">
+            <equals arg1="${number.of.logs}" arg2="1" />
+        </au:assertTrue>
+        <au:assertTrue message="Invalid number of whatlog entries">
+            <equals arg1="${number.of.whatlog.entries}" arg2="5" />
+        </au:assertTrue>
+    </target>
+
+    <target name="test-log-with-same-root-name">
+        <delete dir="${test.temp.dir}/log-with-same-root-name_db" failonerror="false"/>
+        <hlm:metadatarecord database="${test.temp.dir}/log-with-same-root-name_db">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include name="log-with-same-root-name.log*"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                </metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="log-with-same-root-name.log" db="${test.temp.dir}/log-with-same-root-name_db" property="log-with-same-root-name.log.error"/>
+        <au:assertTrue message="We should only find 1 error">
+            <equals arg1="${log-with-same-root-name.log.error}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-release-database-metadatatask">
+        <hlm:metadatarecord database="${test.temp.dir}/test-release-database-metadatatask_db">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include name="test-release-database-metadatatask.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                </metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <delete dir="${test.temp.dir}/log-with-same-root-name_db" failonerror="true" />
+    </target>
+
+    <target name="test-release-database-fmpp">
+        <hlm:metadatarecord database="${test.temp.dir}/test-release-database-fmpp_db">
+            <hlm:textmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include name="test-release-database-metadatatask.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
+                </metadatafilterset>
+            </hlm:textmetadatainput>
+        </hlm:metadatarecord>
+        <fmpp sourceFile="${project.dir}/../data/test-release-database-fmpp.ini.ftl"
+                     outputfile="${test.temp.dir}/test-release-database-fmpp.ini">
+            <data expandProperties="yes">
+                dbPath: ${test.temp.dir}/test-release-database-fmpp_db
+                ant: antProperties()
+            </data>
+        </fmpp>        
+        <delete dir="${test.temp.dir}/test-release-database-fmpp_db" failonerror="true" />
+    </target>
+    
+    
+    <target name="test-metadatacount-no-error-with-missing-files">
+        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="metadatacount_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="metadatacount_missing_files.log" db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"/>
+        <au:assertTrue message="We must have 5 missing files counted as error.">
+            <equals arg1="${errors}" arg2="5"/>
+        </au:assertTrue>
+    </target>
+    
+    <target name="test-metadatacount-error-with-missing-files">
+        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="metadatacount_error_and_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="metadatacount_error_and_missing_files.log" db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"/>
+        <au:assertTrue message="We must have 6 missing files counted as error.">
+            <equals arg1="${errors}" arg2="6"/>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-count-error-without-missing-files">
+        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
+            <hlm:sbsmetadatainput>
+                <fileset dir="${project.dir}/../data/">
+                    <include  name="metadatacount_error_and_missing_files.log"/>
+                </fileset>
+                <metadatafilterset>
+                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
+                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
+                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
+                </metadatafilterset>
+            </hlm:sbsmetadatainput>
+        </hlm:metadatarecord>
+        <hlm:metadataCountSeverity severity="error" log="metadatacount_error_and_missing_files.log"
+            db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"
+            countMissing="false"/>
+        <au:assertTrue message="We must have 1 missing files counted as error.">
+            <equals arg1="${errors}" arg2="1"/>
+        </au:assertTrue>
+    </target>
+
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/antunit/test_validity.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- 
+============================================================================ 
+Name        : test_diamonds.ant.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test-metadata-validity" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib diamonds unittests.</description>
+    
+    <dirname property="project.dir" file="${ant.file.test-metadata-validity}" />
+
+    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <taskdef name="fmpp" classname="fmpp.tools.AntTask"  onerror="report"/>
+
+    <!--
+    <hlm:metadatafilterset id="all-regex-filterfile">
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
+
+    <target name="test-all-regex-filterfile">
+        <echo message="all regular expression validation" />
+        <echo message="database:${project.dir}/../output/log_all_filterfile.sqlite" />
+        <hlm:metadatarecord database="${project.dir}/../output/log_all_filterfile.sqlite">
+            <fileset dir="${project.dir}/../data/">
+                <include  name="all*.log"/>
+            </fileset>
+           <hlm:saxlogparser>
+                <metadatafilterset refid="all-regex-filterfile" />
+           </hlm:saxlogparser>
+        </hlm:metadatarecord>
+    </target>
+
+    <hlm:metadatafilterset id="all-regex-combined">
+        <metadatafilter priority="WARNING" regex=".*warning U4010" description="mingw error" />
+        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
+    </hlm:metadatafilterset>
+
+    <target name="test-all-regex-combined">
+        <echo message="all regular expression validation" />
+        <echo message="database:${project.dir}/../output/log_all_combined.sqlite" />
+        <hlm:metadatarecord database="${project.dir}/../output/log_all_combined.sqlite">
+            <fileset dir="${project.dir}/../data/">
+                <include  name="all*.log"/>
+            </fileset>
+            <hlm:saxlogparser>
+                <metadatafilterset refid="all-regex-combined" />
+            </hlm:saxlogparser>
+        </hlm:metadatarecord>
+    </target>
+    -->
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/all_regex1_type.log	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<buildlog sbs_version="2.5.3 [2009-03-12 release]" xmlns="http://symbian.com/xml/build/log" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build/log http://symbian.com/xml/build/log/1_0.xsd">
+<info>sbs: version 2.5.3 [2009-03-12 release]
+</info>
+<info>SBS_HOME E:/Build_E/ido-config-df/sbs</info>
+<info>Set-up E:/Build_E/ido-config-df/sbs/sbs_init.xml</info>
+<warning>E:/build_e/sbs_2.8.4/sbs/win32/mingw/bin/cpp.exe: </warning>
+<info>Command-line-arguments -s z:\output/build/canonical_system_definition_build.xml -k -c armv5 -j 4 -m z:\output\logs/ido_imm_mcl_devlon70_robot_5.1.005__armv5_multiple_thread_build_Makefile --filters=FilterHeliumLog -f z:\output\logs/ido_imm_mcl_devlon70_robot_5.1.005__armv5_multiple_thread_build_compile.log</info>
+<recipe name='resourcedependencies' target='z:/epoc32/build/camera/c_87f62b1af2e7d874/gscameraplugin_dll/gscameraplugin_resource_plugins_27.rpp.d' host='fawec012' layer='app_layer' component='' bldinf='z:/sf/app/camera/group/bld.inf' mmp='z:/sf/app/camera/camerauis/cameraapp/generic/GsCamcorderPlugin/group/gscameraplugin.mmp' config='armv5_udeb' platform='' phase='RESOURCE_DEPS' source=''>
+<![CDATA[
+mingw_make.exe: error
+test FATAL ERROR(S):abcd
+): Missing file:
+abcd FLEXlm error:
+ABLD ERROR: 1234
+BLDMAKE ERROR: 43543
+test FATAL ERROR 
+fatal error U1077 error occured
+test warning U4010
+Warning:
+WARNING:
+LINK : warning
+REMARK: 
+:10: warning: cannot find matching deallocation function
+INFO:
+make[10]: ***abcd
+make[10]: abcd not remade because of errors
+error: ((Internal fault)):
+ERROR,error: ((Internal fault):)$,
+ error given more than once in the same rule
+ERROR: build error
+ERROR EC95940: ec error
+Errors caused tool to abort. asdfasdf
+test no rule to make target
+ERROR,.*no rule to make.*,
+ERROR	testing
+100) : WARNING: TEST123
+MAKEDEF WARNING: TEST
+TEST 123 \\(10) : Warning: (400)
+BLDMAKE WARNING: bldm warning
+MAKEDEF WARNING: make warning
+atest(100) : warning C aasdfa
+testas 100: warning: test123
+usage Usage Warning: warn1
+abcd mwld.exe: abcd
+Command line warning abcd
+anything ERROR: bad relocation: test123
+10 warning in component1
+EventType: Error Source: SweepNTabcde
+WARNING,.EventType:\s+Error\s+Source:\s+SweepNT.*,
+WARN	test
+anything Command line warning D4025 : test
+REMARK: test remark anything
+EventType: Error Source: GNU Make.
+abcd :10: warning: cannot find matching deallocation function 100:note abcd
+INFO: any info match
+"abcd" 
+line 100+: Warning:', : warning 30:,
+"abcd , line 100: Error: 100abcd:. abcd
+line 10: Warning:\', r\': warning 10: abcd
+"abcd, line 100: Warning: 100 abcd: abcd",
+]]><time start='1238421421.153697000' elapsed='0.171' />
++ RV=0
++ set +x
+<status exit='ok' attempt='1' />
+</recipe>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/data/build_roms_sample.log	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,282 @@
+Starting build: 75090
+mkdir epoc32\rombuild\temp
+mkdir epoc32\rombuild\temp\config_0
+Number of threads: 4
+
+++ Started at Thu May 6 13:08:38 2010
++++ HiRes Start 1273147718
+-- cmd /c imaker WORKDIR=epoc32\rombuild\temp/config_482  -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=prd rofs3-dir  
+iMaker 10.12.01, 23-Mar-2010.
+===============================================================================
+Target: rofs3-dir  Duration: 00:02  Status: OK
+iMaker log    = `Y:/output/release_flash_images/productexample/prd/customer/vanilla/rofs3/RM-XXX_010.014_00.01_79.92_prd_imaker_rofs3-dir.log'
+ROFS3 dir     = `y:/output/release_flash_images/productexample/prd/customer/vanilla/rofs3'
+ROFS3 image   = `y:/output/release_flash_images/productexample/prd/customer/vanilla/rofs3/RM-XXX_010.014_00.01_79.92_prd.rofs3.img' - DOESN'T EXIST
+ROFS3 symbols = `y:/output/release_flash_images/productexample/prd/customer/vanilla/rofs3/RM-XXX_010.014_00.01_79.92_prd.rofs3.symbol' - DOESN'T EXIST
+ROFS3 flash   = `y:/output/release_flash_images/productexample/prd/customer/vanilla/RM-XXX_010.014_00.01_79.92_prd.rofs3.fpsx' - DOESN'T EXIST
+-------------------------------------------------------------------------------
+Total duration: 00:03  Status: OK
+===============================================================================
++++ HiRes End 1273147721
+++ Finished at Thu May 6 13:08:41 2010
+++ Started at Thu May 6 13:08:41 2010
++++ HiRes Start 1273147721
+-- cmd /c imaker WORKDIR=epoc32\rombuild\temp/config_484  -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=rnd udaerase-dir  
+iMaker 10.12.01, 23-Mar-2010.
+===============================================================================
+Target: udaerase-dir  Duration: 00:01  Status: OK
+iMaker log      = `Y:/output/release_flash_images/productexample/rnd/uda/udaerase/udadata/RM-XXX_010.014_79.92.2010.15_rnd_imaker_udaerase-dir.log'
+UDA Erase flash = `y:/output/release_flash_images/productexample/rnd/uda/RM-XXX_010.014_79.92.2010.15_rnd.udaerase.fpsx' - DOESN'T EXIST
+-------------------------------------------------------------------------------
+Total duration: 00:02  Status: OK
+===============================================================================
++++ HiRes End 1273147723
+++ Finished at Thu May 6 13:08:43 2010
+++ Started at Thu May 6 13:08:41 2010
++++ HiRes Start 1273147721
+-- cmd /c imaker WORKDIR=epoc32\rombuild\temp/config_485  -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=prd udaerase-dir  
+iMaker 10.12.01, 23-Mar-2010.
+===============================================================================
+Target: udaerase-dir  Duration: 00:01  Status: OK
+iMaker log      = `Y:/output/release_flash_images/productexample/prd/uda/udaerase/udadata/RM-XXX_010.014_79.92_prd_imaker_udaerase-dir.log'
+UDA Erase flash = `y:/output/release_flash_images/productexample/prd/uda/RM-XXX_010.014_79.92_prd.udaerase.fpsx' - DOESN'T EXIST
+-------------------------------------------------------------------------------
+Total duration: 00:02  Status: OK
+===============================================================================
++++ HiRes End 1273147723
+++ Finished at Thu May 6 13:08:43 2010
+++ Started at Thu May 6 13:08:41 2010
++++ HiRes Start 1273147721
+-- cmd /c imaker WORKDIR=epoc32\rombuild\temp/config_486  -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=subcon udaerase-dir  
+iMaker 10.12.01, 23-Mar-2010.
+===============================================================================
+Target: udaerase-dir  Duration: 00:01  Status: OK
+iMaker log      = `Y:/output/release_flash_images/productexample/subcon/uda/udaerase/udadata/RM-XXX_010.014_79.92_subcon_imaker_udaerase-dir.log'
+UDA Erase flash = `y:/output/release_flash_images/productexample/subcon/uda/RM-XXX_010.014_79.92_subcon.udaerase.fpsx' - DOESN'T EXIST
+-------------------------------------------------------------------------------
+Total duration: 00:02  Status: OK
+===============================================================================
++++ HiRes End 1273147723
+++ Finished at Thu May 6 13:08:43 2010
+++ Started at Thu May 6 13:08:40 2010
++++ HiRes Start 1273147720
+-- cmd /c imaker WORKDIR=epoc32\rombuild\temp/config_483  -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=subcon rofs3-dir  
+iMaker 10.12.01, 23-Mar-2010.
+===============================================================================
+Target: rofs3-dir  Duration: 00:02  Status: OK
+iMaker log    = `Y:/output/release_flash_images/productexample/subcon/customer/vanilla/rofs3/RM-XXX_010.014_00.01_79.92_subcon_imaker_rofs3-dir.log'
+ROFS3 dir     = `y:/output/release_flash_images/productexample/subcon/customer/vanilla/rofs3'
+ROFS3 image   = `y:/output/release_flash_images/productexample/subcon/customer/vanilla/rofs3/RM-XXX_010.014_00.01_79.92_subcon.rofs3.img' - DOESN'T EXIST
+ROFS3 symbols = `y:/output/release_flash_images/productexample/subcon/customer/vanilla/rofs3/RM-XXX_010.014_00.01_79.92_subcon.rofs3.symbol' - DOESN'T EXIST
+ROFS3 flash   = `y:/output/release_flash_images/productexample/subcon/customer/vanilla/RM-XXX_010.014_00.01_79.92_subcon.rofs3.fpsx' - DOESN'T EXIST
+-------------------------------------------------------------------------------
+Total duration: 00:03  Status: OK
+===============================================================================
++++ HiRes End 1273147724
+++ Finished at Thu May 6 13:08:44 2010
+-- imaker -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=rnd core-image
+++ Started at Thu May  6 13:08:45 2010
++++ HiRes Start  1273147725.83
+imaker WORKDIR=epoc32\rombuild\temp/config_16  -f /epoc32/rom/config/ncp79/productexample/image_conf_productexample_ui.mk TYPE=rnd core-image
+iMaker 10.12.01, 23-Mar-2010.
+Generating file(s) for Core (ROM & ROFS1) image creation
+Generating Feature manager file(s)
+Creating Core (ROM & ROFS1) SOS image
+
+Missing file(s):
+1) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(1686): Missing file: '/epoc32/data/Z/resource/apps/MPSettingsROPModel.rsc' in statement 'data='
+2) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(1824): Missing file: '/epoc32/data/Z/private/20021377/backup_registration.xml' in statement 'data='
+3) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(2596): Missing file: '/epoc32/data/z/data/system/quickoffice/licenses/corolla/data.xml' in statement 'data='
+4) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(2597): Missing file: '/epoc32/data/z/data/system/quickoffice/licenses/corolla/key' in statement 'data='
+5) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(2614): Missing file: '/epoc32/data/Z/Resource/wappush/si.dtd' in statement 'data='
+6) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(2615): Missing file: '/epoc32/data/Z/Resource/wappush/sl.dtd' in statement 'data='
+7) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(2616): Missing file: '/epoc32/data/Z/Resource/wappush/si10.tok' in statement 'data='
+8) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(2617): Missing file: '/epoc32/data/Z/Resource/wappush/sl10.tok' in statement 'data='
+9) y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_core_master.oby(4905): Missing file: '/epoc32/data/Z/resource/help/juicehelp.hlp' in statement 'data='
+
+Warning(s):
+  1) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x000003f5
+  2) WARNING: the value of attribute statusflags has been overridden in original feature 0x000003f5
+  3) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x0000000b
+  4) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000000b
+  5) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x00000584
+  6) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000584
+  7) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x0000019b
+  8) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000019b
+  9) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000007
+ 10) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x000005ff
+ 11) WARNING: the value of attribute statusflags has been overridden in original feature 0x000005ff
+ 12) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x000001f8
+ 13) WARNING: the value of attribute statusflags has been overridden in original feature 0x000001f8
+ 14) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x0000000c
+ 15) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000000c
+ 16) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x0000007a
+ 17) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000007a
+ 18) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x00000059
+ 19) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000059
+ 20) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x00000003
+ 21) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000003
+ 22) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x00000126
+ 23) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000126
+ 24) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000005b
+ 25) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x00000066
+ 26) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000066
+ 27) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x00000001
+ 28) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000001
+ 29) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x0000006b
+ 30) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000006b
+ 31) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x000005f9
+ 32) WARNING: the value of attribute statusflags has been overridden in original feature 0x000005f9
+ 33) WARNING: the value of attribute statusflags has been overridden in original feature 0x00000072
+ 34) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x0000000d
+ 35) WARNING: the value of attribute statusflags has been overridden in original feature 0x0000000d
+ 36) WARNING: the value of attribute hrhmacro has been overridden in original feature 0x000006a9
+ 37) WARNING: the value of attribute statusflags has been overridden in original feature 0x000006a9
+ 38) WARNING: Error in reading features database file "/epoc32/include/s60customswfeatures.xml"
+ 39) WARNING: Unknown keyword 'LOCALISE_ALL_RESOURCES_BEGIN'.  Line 2133 ignored
+ 40) WARNING: Unknown keyword 'LOCALISE_ALL_RESOURCES_END'.  Line 2134 ignored
+ 41) WARNING: Unknown keyword '-----------------------------------------------------------'.  Line 2210 ignored
+ 42) WARNING: Unknown keyword '-----------------------------------------------------------'.  Line 2337 ignored
+ 43) WARNING: Unknown keyword '-----------------------------------------------------------'.  Line 2338 ignored
+ 44) WARNING: Unknown keyword '***'.  Line 2602 ignored
+ 45) WARNING: Unknown keyword 'LOCALISE_ALL_RESOURCES_BEGIN'.  Line 2133 ignored
+ 46) WARNING: Unknown keyword 'LOCALISE_ALL_RESOURCES_END'.  Line 2134 ignored
+ 47) WARNING: Unknown keyword '-----------------------------------------------------------'.  Line 2210 ignored
+ 48) WARNING: Unknown keyword '-----------------------------------------------------------'.  Line 2337 ignored
+ 49) WARNING: Unknown keyword '-----------------------------------------------------------'.  Line 2338 ignored
+ 50) WARNING: Unknown keyword '***'.  Line 2602 ignored
+ 51) WARNING: Kernel/variant/extension
+ 52) WARNING: Kernel/variant/extension
+ 53) WARNING: Kernel/variant/extension
+ 54) Warning: Can't open "\epoc32\release\ARMV5\urel\AR_LServer.exe.map" or "\epoc32\release\ARMV5\urel\AR_LServer.map"
+ 55) Warning: Can't open "\epoc32\release\ARMV5\urel\AP_CES_CoreComponents.dll.map" or "\epoc32\release\ARMV5\urel\AP_CES_CoreComponents.map"
+ 56) Warning: Can't open "\epoc32\release\ARMV5\urel\AP_HDMetafile2.dll.map" or "\epoc32\release\ARMV5\urel\AP_HDMetafile2.map"
+ 57) Warning: Can't open "\epoc32\release\ARMV5\urel\AP_HDOfficeCommon2.dll.map" or "\epoc32\release\ARMV5\urel\AP_HDOfficeCommon2.map"
+ 58) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_QORecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_QORecognizer.map"
+ 59) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_S60_CoreComponents.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_S60_CoreComponents.map"
+ 60) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_DeviceTransport.DLL.map" or "\epoc32\release\ARMV5\urel\ap_CES_DeviceTransport.map"
+ 61) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_zip.dll.map" or "\epoc32\release\ARMV5\urel\ap_zip.map"
+ 62) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_syb_XMLarchive.dll.map" or "\epoc32\release\ARMV5\urel\ap_syb_XMLarchive.map"
+ 63) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_FMPluginBase.dll.map" or "\epoc32\release\ARMV5\urel\ap_FMPluginBase.map"
+ 64) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_FILELISTFMPLUGIN.DLL.map" or "\epoc32\release\ARMV5\urel\ap_CES_FILELISTFMPLUGIN.map"
+ 65) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_QO_FileManager.exe.map" or "\epoc32\release\ARMV5\urel\ap_QO_FileManager.map"
+ 66) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_ces_ziprecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_ces_ziprecognizer.map"
+ 67) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_PptRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_PptRecognizer.map"
+ 68) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_PptXRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_PptXRecognizer.map"
+ 69) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_XlsRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_XlsRecognizer.map"
+ 70) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_XlsXRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_XlsXRecognizer.map"
+ 71) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_TxtRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_TxtRecognizer.map"
+ 72) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_WrdRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_WrdRecognizer.map"
+ 73) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_WrdXRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_WrdXRecognizer.map"
+ 74) Warning: Can't open "\epoc32\release\ARMV5\urel\AP_CES_QPDFDescriptor.DLL.map" or "\epoc32\release\ARMV5\urel\AP_CES_QPDFDescriptor.map"
+ 75) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_PdfRecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_PdfRecognizer.map"
+ 76) Warning: Can't open "\epoc32\release\ARMV5\urel\AP_CES_PDFFILTERINFO.DLL.map" or "\epoc32\release\ARMV5\urel\AP_CES_PDFFILTERINFO.map"
+ 77) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_QuickofficeStub.exe.map" or "\epoc32\release\ARMV5\urel\ap_QuickofficeStub.map"
+ 78) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_quickpdf.exe.map" or "\epoc32\release\ARMV5\urel\ap_quickpdf.map"
+ 79) WARNING: File \epoc32\data\Z\Resource\APPS\ap_registration.rom does not exist or is 0 bytes in length.
+ 80) Warning: Can't open "\epoc32\release\ARMV5\urel\ap_CES_HTTP.dll.map" or "\epoc32\release\ARMV5\urel\ap_CES_HTTP.map"
+ 81) WARNING: File \epoc32\data\Z\private\102033E6\installer\inst_plugins.cfg does not exist or is 0 bytes in length.
+ 82) Warning: Can't open "\epoc32\release\ARMV5\urel\arcimagefundamental.dll.map" or "\epoc32\release\ARMV5\urel\arcimagefundamental.map"
+ 83) Warning: Can't open "\epoc32\release\ARMV5\urel\arcplatform.dll.map" or "\epoc32\release\ARMV5\urel\arcplatform.map"
+ 84) Warning: Can't open "\epoc32\release\ARMV5\urel\arcimagecodecs.dll.map" or "\epoc32\release\ARMV5\urel\arcimagecodecs.map"
+ 85) Warning: Can't open "\epoc32\release\ARMV5\urel\photoeditor.exe.map" or "\epoc32\release\ARMV5\urel\photoeditor.map"
+ 86) Warning: Can't open "\epoc32\release\ARMV5\urel\arcamui.dll.map" or "\epoc32\release\ARMV5\urel\arcamui.map"
+ 87) Warning: Can't open "\epoc32\release\ARMV5\urel\arcpebasictool.dll.map" or "\epoc32\release\ARMV5\urel\arcpebasictool.map"
+ 88) Warning: Can't open "\epoc32\release\ARMV5\urel\arcpebase.dll.map" or "\epoc32\release\ARMV5\urel\arcpebase.map"
+ 89) Warning: Can't open "\epoc32\release\ARMV5\urel\arcpemanager.dll.map" or "\epoc32\release\ARMV5\urel\arcpemanager.map"
+ 90) Warning: Can't open "\epoc32\release\ARMV5\urel\arcampe.dll.map" or "\epoc32\release\ARMV5\urel\arcampe.map"
+ 91) Warning: Can't open "\epoc32\release\ARMV5\urel\photoeditoraiwplugin.dll.map" or "\epoc32\release\ARMV5\urel\photoeditoraiwplugin.map"
+ 92) WARNING: File \epoc32\data\Z\Resource\APPS\registration.rom does not exist or is 0 bytes in length.
+ 93) Warning: Can't open "\epoc32\release\ARMV5\urel\QO_LServer.exe.map" or "\epoc32\release\ARMV5\urel\QO_LServer.map"
+ 94) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_devicetransport.dll.map" or "\epoc32\release\ARMV5\urel\ces_devicetransport.map"
+ 95) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_CoreComponents.dll.map" or "\epoc32\release\ARMV5\urel\CES_CoreComponents.map"
+ 96) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pdfrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_pdfrecognizer.map"
+ 97) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_OGLES_Charts.dll.map" or "\epoc32\release\ARMV5\urel\CES_OGLES_Charts.map"
+ 98) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_filelistfmplugin.dll.map" or "\epoc32\release\ARMV5\urel\ces_filelistfmplugin.map"
+ 99) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pptfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_pptfilterinfo.map"
+100) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pptfilter.dll.map" or "\epoc32\release\ARMV5\urel\ces_pptfilter.map"
+101) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pptrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_pptrecognizer.map"
+102) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pptxfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_pptxfilterinfo.map"
+103) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_ziprecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_ziprecognizer.map"
+104) Warning: Can't open "\epoc32\release\ARMV5\urel\QO_PPTX_Engine_Conv.dll.map" or "\epoc32\release\ARMV5\urel\QO_PPTX_Engine_Conv.map"
+105) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pptxrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_pptxrecognizer.map"
+106) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_qorecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_qorecognizer.map"
+107) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_qshdescriptor.dll.map" or "\epoc32\release\ARMV5\urel\ces_qshdescriptor.map"
+108) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_qwddescriptor.dll.map" or "\epoc32\release\ARMV5\urel\ces_qwddescriptor.map"
+109) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_qptdescriptor.dll.map" or "\epoc32\release\ARMV5\urel\ces_qptdescriptor.map"
+110) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_PPTXFILTER.DLL.map" or "\epoc32\release\ARMV5\urel\CES_PPTXFILTER.map"
+111) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_QWS_SpellChecker.dll.map" or "\epoc32\release\ARMV5\urel\CES_QWS_SpellChecker.map"
+112) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_RichText_Engine.dll.map" or "\epoc32\release\ARMV5\urel\CES_RichText_Engine.map"
+113) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_txtfilter.dll.map" or "\epoc32\release\ARMV5\urel\ces_txtfilter.map"
+114) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_txtfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_txtfilterinfo.map"
+115) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_S60_CoreComponents.dll.map" or "\epoc32\release\ARMV5\urel\CES_S60_CoreComponents.map"
+116) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_txtrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_txtrecognizer.map"
+117) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_wrdfilter.dll.map" or "\epoc32\release\ARMV5\urel\ces_wrdfilter.map"
+118) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_wrdfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_wrdfilterinfo.map"
+119) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_wrdrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_wrdrecognizer.map"
+120) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_wrdxfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_wrdxfilterinfo.map"
+121) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_wrdxrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_wrdxrecognizer.map"
+122) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_wrdxfilter.dll.map" or "\epoc32\release\ARMV5\urel\ces_wrdxfilter.map"
+123) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_xlsfilter.dll.map" or "\epoc32\release\ARMV5\urel\ces_xlsfilter.map"
+124) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_xlsfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_xlsfilterinfo.map"
+125) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_xlsrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_xlsrecognizer.map"
+126) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_xlsxfilterinfo.dll.map" or "\epoc32\release\ARMV5\urel\ces_xlsxfilterinfo.map"
+127) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_xlsxrecognizer.dll.map" or "\epoc32\release\ARMV5\urel\ces_xlsxrecognizer.map"
+128) Warning: Can't open "\epoc32\release\ARMV5\urel\FMPluginBase.dll.map" or "\epoc32\release\ARMV5\urel\FMPluginBase.map"
+129) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_xlsxfilter.dll.map" or "\epoc32\release\ARMV5\urel\ces_xlsxfilter.map"
+130) Warning: Can't open "\epoc32\release\ARMV5\urel\HDExcel2.dll.map" or "\epoc32\release\ARMV5\urel\HDExcel2.map"
+131) Warning: Can't open "\epoc32\release\ARMV5\urel\HDMetafile2.dll.map" or "\epoc32\release\ARMV5\urel\HDMetafile2.map"
+132) Warning: Can't open "\epoc32\release\ARMV5\urel\HDOfficeCommon2.dll.map" or "\epoc32\release\ARMV5\urel\HDOfficeCommon2.map"
+133) Warning: Can't open "\epoc32\release\ARMV5\urel\QO_FileManager.exe.map" or "\epoc32\release\ARMV5\urel\QO_FileManager.map"
+134) Warning: Can't open "\epoc32\release\ARMV5\urel\HDPowerPoint2.dll.map" or "\epoc32\release\ARMV5\urel\HDPowerPoint2.map"
+135) Warning: Can't open "\epoc32\release\ARMV5\urel\HDWord2.dll.map" or "\epoc32\release\ARMV5\urel\HDWord2.map"
+136) Warning: Can't open "\epoc32\release\ARMV5\urel\quickpoint.exe.map" or "\epoc32\release\ARMV5\urel\quickpoint.map"
+137) Warning: Can't open "\epoc32\release\ARMV5\urel\quicksheet.exe.map" or "\epoc32\release\ARMV5\urel\quicksheet.map"
+138) Warning: Can't open "\epoc32\release\ARMV5\urel\Quickpoint_DOM.dll.map" or "\epoc32\release\ARMV5\urel\Quickpoint_DOM.map"
+139) Warning: Can't open "\epoc32\release\ARMV5\urel\Quicksheet_DOM.dll.map" or "\epoc32\release\ARMV5\urel\Quicksheet_DOM.map"
+140) Warning: Can't open "\epoc32\release\ARMV5\urel\Quickword.exe.map" or "\epoc32\release\ARMV5\urel\Quickword.map"
+141) Warning: Can't open "\epoc32\release\ARMV5\urel\SYB_XMLArchive.dll.map" or "\epoc32\release\ARMV5\urel\SYB_XMLArchive.map"
+142) Warning: Can't open "\epoc32\release\ARMV5\urel\Quickword_DOM.dll.map" or "\epoc32\release\ARMV5\urel\Quickword_DOM.map"
+143) Warning: Can't open "\epoc32\release\ARMV5\urel\QuickPDFStub.exe.map" or "\epoc32\release\ARMV5\urel\QuickPDFStub.map"
+144) Warning: Can't open "\epoc32\release\ARMV5\urel\CES_HTTP.dll.map" or "\epoc32\release\ARMV5\urel\CES_HTTP.map"
+145) Warning: Can't open "\epoc32\release\ARMV5\urel\ces_pdffilterinfostub.dll.map" or "\epoc32\release\ARMV5\urel\ces_pdffilterinfostub.map"
+146) Warning: Can't open "\epoc32\release\ARMV5\urel\zip.dll.map" or "\epoc32\release\ARMV5\urel\zip.map"
+147) Warning: Can't open "\epoc32\release\ARMV5\urel\videoeditor.exe.map" or "\epoc32\release\ARMV5\urel\videoeditor.map"
+148) Warning: Can't open "\epoc32\release\ARMV5\urel\amur.dll.map" or "\epoc32\release\ARMV5\urel\amur.map"
+149) Warning: Can't open "\epoc32\release\ARMV5\urel\arcavcodecs.dll.map" or "\epoc32\release\ARMV5\urel\arcavcodecs.map"
+150) Warning: Can't open "\epoc32\release\ARMV5\urel\amvesession.dll.map" or "\epoc32\release\ARMV5\urel\amvesession.map"
+151) Warning: Can't open "\epoc32\release\ARMV5\urel\videoeditoraiwplugin.dll.map" or "\epoc32\release\ARMV5\urel\videoeditoraiwplugin.map"
+152) Warning: Can't open "\epoc32\release\ARMV5\urel\3GPExtParser.dll.map" or "\epoc32\release\ARMV5\urel\3GPExtParser.map"
+153) Warning: Can't open "\epoc32\release\ARMV5\urel\VtcpCmpFilter.dll.map" or "\epoc32\release\ARMV5\urel\VtcpCmpFilter.map"
+154) Warning: Can't open "\epoc32\release\ARMV5\urel\SenVtcpTransport.dll.map" or "\epoc32\release\ARMV5\urel\SenVtcpTransport.map"
+155) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmkeystorage.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmkeystorage.map"
+156) Warning: Can't open "\epoc32\release\ARMV5\urel\hxwmdrmplugin.dll.map" or "\epoc32\release\ARMV5\urel\hxwmdrmplugin.map"
+157) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmota.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmota.map"
+158) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmpkclient.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmpkclient.map"
+159) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmpkserver.exe.map" or "\epoc32\release\ARMV5\urel\wmdrmpkserver.map"
+160) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmpkclientwrapper.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmpkclientwrapper.map"
+161) Warning: Can't open "\epoc32\release\ARMV5\urel\cameseutility.dll.map" or "\epoc32\release\ARMV5\urel\cameseutility.map"
+162) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmagent.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmagent.map"
+163) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmdla.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmdla.map"
+164) Warning: Can't open "\epoc32\release\ARMV5\urel\wmdrmpd.dll.map" or "\epoc32\release\ARMV5\urel\wmdrmpd.map"
+165) Warning: Can't open "\epoc32\release\gcce\urel\zipmanager.exe.map" or "\epoc32\release\gcce\urel\zipmanager.map"
+166) Warning: Can't open "\epoc32\release\armv5\udeb\ctcmangui.exe.map" or "\epoc32\release\armv5\udeb\ctcmangui.map"
+167) Warning: Can't open "\epoc32\release\ARMV5\urel\eunits60gui.exe.map" or "\epoc32\release\ARMV5\urel\eunits60gui.map"
+168) Warning: Can't open "\epoc32\release\ARMV5\urel\eunitappenvironment.exe.map" or "\epoc32\release\ARMV5\urel\eunitappenvironment.map"
+169) Warning: Can't open "\epoc32\release\ARMV5\urel\euniteikappenvironment.exe.map" or "\epoc32\release\ARMV5\urel\euniteikappenvironment.map"
+170) Warning: Can't open "\epoc32\release\ARMV5\urel\qakitcommonui.dll.map" or "\epoc32\release\ARMV5\urel\qakitcommonui.map"
+171) Warning: Can't open "\epoc32\release\ARMV5\urel\digiaconnect.exe.map" or "\epoc32\release\ARMV5\urel\digiaconnect.map"
+
+Error(s):
+1) ERROR: (/epoc32/include/s60customswfeatures.xml) Feature "KFEATUREIDFFMOBILITYMANAGEMENTERRORS" already exists
+===============================================================================
+Target: core-image  Duration: 14:26  Status: OK
+iMaker log             = `Y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd_imaker_core-image.log'
+Core (ROM & ROFS1) dir = `y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd'
+Core ROM image         = `y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd.rom.img'
+Core ROM symbols       = `y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd.rom.symbol'
+Core ROFS1 image       = `y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd.rofs1.img'
+Core ROFS1 symbols     = `y:/output/release_flash_images/productexample/rnd/core/RM-XXX_010.014_79.92.2010.15_rnd/RM-XXX_010.014_79.92.2010.15_rnd.rofs1.symbol'
+-------------------------------------------------------------------------------
+Total duration: 14:29  Status: OK
+===============================================================================
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/functionality/test_regex.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,759 +0,0 @@
-<!-- 
-============================================================================ 
-Name        : test_regex.ant.xml 
-Part of     : Helium AntLib
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="test-metadata-regex" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>Helium Antlib metadata unittests.</description>
-
-    <property environment="env" />
-    
-    <dirname property="project.dir" file="${ant.file.test-metadata-regex}" />
-    
-    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-    <taskdef name="fmpp" classname="fmpp.tools.AntTask" onerror="report"/>
-
-    <property name="metadata-filterfile" value="${project.dir}/../data/common.csv"/>
-    <property name="metadata-log-files" value="${project.dir}/../data/*.log"/>
-    
-    <hlm:metadatafilterset id="all-regex-filterfile">
-        <metadatafilterset filterfile="${metadata-filterfile}" />
-    </hlm:metadatafilterset>
-
-    <target name="setUp">
-        <mkdir dir="${test.temp.dir}" />
-    </target>
-    
-    <!-- Test categorization for sbs scanlog
-    -->
-    <target name="test-categorization">
-        <delete dir="${test.temp.dir}/categorization_db" failonerror="false" />
-        <echo message="categorization validation" />
-        <hlm:metadatarecord database="${test.temp.dir}/categorization_db">
-            <hlm:sbsmetadatainput cleanLogFile="${project.dir}/../data/categorization_clean.log">
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="categorization.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <fmpp sourceFile="${project.dir}/../data/parsing_result.ini.ftl"
-                     outputfile="${test.temp.dir}/categorization_db_result.ini">
-            <data expandProperties="yes">
-                dbPath: ${test.temp.dir}/categorization_db
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <property file="${test.temp.dir}/categorization_db_result.ini" />
-        <au:assertTrue message="Invalid number of logs">
-            <equals arg1="${number.of.logs}" arg2="1" />
-        </au:assertTrue>
-        <au:assertTrue message="Invalid number of logs">
-            <equals arg1="${number.of.execution.times}" arg2="1" />
-        </au:assertTrue>
-        <au:assertTrue message="Invalid number of logs">
-            <equals arg1="${execution.time.0}" arg2="226" />
-        </au:assertTrue>
-        <hlm:metadataCountSeverity severity="error" log="categorization.log" db="${test.temp.dir}/categorization_db" property="cleanlog_errors"/>
-        <echo>cleanlog_errors: ${cleanlog_errors}</echo>
-        <au:assertTrue>
-            <equals arg1="${cleanlog_errors}" arg2="2"/>
-        </au:assertTrue>
-    </target>
-    <!-- Test parser error
-    -->
-    <target name="test-parser-error">
-        <delete dir="${test.temp.dir}/parser_error_db" failonerror="false" />
-        <au:expectfailure>
-            <hlm:metadatarecord database="${test.temp.dir}/parser_error_db">
-                <hlm:sbsmetadatainput>
-                    <fileset dir="${project.dir}/../data/">
-                        <include  name="parser_error.log"/>
-                    </fileset>
-                    <metadatafilterset refid="all-regex-filterfile" />
-                </hlm:sbsmetadatainput>
-            </hlm:metadatarecord>
-        </au:expectfailure>
-    </target>
-    <!-- Test parser error
-    -->
-    <target name="test-parser-error-keepgoing">
-        <delete dir="${test.temp.dir}/parser_error_db" failonerror="false" />
-        <hlm:metadatarecord database="${test.temp.dir}/parser_error_db" failonerror="false">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="parser_error.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-    </target>
-
-    <!-- Test categorization without cleanLogFile
-    -->
-    <target name="test-categorization-nocleanlog">
-        <delete dir="${test.temp.dir}/categorization_no_clean_db" failonerror="false" />
-        <echo message="categorization validation" />
-        <hlm:metadatarecord database="${test.temp.dir}/categorization_no_clean_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="categorization.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="categorization.log" db="${test.temp.dir}/categorization_no_clean_db" property="nocleanlog_errors"/>
-        <echo>test-categorization-nocleanlog: ${nocleanlog_errors}</echo>
-        <au:assertTrue>
-            <equals arg1="${nocleanlog_errors}" arg2="2"/>
-        </au:assertTrue>
-    </target>
-    <target name="test-categorization-component-check">
-        <delete dir="${test.temp.dir}/log-entry-category_component_check_db" failonerror="false" />
-        <echo message="component error check for categorization" />
-        <hlm:metadatarecord database="${test.temp.dir}/log-entry-category_component_check_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="categorization_compile.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <fmpp sourceFile="${project.dir}/../../src/templates/faults.txt.ftl"
-                     outputfile="${test.temp.dir}/faults.txt">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            
-            <data expandProperties="yes">
-                dbPath: ${test.temp.dir}/log-entry-category_component_check_db
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <loadfile property="componentlogEntry"
-              srcFile="${test.temp.dir}/faults.txt"/>
-        <au:assertMatches string="${componentlogEntry}" pattern="sf/app/organizer/group:error:2" 
-                     casesensitive="false"/>
-    </target>
-    
-    <target name="test-categorization-nocleanlog-failed-empty-recipe">
-        <delete dir="${test.temp.dir}/log-entry-failed-empty-recipe_db" failonerror="false" />
-        <echo message="categorization validation" />
-        <hlm:metadatarecord database="${test.temp.dir}/log-entry-failed-empty-recipe_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="categorization_failed_empty_recipe.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="categorization_failed_empty_recipe.log" db="${test.temp.dir}/log-entry-failed-empty-recipe_db" property="empty_nocleanlog_errors"/>
-        <au:assertTrue>
-            <equals arg1="${empty_nocleanlog_errors}" arg2="2"/>
-        </au:assertTrue>
-    </target>
-
-    <target name="test-categorization-nocleanlog-failed-error-in-recipe">
-        <delete dir="${test.temp.dir}/log-entry-failed-error-in-recipe_db" failonerror="false" />
-        <echo message="categorization validation" />
-        <hlm:metadatarecord database="${test.temp.dir}/log-entry-failed-error-in-recipe_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="categorization_failed_error_in_recipe.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="categorization_failed_error_in_recipe.log" db="${test.temp.dir}/log-entry-failed-error-in-recipe_db" property="empty_nocleanlog_errors"/>
-        <au:assertTrue>
-            <equals arg1="${empty_nocleanlog_errors}" arg2="2"/>
-        </au:assertTrue>
-    </target>
-
-<!-- 
-    <target name="test-log-entry-for-no-errors">
-        <delete dir="${test.temp.dir}/log-entry-for-no-error_db" failonerror="false" />
-        <echo message="categorization validation" />
-        <hlm:metadatarecord database="${test.temp.dir}/log-entry-for-no-error_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="noerror.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <fmpp sourceFile="${project.dir}/../../src/templates/general_category.txt.ftl"
-                     outputfile="${test.temp.dir}/general_category.txt">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates/macro
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${test.temp.dir}/log-entry-for-no-error_db
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <au:assertFileExists file="${test.temp.dir}/general_category.txt" message="Error in test cases"/>
-        <loadfile property="logEntry"
-              srcFile="${test.temp.dir}/general_category.txt"/>
-        <au:assertMatches string="${logEntry}" pattern="component : general : logfile : " 
-                     casesensitive="false"/>
-    </target>
-    -->
-    <!-- Check for all the regular expression defined in the filter file,
-    The log file contains text for matching regular expression.
-    -->
-    <target name="test-all-regex-filterfile">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_all_filterfile_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false"/>
-        <echo message="all regular expression validation" />
-        <echo message="database:${metadata-read-db}" />
-        <!-- do some checks that files are present and raise asserts if not present-->
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-        
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*regex*.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <!-- check we have created the DB file-->
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-    <!-- To verify some lengthy text for recipe tag from 
-    sbs metadata input.
-    -->
-    <target name="test-recipe-lengthy-text">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_lengthy_text_db"/>
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <delete dir="${metadata-read-db}" failonerror="false"/>
-        <echo message="all regular expression validation" />
-        <echo message="database:${metadata-read-db}" />
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="receipe*.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-filterfile" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-    <!--modify the errors so regex=".*warning U4010" description="mingw error" is no longer 
-    an error but a warning-->
-    <hlm:metadatafilterset id="all-regex-combined">
-        <metadatafilter priority="WARNING" regex=".*warning U4010" description="mingw error" />
-        <metadatafilterset filterfile="${metadata-filterfile}" />
-    </hlm:metadatafilterset>
-
-    <property name="metadata-all-db" value="${test.temp.dir}/log_all_combined_db"/>
-
-    <target name="test-all-regex-combined">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_all_combined_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="all regular expression validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*regex*.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-combined" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-
-    <property name="metadata-error-db" value="${test.temp.dir}/log_error_combined_db"/>
-    <!--create an invalid priority type, so contains message invalid 
-    priority and set to error as priority -->
-    <hlm:metadatafilterset id="all-regex-combined-error">
-        <metadatafilter priority="INCORRECT" regex=".*warning U4010" description="test error handling so incorrect priority" />
-        <metadatafilterset filterfile="${metadata-filterfile}" />
-    </hlm:metadatafilterset>
-    <!--create an invalid priority type, which contains warning invalid priority 
-    and continues with other data. 
-    -->
-    <target name="test-all-regex-combined-error">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_error_combined_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="all regular expression validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}" >
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*regex*.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-combined-error" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <!-- no need to check the DB file not present as it won't be-->
-    </target>
-    <!--try to add a different different filter type but not add the parameter so has an error-->
-    <hlm:metadatafilterset id="all-regex-combined-no-priority">
-        <metadatafilter regex=".*warning U4010" description="test error handling so incorrect priority" />
-        <metadatafilterset filterfile="${metadata-filterfile}" />
-    </hlm:metadatafilterset>
-    <!--try to add a different different filter type but not add the parameter so has an error-->
-    <target name="test-all-regex-combined-no-priority">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_error_combined_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="all regular expression validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*regex*.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-combined-no-priority" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <!-- no need to check the DB file not present as it won't be-->
-    </target>
-    
-
-    <!--try to add a different different filter type but not add the parameter so has an error-->
-    <hlm:metadatafilterset id="all-regex-combined-no-regex">
-        <metadatafilter priority="INCORRECT" description="test error handling so incorrect priority" />
-        <metadatafilter priority="WARNING" description="test error handling so incorrect priority" />
-        <metadatafilterset filterfile="${metadata-filterfile}" />
-    </hlm:metadatafilterset>
-
-    <!--try to add a different different filter type but not add the parameter so has an error-->
-    <target name="test-all-regex-combined-no-regex">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_error_combined_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="all regular expression validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*regex*.log"/>
-                </fileset>
-                <metadatafilterset refid="all-regex-combined-no-regex" />
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <!-- no need to check the DB file not present as it won't be-->
-    </target>
-    <hlm:metadatafilterset id="text_log_metadata_input">
-        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
-    </hlm:metadatafilterset>
-
-    <target name="test-text_log_metadata_input">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_text_metadata_input_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="text log metadata input validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*_fixslashes*.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-    <hlm:metadatafilterset id="abld_log_metadata_input">
-        <metadatafilter priority="WARNING" regex=".*warning U4010" description="mingw error" />
-        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
-    </hlm:metadatafilterset>
-
-
-    <target name="test-abld_log_metadata_input">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_abld_metadata_input_db"/>
-        <delete dir="${test.temp.dir}/log_abld_metadata_input_db" failonerror="false" />
-        <echo message="abld log metadata input validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:abldmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*sample_abld.log"/>
-                </fileset>
-                <metadatafilterset refid="abld_log_metadata_input" />
-            </hlm:abldmetadatainput>
-        </hlm:metadatarecord>
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-
-    <target name="test-policy_metadata_input">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_policy_metadata_input_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="policy metadata input validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:policymetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*policy*.log"/>
-                </fileset>
-            </hlm:policymetadatainput>
-        </hlm:metadatarecord>
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-    <hlm:metadatafilterset id="ant_log_metadata_input">
-        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
-    </hlm:metadatafilterset>
-
-
-    <target name="test-ant_log_metadata_input">
-        <property name="metadata-read-db" value="${test.temp.dir}/log_ant_metadata_input_db"/>
-        <delete dir="${metadata-read-db}" failonerror="false" />
-        <echo message="ant log metadata input validation" />
-        <echo message="database:${metadata-read-db}" />
-        <au:assertFileExists file="${metadata-filterfile}" message="${metadata-filterfile} filter file does not exist"/>
-        <mkdir dir="${test.temp.dir}"/>
-
-        <hlm:metadatarecord database="${metadata-read-db}">
-            <hlm:antmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*ant*.log"/>
-                </fileset>
-                <metadatafilterset refid="ant_log_metadata_input" />
-            </hlm:antmetadatainput>
-        </hlm:metadatarecord>
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-    </target>
-
-    <property name="metadata-read-ftl" value="${project.dir}/../../src/templates/readdata.xml.ftl"/>
-    <property name="metadata-read-output" value="${test.temp.dir}/readdata.html"/>
-<!-- 
-    <target name="test-readdata" depends="test-text_log_metadata_input" >
-        <property name="metadata-template-dir" value="${project.dir}/../../src/templates/" />
-        <property name="metadata-output-dir" value="${test.temp.dir}" />
-        <property name="metadata-read-ftl" value="${metadata-template-dir}/readdata.xml.ftl"/>
-        <property name="metadata-read-db" value="${metadata-output-dir}/log_text_metadata_input_db"/>
-        <property name="metadata-read-output" value="${metadata-output-dir}/readdata.html"/>
-        <delete file="${metadata-read-output}" failonerror="false" />
-        <au:assertFileExists file="${metadata-read-db}" message="${metadata-read-db} DB file was not created"/>
-        <fmpp sourceFile="${metadata-template-dir}/readdata.xml.ftl"
-                     outputfile="${metadata-output-dir}/readdata.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${metadata-read-db}
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <fmpp sourceFile="${metadata-template-dir}/build_status.xml.ftl"
-                     outputfile="${metadata-output-dir}/build_status.xml">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${metadata-read-db}
-                logfile: ido_abs_mcl_devlon70_robot_MCL.70.500_fixslashes_raptor.log
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <fmpp sourceFile="${metadata-template-dir}/email_new.html.ftl"
-                     outputfile="${metadata-output-dir}/build_status.html">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${metadata-read-db}
-                logfile: ido_abs_mcl_devlon70_robot_MCL.70.500_fixslashes_raptor.log
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <au:assertFileExists file="${metadata-read-output}" message="${metadata-read-output} DB file was not created"/>
-    </target>
--->
-
-    <target name="test-generate-summary" depends="test-text_log_metadata_input">
-        <property name="metadata-summary-ftl" value="${project.dir}/../../src/templates/summary.html.ftl"/>
-        <property name="metadata-summary-output" value="${test.temp.dir}/summary.html"/>
-        <property name="metadata-output-dir" value="${test.temp.dir}/" />
-        <delete file="${metadata-summary-output}" failonerror="false" />
-        <property name="metadata-read-db" value="${metadata-output-dir}/log_text_metadata_input_db"/>
-        
-        <fmpp sourceFile="${metadata-summary-ftl}"
-                     outputfile="${metadata-summary-output}">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${project.dir}/../../src/templates/macro
-            </freemarkerLinks>
-            <data expandProperties="yes">
-                dbPath: ${metadata-read-db}
-                loginfo: xml(${project.dir}/../data/ido_abs_mcl_devlon70_robot_MCL.70.500_info.log)
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <!-- check we have created the files -->
-        <au:assertTrue>
-            <available type="dir" file="${metadata-read-db}" />
-        </au:assertTrue>
-        <au:assertFileExists file="${metadata-summary-output}" message="${metadata-summary-output} summary output file was not created"/>
-    </target>
-    
-    <target name="test-countseverity">
-        <delete dir="${test.temp.dir}/dp_db" failonerror="false" />
-
-        <hlm:metadatarecord database="${test.temp.dir}/dp_db">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="*_fixslashes*.log"/>
-                </fileset>
-                <metadatafilterset refid="text_log_metadata_input" />
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-
-        <hlm:metadataCountSeverity severity="error" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" property="errors"/>
-        <echo message="${errors}" />
-        <au:assertTrue>
-            <equals arg1="${errors}" arg2="24"/>
-        </au:assertTrue>
-        <au:assertTrue>
-            <hlm:metadataHasSeverity severity="error" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" />
-        </au:assertTrue>
-        <au:assertFalse>
-            <hlm:metadataHasSeverity severity="fatal" log="_fixslashes_raptor.log" db="${test.temp.dir}/dp_db" />
-        </au:assertFalse>
-        
-    </target>
-
-    <target name="test-metadatacount-no-error-with-missing-files-path-with-backslashes">
-        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="metadatacount_missing_files.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
-                </metadatafilterset>
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="data\metadatacount_missing_files.log" db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"/>
-        <au:assertTrue message="We must have 5 missing files counted as error.">
-            <equals arg1="${errors}" arg2="5"/>
-        </au:assertTrue>
-    </target>
-    
-    <target name="test-very-long-warning">
-        <delete dir="${test.temp.dir}/very_long_warning_db" failonerror="false" />
-
-        <hlm:metadatarecord database="${test.temp.dir}/very_long_warning_db">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="very_long_warning.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
-                </metadatafilterset>
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-
-        <hlm:metadataCountSeverity severity="warning" log="very_long_warning.log" db="${test.temp.dir}/very_long_warning_db" property="warnings"/>
-        <echo message="test-very-long-warning: ${warnings}" />
-        <au:assertTrue>
-            <equals arg1="${warnings}" arg2="1"/>
-        </au:assertTrue>
-    </target>
-
-    <target name="test-whatlog-parsing">
-        <delete dir="${test.temp.dir}/whatlog_db" failonerror="false" />
-
-        <hlm:metadatarecord database="${test.temp.dir}/whatlog_db">
-            <hlm:sbsmetadatainput whatLogFile="${project.dir}/../data/build_whatlog.whatlog.log">
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="build_whatlog.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
-                </metadatafilterset>
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <fmpp sourceFile="${project.dir}/../data/whatlog_result.ini.ftl"
-                     outputfile="${test.temp.dir}/whatlog_result.ini">
-            <data expandProperties="yes">
-                dbPath: ${test.temp.dir}/whatlog_db
-                ant: antProperties()
-            </data>
-        </fmpp>
-        <property file="${test.temp.dir}/whatlog_result.ini" />
-        <au:assertTrue message="Invalid number of logs">
-            <equals arg1="${number.of.logs}" arg2="1" />
-        </au:assertTrue>
-        <au:assertTrue message="Invalid number of whatlog entries">
-            <equals arg1="${number.of.whatlog.entries}" arg2="5" />
-        </au:assertTrue>
-    </target>
-
-    <target name="test-log-with-same-root-name">
-        <delete dir="${test.temp.dir}/log-with-same-root-name_db" failonerror="false"/>
-        <hlm:metadatarecord database="${test.temp.dir}/log-with-same-root-name_db">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include name="log-with-same-root-name.log*"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
-                </metadatafilterset>
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="log-with-same-root-name.log" db="${test.temp.dir}/log-with-same-root-name_db" property="log-with-same-root-name.log.error"/>
-        <au:assertTrue message="We should only find 1 error">
-            <equals arg1="${log-with-same-root-name.log.error}" arg2="1"/>
-        </au:assertTrue>
-    </target>
-
-    <target name="test-release-database-metadatatask">
-        <hlm:metadatarecord database="${test.temp.dir}/test-release-database-metadatatask_db">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include name="test-release-database-metadatatask.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
-                </metadatafilterset>
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <delete dir="${test.temp.dir}/log-with-same-root-name_db" failonerror="true" />
-    </target>
-
-    <target name="test-release-database-fmpp">
-        <hlm:metadatarecord database="${test.temp.dir}/test-release-database-fmpp_db">
-            <hlm:textmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include name="test-release-database-metadatatask.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="ERROR" regex="^ERROR:.*" description="error" />
-                </metadatafilterset>
-            </hlm:textmetadatainput>
-        </hlm:metadatarecord>
-        <fmpp sourceFile="${project.dir}/../data/test-release-database-fmpp.ini.ftl"
-                     outputfile="${test.temp.dir}/test-release-database-fmpp.ini">
-            <data expandProperties="yes">
-                dbPath: ${test.temp.dir}/test-release-database-fmpp_db
-                ant: antProperties()
-            </data>
-        </fmpp>        
-        <delete dir="${test.temp.dir}/test-release-database-fmpp_db" failonerror="true" />
-    </target>
-    
-    
-    <target name="test-metadatacount-no-error-with-missing-files">
-        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="metadatacount_missing_files.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
-                </metadatafilterset>
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="metadatacount_missing_files.log" db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"/>
-        <au:assertTrue message="We must have 5 missing files counted as error.">
-            <equals arg1="${errors}" arg2="5"/>
-        </au:assertTrue>
-    </target>
-    
-    <target name="test-metadatacount-error-with-missing-files">
-        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="metadatacount_error_and_missing_files.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
-                </metadatafilterset>
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="metadatacount_error_and_missing_files.log" db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"/>
-        <au:assertTrue message="We must have 6 missing files counted as error.">
-            <equals arg1="${errors}" arg2="6"/>
-        </au:assertTrue>
-    </target>
-
-    <target name="test-count-error-without-missing-files">
-        <hlm:metadatarecord database="${test.temp.dir}/metadatacount_with_missing_files_db">
-            <hlm:sbsmetadatainput>
-                <fileset dir="${project.dir}/../data/">
-                    <include  name="metadatacount_error_and_missing_files.log"/>
-                </fileset>
-                <metadatafilterset>
-                    <metadatafilter priority="INFO" regex="^INFO:" description="info" />
-                    <metadatafilter priority="ERROR" regex="^ERROR:" description="error" />
-                    <metadatafilter priority="WARNING" regex=".*warning C4503:.*" description="warning" />
-                </metadatafilterset>
-            </hlm:sbsmetadatainput>
-        </hlm:metadatarecord>
-        <hlm:metadataCountSeverity severity="error" log="metadatacount_error_and_missing_files.log"
-            db="${test.temp.dir}/metadatacount_with_missing_files_db" property="errors"
-            countMissing="false"/>
-        <au:assertTrue message="We must have 1 missing files counted as error.">
-            <equals arg1="${errors}" arg2="1"/>
-        </au:assertTrue>
-    </target>
-
-</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/metadata/tests/output.txt	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1336 +0,0 @@
-Buildfile: functionality\test_regex.ant.xml
-
-test-readdata:
-     [fmpp] args.size:1
-     [fmpp] arg-list:E:\Build_E\eclipse_fasym013\helium-antlib-trunk\sf\metadata\tests\functionality/../output/log_all_filterfile.db
-     [fmpp] QueryModel:select * from priority
-     [fmpp] query in SQLTemplateModelselect * from priority
-     [fmpp] QueryModel:select * from component
-     [fmpp] query in SQLTemplateModelselect * from component
-     [fmpp] QueryModel:select * from logpath
-     [fmpp] query in SQLTemplateModelselect * from logpath
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect * from priority
-     [fmpp] data:0
-     [fmpp] data:''
-     [fmpp] data:1
-     [fmpp] data:ERROR
-     [fmpp] data:2
-     [fmpp] data:WARNING
-     [fmpp] data:3
-     [fmpp] data:CRITICAL
-     [fmpp] data:4
-     [fmpp] data:REMARK
-     [fmpp] indexmap size5
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:3
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select count(logText) as COUNT from metadata_table where priority_id=3
-     [fmpp] query in SQLTemplateModelselect count(logText) as COUNT from metadata_table where priority_id=3
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=3
-     [fmpp] data:2
-     [fmpp] indexmap size1
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=3
-     [fmpp] columnName:COUNT
-     [fmpp] resultSet MetaData column Count=1
-     [fmpp] adding records
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select count(logText) as COUNT from metadata_table where priority_id=2
-     [fmpp] query in SQLTemplateModelselect count(logText) as COUNT from metadata_table where priority_id=2
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=2
-     [fmpp] data:36
-     [fmpp] indexmap size1
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=2
-     [fmpp] columnName:COUNT
-     [fmpp] resultSet MetaData column Count=1
-     [fmpp] adding records
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select count(logText) as COUNT from metadata_table where priority_id=1
-     [fmpp] query in SQLTemplateModelselect count(logText) as COUNT from metadata_table where priority_id=1
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=1
-     [fmpp] data:32
-     [fmpp] indexmap size1
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=1
-     [fmpp] columnName:COUNT
-     [fmpp] resultSet MetaData column Count=1
-     [fmpp] adding records
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select count(logText) as COUNT from metadata_table where priority_id=0
-     [fmpp] query in SQLTemplateModelselect count(logText) as COUNT from metadata_table where priority_id=0
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=0
-     [fmpp] data:0
-     [fmpp] indexmap size1
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=0
-     [fmpp] columnName:COUNT
-     [fmpp] resultSet MetaData column Count=1
-     [fmpp] adding records
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select count(logText) as COUNT from metadata_table where priority_id=4
-     [fmpp] query in SQLTemplateModelselect count(logText) as COUNT from metadata_table where priority_id=4
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=4
-     [fmpp] data:12
-     [fmpp] indexmap size1
-     [fmpp] sql queryselect count(logText) as COUNT from metadata_table where priority_id=4
-     [fmpp] columnName:COUNT
-     [fmpp] resultSet MetaData column Count=1
-     [fmpp] adding records
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:3
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select * from metadata_table where priority_id=3
-     [fmpp] query in SQLTemplateModelselect * from metadata_table where priority_id=3
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] getting records
-     [fmpp] sql queryselect * from metadata_table where priority_id=3 limit 5000 offset 0;
-     [fmpp] columnName:component_id
-     [fmpp] columnName:priority_id
-     [fmpp] columnName:logText
-     [fmpp] columnName:lineNumber
-     [fmpp] columnName:logname_id
-     [fmpp] resultSet MetaData column Count=5
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] next:count:0
-     [fmpp] logtext:next:mingw_make.exe: error
-     [fmpp] checking any more element
-     [fmpp] isDataRead:false
-     [fmpp] sql queryselect * from component
-     [fmpp] data:0
-     [fmpp] data:z:/sf/app/camera/group/bld.inf
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:1
-     [fmpp] logtext:next:mingw_make.exe: error
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select * from metadata_table where priority_id=2
-     [fmpp] query in SQLTemplateModelselect * from metadata_table where priority_id=2
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] getting records
-     [fmpp] sql queryselect * from metadata_table where priority_id=2 limit 5000 offset 0;
-     [fmpp] columnName:component_id
-     [fmpp] columnName:priority_id
-     [fmpp] columnName:logText
-     [fmpp] columnName:lineNumber
-     [fmpp] columnName:logname_id
-     [fmpp] resultSet MetaData column Count=5
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] next:count:0
-     [fmpp] logtext:next:WARNING:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:1
-     [fmpp] logtext:next:LINK : warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:2
-     [fmpp] logtext:next::10: warning: cannot find matching deallocation function
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:3
-     [fmpp] logtext:next:100) : WARNING: TEST123
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:4
-     [fmpp] logtext:next:MAKEDEF WARNING: TEST
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:5
-     [fmpp] logtext:next:TEST 123 \\(10) : Warning: (400)
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:6
-     [fmpp] logtext:next:BLDMAKE WARNING: bldm warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:7
-     [fmpp] logtext:next:MAKEDEF WARNING: make warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:8
-     [fmpp] logtext:next:atest(100) : warning C aasdfa
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:9
-     [fmpp] logtext:next:testas 100: warning: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:10
-     [fmpp] logtext:next:usage Usage Warning: warn1
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:11
-     [fmpp] logtext:next:abcd mwld.exe: abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:12
-     [fmpp] logtext:next:Command line warning abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:13
-     [fmpp] logtext:next:anything ERROR: bad relocation: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:14
-     [fmpp] logtext:next:10 warning in component1
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:15
-     [fmpp] logtext:next:EventType: Error Source: SweepNTabcde
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:16
-     [fmpp] logtext:next:WARN	test
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:17
-     [fmpp] logtext:next:abcd :10: warning: cannot find matching deallocation function 100:note abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:18
-     [fmpp] logtext:next:WARNING:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:19
-     [fmpp] logtext:next:LINK : warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:20
-     [fmpp] logtext:next::10: warning: cannot find matching deallocation function
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:21
-     [fmpp] logtext:next:100) : WARNING: TEST123
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:22
-     [fmpp] logtext:next:MAKEDEF WARNING: TEST
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:23
-     [fmpp] logtext:next:TEST 123 \\(10) : Warning: (400)
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:24
-     [fmpp] logtext:next:BLDMAKE WARNING: bldm warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:25
-     [fmpp] logtext:next:MAKEDEF WARNING: make warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:26
-     [fmpp] logtext:next:atest(100) : warning C aasdfa
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:27
-     [fmpp] logtext:next:testas 100: warning: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:28
-     [fmpp] logtext:next:usage Usage Warning: warn1
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:29
-     [fmpp] logtext:next:abcd mwld.exe: abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:30
-     [fmpp] logtext:next:Command line warning abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:31
-     [fmpp] logtext:next:anything ERROR: bad relocation: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:32
-     [fmpp] logtext:next:10 warning in component1
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:33
-     [fmpp] logtext:next:EventType: Error Source: SweepNTabcde
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:34
-     [fmpp] logtext:next:WARN	test
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:35
-     [fmpp] logtext:next:abcd :10: warning: cannot find matching deallocation function 100:note abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select * from metadata_table where priority_id=1
-     [fmpp] query in SQLTemplateModelselect * from metadata_table where priority_id=1
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] getting records
-     [fmpp] sql queryselect * from metadata_table where priority_id=1 limit 5000 offset 0;
-     [fmpp] columnName:component_id
-     [fmpp] columnName:priority_id
-     [fmpp] columnName:logText
-     [fmpp] columnName:lineNumber
-     [fmpp] columnName:logname_id
-     [fmpp] resultSet MetaData column Count=5
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] next:count:0
-     [fmpp] logtext:next:test FATAL ERROR(S):abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:1
-     [fmpp] logtext:next:): Missing file:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:2
-     [fmpp] logtext:next:abcd FLEXlm error:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:3
-     [fmpp] logtext:next:ABLD ERROR: 1234
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:4
-     [fmpp] logtext:next:BLDMAKE ERROR: 43543
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:5
-     [fmpp] logtext:next:fatal error U1077 error occured
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:6
-     [fmpp] logtext:next:test warning U4010
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:7
-     [fmpp] logtext:next:make[10]: ***abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:8
-     [fmpp] logtext:next:make[10]: abcd not remade because of errors
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:9
-     [fmpp] logtext:next:ERROR: build error
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:10
-     [fmpp] logtext:next:ERROR EC95940: ec error
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:11
-     [fmpp] logtext:next:Errors caused tool to abort. asdfasdf
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:12
-     [fmpp] logtext:next:test no rule to make target
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:13
-     [fmpp] logtext:next:ERROR,.*no rule to make.*,
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:14
-     [fmpp] logtext:next:ERROR	testing
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:15
-     [fmpp] logtext:next:"abcd , line 100: Error: 100abcd:. abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:16
-     [fmpp] logtext:next:test FATAL ERROR(S):abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:17
-     [fmpp] logtext:next:): Missing file:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:18
-     [fmpp] logtext:next:abcd FLEXlm error:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:19
-     [fmpp] logtext:next:ABLD ERROR: 1234
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:20
-     [fmpp] logtext:next:BLDMAKE ERROR: 43543
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:21
-     [fmpp] logtext:next:fatal error U1077 error occured
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:22
-     [fmpp] logtext:next:test warning U4010
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:23
-     [fmpp] logtext:next:make[10]: ***abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:24
-     [fmpp] logtext:next:make[10]: abcd not remade because of errors
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:25
-     [fmpp] logtext:next:ERROR: build error
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:26
-     [fmpp] logtext:next:ERROR EC95940: ec error
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:27
-     [fmpp] logtext:next:Errors caused tool to abort. asdfasdf
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:28
-     [fmpp] logtext:next:test no rule to make target
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:29
-     [fmpp] logtext:next:ERROR,.*no rule to make.*,
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:30
-     [fmpp] logtext:next:ERROR	testing
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:31
-     [fmpp] logtext:next:"abcd , line 100: Error: 100abcd:. abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select * from metadata_table where priority_id=0
-     [fmpp] query in SQLTemplateModelselect * from metadata_table where priority_id=0
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] getting records
-     [fmpp] sql queryselect * from metadata_table where priority_id=0 limit 5000 offset 0;
-     [fmpp] columnName:component_id
-     [fmpp] columnName:priority_id
-     [fmpp] columnName:logText
-     [fmpp] columnName:lineNumber
-     [fmpp] columnName:logname_id
-     [fmpp] resultSet MetaData column Count=5
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select * from metadata_table where priority_id=4
-     [fmpp] query in SQLTemplateModelselect * from metadata_table where priority_id=4
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] getting records
-     [fmpp] sql queryselect * from metadata_table where priority_id=4 limit 5000 offset 0;
-     [fmpp] columnName:component_id
-     [fmpp] columnName:priority_id
-     [fmpp] columnName:logText
-     [fmpp] columnName:lineNumber
-     [fmpp] columnName:logname_id
-     [fmpp] resultSet MetaData column Count=5
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] next:count:0
-     [fmpp] logtext:next:REMARK: 
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:1
-     [fmpp] logtext:next:INFO:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:2
-     [fmpp] logtext:next:anything Command line warning D4025 : test
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:3
-     [fmpp] logtext:next:REMARK: test remark anything
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:4
-     [fmpp] logtext:next:EventType: Error Source: GNU Make.
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:5
-     [fmpp] logtext:next:INFO: any info match
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:6
-     [fmpp] logtext:next:REMARK: 
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:7
-     [fmpp] logtext:next:INFO:
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:8
-     [fmpp] logtext:next:anything Command line warning D4025 : test
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:9
-     [fmpp] logtext:next:REMARK: test remark anything
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:10
-     [fmpp] logtext:next:EventType: Error Source: GNU Make.
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] next:count:11
-     [fmpp] logtext:next:INFO: any info match
-     [fmpp] checking any more element
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] indexmap size1
-     [fmpp] indexmap size1
-     [fmpp] QueryModel:0
-     [fmpp] datalist size1
-     [fmpp] QueryModel:select * from metadata_table where component_id=0 order by priority_id
-     [fmpp] query in SQLTemplateModelselect * from metadata_table where component_id=0 order by priority_id
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] getting records
-     [fmpp] sql queryselect * from metadata_table where component_id=0 order by priority_id limit 5000 offset 0;
-     [fmpp] columnName:component_id
-     [fmpp] columnName:priority_id
-     [fmpp] columnName:logText
-     [fmpp] columnName:lineNumber
-     [fmpp] columnName:logname_id
-     [fmpp] resultSet MetaData column Count=5
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] adding records
-     [fmpp] next:count:0
-     [fmpp] logtext:next:test FATAL ERROR(S):abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:1
-     [fmpp] logtext:next:): Missing file:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:2
-     [fmpp] logtext:next:abcd FLEXlm error:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:3
-     [fmpp] logtext:next:ABLD ERROR: 1234
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:4
-     [fmpp] logtext:next:BLDMAKE ERROR: 43543
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:5
-     [fmpp] logtext:next:fatal error U1077 error occured
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:6
-     [fmpp] logtext:next:test warning U4010
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:7
-     [fmpp] logtext:next:make[10]: ***abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:8
-     [fmpp] logtext:next:make[10]: abcd not remade because of errors
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:9
-     [fmpp] logtext:next:ERROR: build error
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:10
-     [fmpp] logtext:next:ERROR EC95940: ec error
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:11
-     [fmpp] logtext:next:Errors caused tool to abort. asdfasdf
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:12
-     [fmpp] logtext:next:test no rule to make target
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:13
-     [fmpp] logtext:next:ERROR,.*no rule to make.*,
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:14
-     [fmpp] logtext:next:ERROR	testing
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:15
-     [fmpp] logtext:next:"abcd , line 100: Error: 100abcd:. abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:16
-     [fmpp] logtext:next:test FATAL ERROR(S):abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:17
-     [fmpp] logtext:next:): Missing file:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:18
-     [fmpp] logtext:next:abcd FLEXlm error:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:19
-     [fmpp] logtext:next:ABLD ERROR: 1234
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:20
-     [fmpp] logtext:next:BLDMAKE ERROR: 43543
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:21
-     [fmpp] logtext:next:fatal error U1077 error occured
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:22
-     [fmpp] logtext:next:test warning U4010
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:23
-     [fmpp] logtext:next:make[10]: ***abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:24
-     [fmpp] logtext:next:make[10]: abcd not remade because of errors
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:25
-     [fmpp] logtext:next:ERROR: build error
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:26
-     [fmpp] logtext:next:ERROR EC95940: ec error
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:27
-     [fmpp] logtext:next:Errors caused tool to abort. asdfasdf
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:28
-     [fmpp] logtext:next:test no rule to make target
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:29
-     [fmpp] logtext:next:ERROR,.*no rule to make.*,
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:30
-     [fmpp] logtext:next:ERROR	testing
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:31
-     [fmpp] logtext:next:"abcd , line 100: Error: 100abcd:. abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:1
-     [fmpp] datalist size1
-     [fmpp] next:count:32
-     [fmpp] logtext:next:WARNING:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:33
-     [fmpp] logtext:next:LINK : warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:34
-     [fmpp] logtext:next::10: warning: cannot find matching deallocation function
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:35
-     [fmpp] logtext:next:100) : WARNING: TEST123
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:36
-     [fmpp] logtext:next:MAKEDEF WARNING: TEST
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:37
-     [fmpp] logtext:next:TEST 123 \\(10) : Warning: (400)
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:38
-     [fmpp] logtext:next:BLDMAKE WARNING: bldm warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:39
-     [fmpp] logtext:next:MAKEDEF WARNING: make warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:40
-     [fmpp] logtext:next:atest(100) : warning C aasdfa
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:41
-     [fmpp] logtext:next:testas 100: warning: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:42
-     [fmpp] logtext:next:usage Usage Warning: warn1
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:43
-     [fmpp] logtext:next:abcd mwld.exe: abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:44
-     [fmpp] logtext:next:Command line warning abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:45
-     [fmpp] logtext:next:anything ERROR: bad relocation: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:46
-     [fmpp] logtext:next:10 warning in component1
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:47
-     [fmpp] logtext:next:EventType: Error Source: SweepNTabcde
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:48
-     [fmpp] logtext:next:WARN	test
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:49
-     [fmpp] logtext:next:abcd :10: warning: cannot find matching deallocation function 100:note abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:50
-     [fmpp] logtext:next:WARNING:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:51
-     [fmpp] logtext:next:LINK : warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:52
-     [fmpp] logtext:next::10: warning: cannot find matching deallocation function
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:53
-     [fmpp] logtext:next:100) : WARNING: TEST123
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:54
-     [fmpp] logtext:next:MAKEDEF WARNING: TEST
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:55
-     [fmpp] logtext:next:TEST 123 \\(10) : Warning: (400)
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:56
-     [fmpp] logtext:next:BLDMAKE WARNING: bldm warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:57
-     [fmpp] logtext:next:MAKEDEF WARNING: make warning
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:58
-     [fmpp] logtext:next:atest(100) : warning C aasdfa
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:59
-     [fmpp] logtext:next:testas 100: warning: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:60
-     [fmpp] logtext:next:usage Usage Warning: warn1
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:61
-     [fmpp] logtext:next:abcd mwld.exe: abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:62
-     [fmpp] logtext:next:Command line warning abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:63
-     [fmpp] logtext:next:anything ERROR: bad relocation: test123
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:64
-     [fmpp] logtext:next:10 warning in component1
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:65
-     [fmpp] logtext:next:EventType: Error Source: SweepNTabcde
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:66
-     [fmpp] logtext:next:WARN	test
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:67
-     [fmpp] logtext:next:abcd :10: warning: cannot find matching deallocation function 100:note abcd
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:2
-     [fmpp] datalist size1
-     [fmpp] next:count:68
-     [fmpp] logtext:next:mingw_make.exe: error
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:3
-     [fmpp] datalist size1
-     [fmpp] next:count:69
-     [fmpp] logtext:next:mingw_make.exe: error
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:3
-     [fmpp] datalist size1
-     [fmpp] next:count:70
-     [fmpp] logtext:next:REMARK: 
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:71
-     [fmpp] logtext:next:INFO:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:72
-     [fmpp] logtext:next:anything Command line warning D4025 : test
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:73
-     [fmpp] logtext:next:REMARK: test remark anything
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:74
-     [fmpp] logtext:next:EventType: Error Source: GNU Make.
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:75
-     [fmpp] logtext:next:INFO: any info match
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:76
-     [fmpp] logtext:next:REMARK: 
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:77
-     [fmpp] logtext:next:INFO:
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:78
-     [fmpp] logtext:next:anything Command line warning D4025 : test
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:79
-     [fmpp] logtext:next:REMARK: test remark anything
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:80
-     [fmpp] logtext:next:EventType: Error Source: GNU Make.
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] next:count:81
-     [fmpp] logtext:next:INFO: any info match
-     [fmpp] checking any more element
-     [fmpp] indexmap size5
-     [fmpp] QueryModel:4
-     [fmpp] datalist size1
-     [fmpp] File processed.
-
-BUILD SUCCESSFUL
-Total time: 1 second
--- a/buildframework/helium/sf/java/metadata/tests/output1.txt	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-Buildfile: functionality\test_regex.ant.xml
-
-test-readdata:
-     [fmpp] args.size:6
-     [fmpp] arg-list:E:\Build_E\eclipse_fasym013\helium-antlib-trunk\sf\metadata\tests\output\log_all_filterfile.db
-     [fmpp] arg-list:LOG_ALL_FILTERFILE
-     [fmpp] arg-list:10
-     [fmpp] arg-list:-1
-     [fmpp] arg-list:where priority='WARNING'
-     [fmpp] arg-list:true
-     [fmpp] offset-1
-     [fmpp] recordLimit10
-     [fmpp] Initializing the db
-     [fmpp] updating queries
-     [fmpp] adding table details
-     [fmpp] adding record size
-     [fmpp] updateQuery:-1
-     [fmpp] sqlquery:SELECT COUNT(*) AS COUNT FROM LOG_ALL_FILTERFILE where priority='WARNING'
-     [fmpp] record count:36
-     [fmpp] recordcount:36
-     [fmpp] updatequery:10
-     [fmpp] maxoffset:4
-     [fmpp] iterator constructor called
-     [fmpp] checking any more element
-     [fmpp] SQLTemplateModelIterator:offset:0
-     [fmpp] adding table details
-     [fmpp] adding record size
-     [fmpp] updateQuery:0
-     [fmpp] adding records
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 0;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:10
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 0;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:10
-     [fmpp] checking any more element
-     [fmpp] SQLTemplateModelIterator:offset:10
-     [fmpp] adding table details
-     [fmpp] adding record size
-     [fmpp] updateQuery:10
-     [fmpp] adding records
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 10;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:10
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 10;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:10
-     [fmpp] checking any more element
-     [fmpp] SQLTemplateModelIterator:offset:20
-     [fmpp] adding table details
-     [fmpp] adding record size
-     [fmpp] updateQuery:20
-     [fmpp] adding records
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 20;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:10
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 20;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:10
-     [fmpp] checking any more element
-     [fmpp] SQLTemplateModelIterator:offset:30
-     [fmpp] adding table details
-     [fmpp] adding record size
-     [fmpp] updateQuery:30
-     [fmpp] adding records
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 30;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:6
-     [fmpp] actual query:where priority='WARNING'
-     [fmpp] sql querySELECT * from LOG_ALL_FILTERFILE where priority='WARNING' limit 10 offset 30;
-     [fmpp] no. of columns from query result:3
-     [fmpp] record size in getRecords:6
-     [fmpp] checking any more element
-     [fmpp] File processed.
-
-BUILD SUCCESSFUL
-Total time: 0 seconds
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestIMakerLogMetaDataInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,63 @@
+/*
+ * 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.metadata.tests;
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.FileSet;
+import org.junit.Test;
+
+import com.nokia.helium.jpa.entity.metadata.Metadata;
+import com.nokia.helium.metadata.ant.types.IMakerLogMetaDataInput;
+
+/**
+ * Tests the iMaker log metadata input parser.
+ */
+public class TestIMakerLogMetaDataInput {
+
+    /** The number of images in the sample log file that has errors. */
+    public static final int IMAGES_WITH_ERRORS_TOTAL = 5;
+    
+    /**
+     * Read a sample log file and verify that the right number of images (components) is identified.
+     */
+    @Test
+    public void testParseIMakerLogfile() {
+        IMakerLogMetaDataInput imakerInput = new IMakerLogMetaDataInput();
+        imakerInput.setProject(new Project());
+        FileSet fileset = new FileSet();
+        fileset.setDir(new File("."));
+        fileset.setFile(new File("../sf/java/metadata/tests/data/build_roms_sample.log"));
+        imakerInput.add(fileset);
+        
+        // Iterate through the entries
+        Iterator<Metadata.LogEntry> inputIterator = imakerInput.iterator();
+        int componentTotal = 0;
+        while (inputIterator.hasNext()) {
+            Metadata.LogEntry logEntry = inputIterator.next();
+            System.out.println("logentry: " + logEntry.toString());
+            componentTotal++;
+        }
+        assert (componentTotal == IMAGES_WITH_ERRORS_TOTAL);
+    }
+}
+
+
+
--- a/buildframework/helium/sf/java/metadata/tests/test_metadata.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-============================================================================ 
-Name        : test_metadata.ant.xml 
-Part of     : Helium AntLib
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="test-metadata" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>Helium antlib metadata tests.</description>
-
-    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-    <taskdef name="fmpp" classname="fmpp.tools.AntTask" onerror="report"/>
-
-    <target name="check-metadata">
-        <hlm:metadatarecord srcfile="${basedir}\data\gensis.txt" database="${basedir}\out.sqlite">
-            <fileset dir="data" includes="gensis.txt"/>
-            <hlm:textlogparser>
-                <!-- Single set defined by csv file 
-                <hlm:metadatafilterset filterFile="${basedir}\data\common.csv"/>-->
-                <!-- Set defined by nested single filter and another nested set -->
-                <hlm:metadatafilterset>
-                    <hlm:metadatafilter priority="error" regex=".*Warning: Could not find file.*" description="Test pattern for missing file."/>
-                    <!--<hlm:metadatafilterset>
-                        <hlm:metadatafilter priority="warning" regex="File not found" description="Test pattern for missing file."/>
-                    </hlm:metadatafilterset>-->
-                </hlm:metadatafilterset>
-            </hlm:textlogparser>
-        </hlm:metadatarecord>
-        <!--<au:assertLogContains text="Successfully executed codescanner"/>
-        <au:assertLogContains text="Output format: xml,html"/>
-        <au:assertFileExists file="${codescanner.output.dir}/problemIndex.xml"/>-->
-    </target>
-    
-    
-    <target name="render-scanlog">
-        <property name="build.logs.dir" value="${bmd.test.project.dir}/test_bmd" />
-        <fmpp sourceFile="${basedir}/../src/templates/readdata.xml.ftl"
-                      outputFile="${basedir}/readdata.xml">
-            <freemarkerLinks expandProperties="yes">
-                macro: ${basedir}/../src/templates
-            </freemarkerLinks>
-            <data>
-                templatedir: "${basedir}/src/templates"
-                template: "components_status.xml.ftl"
-                dbPath: "tests/out.sqlite"
-                countOnly: "true"
-                tableName: "out"
-                queryString: "where priority='WARNING' or priority='error'"
-                limit: "500"
-                ant: antProperties()
-            </data>
-        </fmpp>
-    </target>
-
-    <hlm:metadatafilterset id="metadata.regex.test">
-        <hlm:metadatafilter priority="ERROR" regex="^Error \d+: this is some serious error.*" description="Test pattern for testing metadataRegexTest condition."/>
-    </hlm:metadatafilterset>
-
-    <target name="test-scanlog-metadata-regex-pass">
-        <au:assertTrue>
-            <hlm:metadataRegexTest severity="ERROR" string="Error 193: this is some serious error">
-                <hlm:metadatafilterset refid="metadata.regex.test"/>
-            </hlm:metadataRegexTest>
-        </au:assertTrue>
-    </target>
-    <target name="test-scanlog-metadata-regex-fail-1">
-        <au:expectfailure>
-            <fail>
-                <condition>
-                    <hlm:metadataRegexTest severity="ERROR">
-                        <hlm:metadatafilterset refid="metadata.regex.test"/>
-                    </hlm:metadataRegexTest>
-                </condition>
-            </fail>
-        </au:expectfailure>
-    </target>
-    <target name="test-scanlog-metadata-regex-fail-2">
-        <au:expectfailure>
-            <fail>
-                <condition>
-                    <hlm:metadataRegexTest string="Error 193: this is some serious error">
-                        <hlm:metadatafilterset refid="metadata.regex.test"/>
-                    </hlm:metadataRegexTest>
-                </condition>
-            </fail>
-        </au:expectfailure>
-    </target>
-</project>
--- a/buildframework/helium/sf/java/metadata/tests/test_validity.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-============================================================================ 
-Name        : test_diamonds.ant.xml 
-Part of     : Helium AntLib
-
-Copyright (c) 2009 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:
-
-============================================================================
--->
-<project name="test-metadata-validity" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-    <description>Helium Antlib diamonds unittests.</description>
-    
-    <dirname property="project.dir" file="${ant.file.test-metadata-validity}" />
-
-    <taskdef resource="com/nokia/helium/metadata/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-    <taskdef name="fmpp" classname="fmpp.tools.AntTask"  onerror="report"/>
-
-    <!--
-    <hlm:metadatafilterset id="all-regex-filterfile">
-        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
-    </hlm:metadatafilterset>
-
-    <target name="test-all-regex-filterfile">
-        <echo message="all regular expression validation" />
-        <echo message="database:${project.dir}/../output/log_all_filterfile.sqlite" />
-        <hlm:metadatarecord database="${project.dir}/../output/log_all_filterfile.sqlite">
-            <fileset dir="${project.dir}/../data/">
-                <include  name="all*.log"/>
-            </fileset>
-           <hlm:saxlogparser>
-                <metadatafilterset refid="all-regex-filterfile" />
-           </hlm:saxlogparser>
-        </hlm:metadatarecord>
-    </target>
-
-    <hlm:metadatafilterset id="all-regex-combined">
-        <metadatafilter priority="WARNING" regex=".*warning U4010" description="mingw error" />
-        <metadatafilterset filterfile="${project.dir}/../data/common.csv" />
-    </hlm:metadatafilterset>
-
-    <target name="test-all-regex-combined">
-        <echo message="all regular expression validation" />
-        <echo message="database:${project.dir}/../output/log_all_combined.sqlite" />
-        <hlm:metadatarecord database="${project.dir}/../output/log_all_combined.sqlite">
-            <fileset dir="${project.dir}/../data/">
-                <include  name="all*.log"/>
-            </fileset>
-            <hlm:saxlogparser>
-                <metadatafilterset refid="all-regex-combined" />
-            </hlm:saxlogparser>
-        </hlm:metadatarecord>
-    </target>
-    -->
-</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,11 +22,11 @@
 -->
 <antlib>
     <!-- Task definition -->
-    <taskdef name="codescanner" classname="com.nokia.helium.quality.ant.taskdefs.CodeScanner" onerror="ignore"/>
-    <taskdef name="coverity" classname="com.nokia.helium.quality.ant.taskdefs.Coverity" onerror="ignore"/>
-    <taskdef name="cmt" classname="com.nokia.helium.quality.ant.taskdefs.CMTTool" onerror="ignore"/>
-    
+    <taskdef name="codescanner" classname="com.nokia.helium.quality.ant.taskdefs.CodeScannerTask" onerror="ignore"/>
+    <taskdef name="coverity" classname="com.nokia.helium.quality.ant.taskdefs.CoverityTask" onerror="ignore"/>
+    <taskdef name="cmt" classname="com.nokia.helium.quality.ant.taskdefs.CMTToolTask" onerror="ignore"/>
+    <taskdef name="cmtsummarytask" classname="com.nokia.helium.quality.ant.taskdefs.CMTSummaryTask" onerror="ignore"/>
+
     <!-- Type definition -->
     <typedef name="coverityoptions" classname="com.nokia.helium.core.ant.types.VariableSet"/>
-    <typedef name="arg" classname="com.nokia.helium.core.ant.types.Variable"/>
 </antlib>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTSummaryTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,366 @@
+/*
+ * 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.quality.ant.taskdefs;
+
+import java.io.*;
+import java.util.*;
+import org.apache.log4j.Logger;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import java.io.FileReader;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+ 
+ /**
+ * This Task searches the index.html files created by CMT and looks for the summary
+ * values at the end of the file e.g. Files: 12     LOCphy: 137.
+ * and takes the info and places it in an XMl file ready to be sent to diamonds. The Xml
+ * file is placed in the diamonds folder in the output folder and these files are then 
+ * sent to diamonds when the build is finished soall we have to do is create the file in the 
+ * correct folder.
+ *
+ * <pre>
+ * &lt;hlm:cmtmetadatainput   
+            diamondsHeaderFileName="C:\brtaylor\1\diamonds_header.xml" 
+            diamondsFooterFileName="C:\brtaylor\1\diamonds_footer.xml"
+            outptuFile="Z:\output\diamonds/cmt_summary_componentName_1.xml/" 
+            inputFile="Z:\output\logs/minibuild_ido_0.0.03_test_cmt_componentName1_cmt/CMTHTML/index.html/&gt;
+ * </pre>
+ * 
+ * @ant.task name="cmtsummarytask" category="Quality"
+ */
+ 
+public class CMTSummaryTask extends Task {
+
+    /** the following 2 variables are indexes to the SEARCH_TERMS_ARRAY **/
+    /**index to the searched for text**/
+    private static final int INPUT_TEXT_INDEX = 0;
+    /**index to the text to write to the xml file**/
+    private static final int OUTPUT_ELEMENT_INDEX = 1;
+    /**get the system relevent line separator **/
+    private static final String NEW_LINE = System.getProperty( "line.separator" );
+
+    /** this array contains the text to be searched for in the inputFile (1st element)
+    and the text to be written to the .xml output file (2nd element)**/
+    private static final String[][] SEARCH_TERMS_ARRAY = {
+        //1st elem  2nd elem
+        {"Files:", "files"},
+        {"LOCphy:", "locphy"},
+        {"LOCbl:", "locbl"},
+        {"LOCpro:", "locpro"},
+        {"LOCcom:", "loccom"},
+        {"v(G) :", "vg"},
+        {"MI without comments  :", "mi_wo_comments"},
+        {"MI comment weight    :", "mi_comment_weight"},
+        {"MI:", "mi"}
+    };
+
+    /** always accesses the 1st group of the matcher**/
+    private static int matcherGroupNum;         //default init is 0
+
+    /**indexes to the SEARCH_TERMS_ARRAY**/
+    private int arrayIndex;
+    
+    private int sizeArray = SEARCH_TERMS_ARRAY.length;
+
+    private Logger log = Logger.getLogger(CMTSummaryTask.class);
+    /** the following variables are inputs to the class**/
+    /** the file containing the CMT summary data**/
+    private String inputFile;
+    /**name of file to write the output to**/
+    private String outputFile;
+    
+    /**the following variables are used internally by the class**/
+    /** each line of the input file is read into this**/
+    private String  line;
+    /**the regex for a string of digits**/
+    private Pattern digitPattern = Pattern.compile("\\d+");
+
+    /** file descriptor for the input file**/
+    private BufferedReader inputFileReader;
+
+    /**file handler used to write the summary numbers to the output file***/
+    private BufferedWriter output;      //default init = null
+
+    /**tells the main method whether it should be looking for digist or text**/
+    private boolean lineStartsWithDigits;       //default init = false
+
+    /**file name of the default diamonds XML file header part (1st few lines)
+    used so not writing the XML text here**/
+    private String diamondsHeaderFileName;
+    /**file name of the default diamonds XML file footer part (last line)
+    used so not writing the XML text here**/
+    private String diamondsFooterFileName;
+
+    
+
+    /**
+     * @param outputFile
+     *            set the output file name
+     * @ant.required
+     */
+    public void setOutputFile(String outputFile) {
+        this.outputFile = outputFile;
+    }
+
+    /**
+     * @return the outputFile
+     *          the output file name
+     */
+    public String getOutputFile() {
+        return outputFile;
+    }
+
+
+    /**
+     * @return the inputFile
+     */
+    public String getinputFile() {
+        return inputFile;
+    }
+
+    /**
+     * @param inputFile
+     *            the name of file to scan and extract data from
+     * @ant.required
+     */
+    public void setinputFile(String inputFile) {
+        this.inputFile = inputFile;
+    }
+
+    /**
+     * @param diamondsFooterFileName
+     *            set the diamonds footer file name
+     * @ant.required
+     */
+    public void setdiamondsFooterFileName(String diamondsFooterFileName) {
+        this.diamondsFooterFileName = diamondsFooterFileName;
+    }
+
+    /**
+     * @return the diamondsFooterFileName
+     *          the diamonds footer file name 
+     */
+    public String getdiamondsFooterFileName() {
+        return diamondsFooterFileName;
+    }
+
+    /**
+     * @param diamondsHeaderFileName
+     *            set the diamonds header file name
+     * @ant.required
+     */
+    public void setdiamondsHeaderFileName(String diamondsHeaderFileName) {
+        this.diamondsHeaderFileName = diamondsHeaderFileName;
+    }
+
+    /**
+     * @return the diamondsFooterFileName
+     *          the diamonds footer file name 
+     */
+    public String getdiamondsHeaderFileName() {
+        return diamondsHeaderFileName;
+    }
+
+
+    /**the main part of the code - the method that is called**/
+    public void execute() {
+        log("CMTSummaryTask execute method with input file : " + inputFile, Project.MSG_ERR);
+        boolean result;
+        String commandString;
+        boolean inputFileFound = true;
+        BufferedReader diamondsHeaderFile;
+        BufferedReader diamondsFooterFile;
+        
+        Project prj = getProject();
+        log("output File is " + getOutputFile(), Project.MSG_ERR);
+        
+        try {
+            //open the file with the CMT results init
+            inputFileReader = new BufferedReader(new FileReader(inputFile));
+        } catch (FileNotFoundException exc) {
+            log("FileNotFoundException while getting the input file.  : " + inputFile + "  " + exc.getMessage(), Project.MSG_ERR);
+            inputFileFound = false;     //stops an empty output file being created.
+        }
+        if (inputFileFound) {
+            try {
+                //write the title stuff for the XML diamonds schema
+                output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(getOutputFile()), "UTF8"));
+            } catch (FileNotFoundException exc) {
+                log("FileNotFoundException while getting the output file.  : " + getOutputFile() + "   " + exc.getMessage(), Project.MSG_ERR);
+            } catch (UnsupportedEncodingException exc) {
+                // We are Ignoring the errors as no need to fail the build.
+                log("UnsupportedEncodingException while creating the output file : " + getOutputFile() + "   " + exc.getMessage(), Project.MSG_ERR);
+            } catch (SecurityException exc) {
+                // We are Ignoring the errors as no need to fail the build.
+                log("SecurityException while creating the output file : " + getOutputFile() + "   " + exc.getMessage(), Project.MSG_ERR); 
+            }
+    
+            if (output != null) {
+                //managed to open the output file
+                try {
+                    //write the initial XML text to the file
+                    String tempLine;
+                    diamondsHeaderFile = null;
+                    diamondsHeaderFile = new BufferedReader(new FileReader(getdiamondsHeaderFileName()));
+                    while ((tempLine = diamondsHeaderFile.readLine()) != null) {
+                      output.write(tempLine);
+                      output.newLine();
+                    }
+                    diamondsHeaderFile.close();
+                    output.write("    <cmt>\r\n");
+                    
+                    // CheckStyle:InnerAssignment OFF
+                    //process each of the searchterms
+                    while ((arrayIndex < sizeArray) && ((line = inputFileReader.readLine()) != null)) {
+                        findTextAndOutput();            //read finput file and write the output
+                    }
+                    // CheckStyle:InnerAssignment ON
+                    
+                    //write the end of file text
+                    output.write("    </cmt>");
+                    output.newLine();
+                    
+                    diamondsFooterFile = null;
+                    diamondsFooterFile = new BufferedReader(new FileReader(getdiamondsFooterFileName()));
+                    while ((tempLine = diamondsFooterFile.readLine()) != null) {
+                      output.write(tempLine);
+                      output.newLine();
+                    }
+                    output.close();     //close the output file
+                    diamondsFooterFile.close();
+                }  catch (FileNotFoundException exc) {
+                    log("FileNotFoundException while getting the diamonds header file : " + getdiamondsHeaderFileName() + "   " + exc.getMessage(), Project.MSG_ERR); 
+                } catch (IOException exc) {
+                    // We are Ignoring the errors as no need to fail the build.
+                    log("IOException : " + getdiamondsHeaderFileName() + " output file =  " + getOutputFile() + "  "
+                            + exc.getMessage(), Project.MSG_ERR); 
+                } catch (IllegalArgumentException exc) {
+                    // We are Ignoring the errors as no need to fail the build.
+                    log("IllegalArgumentException : " + getdiamondsHeaderFileName() + " output file =  " + getOutputFile() + "  "
+                            + exc.getMessage(), Project.MSG_ERR); 
+                }
+            } else {
+                log("Error: no output File available ", Project.MSG_ERR); 
+            }
+        } else {
+            log("Error: no input File available ", Project.MSG_ERR); 
+         }
+    }
+
+    /**
+    This is the function that performs the actual file searches and writes the number
+    following the searched for text to the output XML file
+    **/
+    private void findTextAndOutput()
+    {
+        final int colonSkip = 2;
+        byte[] lineBytes = null;
+        int len;
+        int buffLen;
+        int lineLen;
+        int serchTermTextLen;
+        int spacesLen;
+        
+        try {
+            lineLen = line.length();
+            while ((lineLen > 0) && (arrayIndex < sizeArray)) {
+                //Process each of the groups of chars in a line
+                if (line.startsWith(SEARCH_TERMS_ARRAY[arrayIndex][INPUT_TEXT_INDEX])) {
+                    //found the CMT data type we are looking for so look fo r the digits now
+                    serchTermTextLen = SEARCH_TERMS_ARRAY[arrayIndex][INPUT_TEXT_INDEX].length();
+                    buffLen = writeToOutput();
+                    if ((buffLen > 0) && (arrayIndex < sizeArray)) {
+                        //skip over the digits so can get the next searchterm near the begining of line
+                        line = line.substring(line.indexOf(':') + colonSkip + buffLen);
+                        spacesLen = removeAnySpaces();
+                        lineLen = lineLen - (buffLen + serchTermTextLen + spacesLen);   //decrease line length for the while loop
+                    } else {
+                        //didn't find the digits so probably at the end of the line and the digits
+                        //are on the next line
+                        len = line.length();
+                        //convert the line to bytes so we can check for a specific Character
+                        lineBytes = line.getBytes("UTF-8");
+                        int sbLen = lineBytes.length;
+                        //the last real char (i.e. not the EOL) should be '=' if the digits are on the next line
+                        if (lineBytes[sbLen - 1] == '=') {
+                            //found the '=' so read the next line in
+                            lineStartsWithDigits = true;
+                            lineLen = 0;
+                        } else {
+                            log("can't find the '=' at end of line  ", Project.MSG_ERR);
+                            lineLen = 0;
+                        }
+                    }
+                } else if (lineStartsWithDigits) {  //probably got a line with digits on 
+                    buffLen = writeToOutput();      //definitely got a line with digits on
+                    lineStartsWithDigits = false;
+                    if ((buffLen > 0) && (arrayIndex < sizeArray)) {  //now need to get rid of the digits and get to the next none digits char
+                        line = line.substring(buffLen);
+                        spacesLen = removeAnySpaces();
+                        lineLen = lineLen - (buffLen + spacesLen);   //decrease line length for the while loop
+                    } else {
+                        lineLen = 0;
+                        log("can't find the digits at beg of line ", Project.MSG_ERR); 
+                    }
+                } else {
+                    lineLen = 0;
+                }
+            }
+        } catch (IOException exc) {
+            log("IOException Error searching : " + exc.getMessage(), Project.MSG_ERR);
+        }
+        return;
+    }
+
+    private int writeToOutput() throws IOException
+    {
+        String buffer;
+        int buffLen;
+
+        Matcher componentMatch = digitPattern.matcher(line);
+        if (componentMatch.find()) {
+            //found the digits after the search term
+            buffer = componentMatch.group(matcherGroupNum);
+            //write the XML formated <files>nn</files> to the output file (plus the other)
+            output.write("        <" + SEARCH_TERMS_ARRAY[arrayIndex][OUTPUT_ELEMENT_INDEX] + ">");
+            output.write(buffer);
+            output.write("</" + SEARCH_TERMS_ARRAY[arrayIndex++][OUTPUT_ELEMENT_INDEX] + ">");
+            output.newLine();
+            buffLen = buffer.length();
+        } else {
+            buffLen = 0;
+            log("can't find digits may be '=' at end of line ", Project.MSG_ERR); 
+        }
+        return buffLen;
+    }
+    
+    private int removeAnySpaces() throws UnsupportedEncodingException {
+        byte[] lineBytes;
+        int num = 0;
+        int len = line.length();
+        //convert the line to bytes so we can check for a specific Character
+        lineBytes = line.getBytes("UTF-8");
+       //while there are still spaces at the front of the line shuffle the line along to get rid of them
+        while ((lineBytes[num++] == ' ') && (len > 0)) {
+            line = line.substring(1);       //remove 1 space at front of line
+            len--;
+        }
+        return num;
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTTool.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-/*
- * 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.quality.ant.taskdefs;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.ExecTask;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * CMTTool is the task used to execute the Complexity Measures Tool for C/C++.
- * 
- * <pre>
- * Usage:
- * 
- * &lt;hlm:cmt output=&quot;${cmt.output.dir}\logs\${build.id}_${ido.name}_${componentbase}_${cmt.id}.txt&gt;
- *     &lt;fileset id=&quot;input&quot; dir=&quot;${test.data.src}&quot;&gt;
- *         &lt;include name=&quot;*&#42;/*.h&quot;/&gt;
- *         &lt;include name=&quot;*&#42;/*.cpp&quot;/&gt;
- *     &lt;/fileset&gt;
- * &lt;/hlm:cmt&gt;
- * 
- * output : Name of the file to contain the results of Complexity Measures Tool.
- * fileset: Location of the source files whose complexity is to be measured.
- * </pre>
- * 
- * @ant.task name="cmt" category="Quality".
- */
-public class CMTTool extends Task {
-
-    private FileSet fileSet;
-    private String input;
-    private String output;
-
-    /**
-     * Set the fileset.
-     * 
-     * @param fileSet
-     *            is the fileset which points to the location of source files to
-     *            be measured.
-     * @ant.required
-     */
-    public void addFileset(FileSet fileSet) {
-        this.fileSet = fileSet;
-    }
-
-    /**
-     * Set the name and location of the output file to contain the result of CMT
-     * tool.
-     * 
-     * @param output
-     *            is the name of the result file to be generated.
-     * @ant.required
-     */
-    public void setOutput(String output) {
-        this.output = output;
-    }
-
-    /**
-     * Run the CMT task.
-     */
-    public void execute() {
-        if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
-            getProject()
-                    .log("CMT supported only for windows", Project.MSG_WARN);
-            return;
-        }
-        validate();
-        input = fileSet.getDir().getPath();
-        generateFileList();
-        runCmtCommand();
-        runCmt2HtmlCommand();
-    }
-
-    /**
-     * Execute the cmt.exe command.
-     */
-    private void runCmtCommand() {
-        try {
-            ExecTask task = getExecTask("cmttool", "cmt.exe", new File("."));
-            task.createArg().setValue("-f");
-            task.createArg().setValue(
-                    input + System.getProperty("file.separator") + "files.lst");
-            task.createArg().setValue("-o");
-            task.createArg().setValue(output);
-            task.setResultProperty("cmt.status");
-            task.setProject(getProject());
-            task.execute();
-            int status = new Integer(getProject().getProperty("cmt.status"));
-            getProject().log("CMT run successfully? " + (status == 0));
-        } catch (BuildException ex) {
-            // We are Ignoring the errors as no need to fail the build.
-            getProject().log(ex.getMessage(), Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Execute the cmt2html.bat command.
-     */
-    private void runCmt2HtmlCommand() {
-        try {
-            File outputdir = new File(output.replace(".txt", "_cmt"));
-            outputdir.mkdir();
-            ExecTask task = getExecTask("cmt2html", "cmt2html.bat", outputdir);
-            task.createArg().setValue("-i");
-            task.createArg().setValue(output);
-            task.createArg().setValue("-nsb");
-            task.setResultProperty("cmt2html.status");
-            task.setProject(getProject());
-            task.execute();
-            int status = new Integer(getProject()
-                    .getProperty("cmt2html.status"));
-            getProject().log("CMT2HTML run successfully? " + (status == 0));
-        } catch (BuildException ex) {
-            // We are Ignoring the errors as no need to fail the build.
-            getProject().log(ex.getMessage(), Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Return an execute task with the given inputs.
-     * 
-     * @param taskName
-     *            is the name of the execute task.
-     * @param cmd
-     *            is the command to be executed by the task.
-     * @param outDir
-     *            is the working directory for the task.
-     * @return an instance of execute task.
-     */
-    private ExecTask getExecTask(String taskName, String cmd, File outDir) {
-        ExecTask task = new ExecTask();
-        task.setDir(outDir);
-        task.setTaskName(taskName);
-        task.setExecutable(cmd);
-        return task;
-    }
-
-    /**
-     * Method validates the required parameters and elements are set.
-     */
-    private void validate() {
-        if (fileSet == null) {
-            raiseError("Nested Element 'fileset' missing for task 'cmt'.");
-        }
-
-        if (output == null || (output != null && output.isEmpty())) {
-            raiseError("Parameter 'output' missing for task 'cmt'.");
-        }
-
-    }
-
-    /**
-     * Method is used to throw a BuildException.
-     * 
-     * @param message
-     *            is the message to be thrown.
-     */
-    private void raiseError(String message) {
-        throw new BuildException(message);
-    }
-
-    /**
-     * Generates a file containing a list of files.
-     */
-    private void generateFileList() {
-        if (fileSet != null) {
-            DirectoryScanner ds = fileSet.getDirectoryScanner();
-            ds.scan();
-            String[] filelist = ds.getIncludedFiles();
-            String fileSeparator = System.getProperty("file.separator");
-            String lineSeparator = System.getProperty("line.separator");
-            File fileList = new File(input + fileSeparator + "files.lst");
-            BufferedWriter outputFile = null;
-            try {
-                outputFile = new BufferedWriter(new FileWriter(fileList));
-                for (String file : filelist) {
-                    outputFile.write(input + fileSeparator + file
-                            + lineSeparator);
-                }
-            } catch (IOException e) {
-                // We are Ignoring the errors as no need to fail the build.
-                getProject().log(e.getMessage(), Project.MSG_WARN);
-            } finally {
-                try {
-                    if (outputFile != null)
-                        outputFile.close();
-                } catch (IOException ex) {
-                    // ignore exception
-                    ex = null;
-                }
-            }
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CMTToolTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,234 @@
+/*
+ * 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.quality.ant.taskdefs;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.ExecTask;
+import org.apache.tools.ant.taskdefs.condition.Os;
+import org.apache.tools.ant.types.FileSet;
+
+/**
+ * CMTTool is the task used to execute the Complexity Measures Tool for C/C++.
+ * 
+ * <pre>
+ * Usage:
+ * 
+ * &lt;hlm:cmt output=&quot;${cmt.output.dir}\logs\${build.id}_${ido.name}_${componentbase}_${cmt.id}.txt&gt;
+ *     &lt;fileset id=&quot;input&quot; dir=&quot;${test.data.src}&quot;&gt;
+ *         &lt;include name=&quot;*&#42;/*.h&quot;/&gt;
+ *         &lt;include name=&quot;*&#42;/*.cpp&quot;/&gt;
+ *     &lt;/fileset&gt;
+ * &lt;/hlm:cmt&gt;
+ * 
+ * output : Name of the file to contain the results of Complexity Measures Tool.
+ * fileset: Location of the source files whose complexity is to be measured.
+ * </pre>
+ * 
+ * @ant.task name="cmt" category="Quality".
+ */
+public class CMTToolTask extends Task {
+
+    private List<FileSet> cmtFileSetList = new ArrayList<FileSet>();
+    private File input;
+    private File output;
+    private File htmlOutputDir;
+    private boolean failOnError = true;
+
+    /**
+     * Set the fileset.
+     * 
+     * @param fileSet
+     *            is the fileset which points to the location of source files to
+     *            be measured.
+     * @ant.required
+     */
+    public void addFileset(FileSet fileSet) {
+        cmtFileSetList.add(fileSet);
+    }
+
+    /**
+     * Set the name and location of the output file to contain the result of CMT
+     * tool.
+     * 
+     * @param output
+     *            is the name of the result file to be generated.
+     * @ant.required
+     */
+    public void setOutput(File output) {
+        this.output = output;
+    }
+
+    /**
+     * @param failOnError the failOnError to set
+     */
+    public void setFailOnError(boolean failOnError) {
+        this.failOnError = failOnError;
+    }
+
+    /**
+     * @param htmlOutputDir the htmlOutputDir to set
+     */
+    public void setHtmlOutputDir(File htmlOutputDir) {
+        this.htmlOutputDir = htmlOutputDir;
+    }
+
+    /**
+     * Run the CMT task.
+     */
+    public void execute() {
+        if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
+            throw new BuildException("CMT supported only on windows platforms.");
+        }
+        validate();
+        try {
+            input = File.createTempFile("Files", ".list");
+            generateFileList();
+            runCmtCommand();
+            if (this.htmlOutputDir != null) {
+                runCmt2HtmlCommand();
+            }
+        } catch (IOException ioe) {
+            throw new BuildException("Not able to generate file list for 'cmt'. ", ioe);
+        } catch (BuildException be) {
+            if (failOnError) {
+                throw new BuildException("Exception occured while running 'cmt' tool. ", be);
+            }
+            log("Exception occured while running 'cmt' tool. ", Project.MSG_ERR);
+        } finally {
+            if (input != null) {
+                input.delete();
+            }
+        }
+    }
+    
+    /**
+     * Execute the cmt.exe command.
+     */
+    private void runCmtCommand() {
+        String command = null;
+        if (!this.output.getParentFile().exists()) {
+            this.output.getParentFile().mkdirs();
+        }
+        ExecTask task = getExecTask("cmttool", "cmt", new File("."));
+        command = "cmt";
+        task.createArg().setValue("-f");
+        command += " " + "-f";
+        task.createArg().setValue(input.toString());
+        command += " " + input.toString();
+        task.createArg().setValue("-o");
+        command += " " + "-o";
+        task.createArg().setValue(output.toString());
+        command += " " + output;
+        task.setProject(getProject());
+        log("run command: " + command);
+        task.execute();
+    }
+
+    /**
+     * Execute the cmt2html.bat command.
+     */
+    private void runCmt2HtmlCommand() {
+        String command = null;
+        if (!this.htmlOutputDir.exists()) {
+            this.htmlOutputDir.mkdirs();
+        }
+        ExecTask task = getExecTask("cmt2html", "cmt2html.bat", this.htmlOutputDir);
+        command = "cmt2html.bat"; 
+        task.createArg().setValue("-i");
+        command += " " + "-i";
+        task.createArg().setValue(output.toString());
+        command += " " + output;
+        task.createArg().setValue("-nsb");
+        command += " " + "-nsb";
+        task.setProject(getProject());
+        log("run command: " + command);
+        task.execute();
+    }
+
+    /**
+     * Return an execute task with the given inputs.
+     * 
+     * @param taskName
+     *            is the name of the execute task.
+     * @param cmd
+     *            is the command to be executed by the task.
+     * @param outDir
+     *            is the working directory for the task.
+     * @return an instance of execute task.
+     */
+    private ExecTask getExecTask(String taskName, String cmd, File outDir) {
+        ExecTask task = new ExecTask();
+        task.setDir(outDir);
+        task.setTaskName(this.getTaskName());
+        task.setExecutable(cmd);
+        return task;
+    }
+
+    /**
+     * Method validates the required parameters and elements are set.
+     */
+    private void validate() {
+        if (cmtFileSetList.size() == 0) {
+            throw new BuildException("Nested Element 'fileset' missing for task 'cmt'.");
+        }
+        if (output == null) {
+            throw new BuildException("Parameter 'output' missing for task 'cmt'.");
+        }
+    }
+
+    /**
+     * Generates a file containing a list of files.
+     */
+    private void generateFileList() {
+        
+        for (FileSet fileSet : cmtFileSetList) {
+            DirectoryScanner dirScanner = fileSet.getDirectoryScanner();
+            dirScanner.scan();
+            String[] filelist = dirScanner.getIncludedFiles();
+            String lineSeparator = System.getProperty("line.separator");
+            BufferedWriter outputFile = null;
+            try {
+                outputFile = new BufferedWriter(new FileWriter(input));
+                for (String file : filelist) {
+                    outputFile.write(dirScanner.getBasedir().toString() + file
+                            + lineSeparator);
+                }
+            } catch (IOException e) {
+                throw new BuildException("Not able to generate file list for 'cmt'. ", e);
+            } finally {
+                try {
+                    if (outputFile != null)
+                        outputFile.close();
+                } catch (IOException ex) {
+                    // ignore exception
+                    ex = null;
+                }
+            }
+        }
+    }
+}
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CodeScanner.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/*
- * 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.quality.ant.taskdefs;
-
-import java.io.*;
-import java.util.Vector;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.taskdefs.ExecTask;
-
-/**
- * This task executes codescanner - and writes the results to the output directory.
- * Codescanner parses C++ code and flags any inconsistencies or errors in output files. 
- * Configuration files are used to determine what passes and fails the checking e.g. maximum length of lines,
- * whether 'C' type comments are allowed as well as C++ comments, does it adhere to the company coding 
- * guidelines and much more. Every person writing any C++ code 
- * should run codescanner on their code to ensure it follows the coding guidelines. The output logs 
- * should have no errors and preferably no warnings before the code should be checked into SCM, e.g. synergy or SVN.
- *
- * Below is an example of how to use the target to run codescanner.
- *
- * <pre>
- * &lt;property name="codescanner.output.dir" location="./cs" /&gt;
- * &lt;property name="codescanner.output.type" value="html" /&gt;
- * &lt;property name="codescanner.config" location="./codescanner_config.xml" /&gt;
- *
- * &lt;hlm:codescanner dest="${codescanner.output.dir}"
- *      format="${codescanner.output.type}"
- *      failonerror="true"
- *      configuration="${codescanner.config}"&gt;
- *      &lt;path refid="src.path"/&gt;
- *  &lt;/hlm:codescanner&gt;
- *  &lt;au:assertLogContains text="Successfully executed codescanner"/&gt;
- *  &lt;au:assertLogContains text="Output format: xml,html"/&gt;
- *  &lt;au:assertFileExists file="${codescanner.output.dir}/problemIndex.xml"/&gt;
- * </pre>
- * 
- * @ant.task name="codescanner" category="Quality"
- */
-public class CodeScanner extends Task {
-    private Vector<Path> paths = new Vector<Path>();
-    private File configuration;
-    private String dest;
-    private String format = "xml,html";
-    private boolean auto;
-    private File log;
-    private boolean failonerror;
-
-    /**
-     * This defines if the task should fails in case of error while 
-     * executing codescanner.
-     * 
-     * @param failonerror
-     * @ant.not-required Default is false for backward compatibility.
-     */
-    public void setFailonerror(boolean failonerror) {
-        this.failonerror = failonerror;
-    }
-
-    /**
-     * Add path datatype to the task.
-     * 
-     * @param path
-     */
-    public void add(Path path) {
-        paths.add(path);
-    }
-
-    /**
-     * Get dest attribute.
-     * 
-     */
-    public String getDest() {
-        return this.dest;
-    }
-
-    /**
-     * Set dest attribute.
-     * 
-     * @param dest
-     * @ant.required
-     */
-    public void setDest(String dest) {
-        this.dest = dest;
-    }
-
-    /**
-     * Get format attribute.
-     * 
-     */
-    public String getFormat() {
-        return this.format;
-    }
-
-    /**
-     * Set format attribute.
-     * 
-     * @param format
-     * @ant.not-required Default is xml,html
-     */
-    public void setFormat(String format) {
-        this.format = format;
-    }
-
-    /**
-     * Get configuration attribute.
-     * 
-     */
-    public File getConfiguration() {
-        return this.configuration;
-    }
-
-    /**
-     * Set configuration attribute.
-     * 
-     * @param configuration
-     * @ant.required
-     */
-    public void setConfiguration(File configuration) {
-        this.configuration = configuration;
-    }
-
-    /**
-     * Set auto attribute.
-     * 
-     * @param auto
-     * @ant.not-required Default is false.
-     */
-    public void setAuto(boolean auto) {
-        this.auto = auto;
-    }
-
-    /**
-     * Set log attribute.
-     * 
-     * @param log
-     * @ant.not-required
-     */
-    public void setLog(File log) {
-        this.log = log;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void execute() {
-        // creating the exec subtask
-        String osType = System.getProperty("os.name");
-        if (!osType.toLowerCase().startsWith("win")) {
-            this.log("CODESCANNER: run in windows only");
-            return;
-        }
-        ExecTask task = new ExecTask();
-        task.setProject(getProject());
-        task.setTaskName(this.getTaskName());
-        task.setFailonerror(failonerror);
-        task.setExecutable("codescanner");
-        task.setDir(new File("."));
-        if (dest == null) {
-            throw new BuildException("'dest' attribute must be defined");
-        }
-        if (configuration != null) {
-            if (!configuration.exists()) {
-                throw new BuildException("Could not find the file "
-                        + configuration);
-            } else {
-                task.createArg().setValue("-c");
-                task.createArg().setValue(configuration.getAbsolutePath());
-            }
-        } else {
-            throw new BuildException(
-                    "'configuration' attribute must be defined");
-        }
-        if (!format.contains("xml")) {
-           setFormat("xml," + format);
-        }
-        this.log("Output format: " + format);
-        // -t off
-        task.createArg().setValue("-t");
-        task.createArg().setValue(auto ? "on" : "off");
-
-        // -l log
-        if (log != null) {
-            this.log("Output log: " + log.getAbsolutePath());
-            task.createArg().setValue("-l");
-            task.createArg().setValue(log.getAbsolutePath());
-        }
-
-        // -o type
-        task.createArg().setValue("-o");
-        task.createArg().setValue(format);
-        if (paths.isEmpty()) {
-            throw new BuildException("No input directory defined");
-        }
-        // Getting the list of source dir to scan
-        Vector<String> srcs = new Vector<String>();
-        for (Path path : paths) {
-            if (path.isReference()) {
-                path = (Path) path.getRefid().getReferencedObject();
-            }
-            for (String apath : path.list()) {
-                srcs.add(apath);
-            }
-        }
-        for (int i = 0; i < srcs.size(); i++) {
-            if (i != srcs.size() - 1) {
-                task.createArg().setValue("-i");
-                task.createArg().setValue(srcs.elementAt(i));
-            } else {
-                task.createArg().setValue(srcs.elementAt(i));
-                task.createArg().setValue(dest.toString());
-            }
-        }
-        // output path
-        this.log("Output dir " + dest);
-
-        // Run codescanner
-        task.execute();
-        this.log("Successfully executed codescanner");
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CodeScannerTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,239 @@
+/*
+ * 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.quality.ant.taskdefs;
+
+import java.io.*;
+import java.util.Vector;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.taskdefs.ExecTask;
+
+/**
+ * This task executes codescanner - and writes the results to the output directory.
+ * Codescanner parses C++ code and flags any inconsistencies or errors in output files. 
+ * Configuration files are used to determine what passes and fails the checking e.g. maximum length of lines,
+ * whether 'C' type comments are allowed as well as C++ comments, does it adhere to the company coding 
+ * guidelines and much more. Every person writing any C++ code 
+ * should run codescanner on their code to ensure it follows the coding guidelines. The output logs 
+ * should have no errors and preferably no warnings before the code should be checked into SCM, e.g. synergy or SVN.
+ *
+ * Below is an example of how to use the target to run codescanner.
+ *
+ * <pre>
+ * &lt;property name="codescanner.output.dir" location="./cs" /&gt;
+ * &lt;property name="codescanner.output.type" value="html" /&gt;
+ * &lt;property name="codescanner.config" location="./codescanner_config.xml" /&gt;
+ *
+ * &lt;hlm:codescanner dest="${codescanner.output.dir}"
+ *      format="${codescanner.output.type}"
+ *      failonerror="true"
+ *      configuration="${codescanner.config}"&gt;
+ *      &lt;path refid="src.path"/&gt;
+ *  &lt;/hlm:codescanner&gt;
+ *  &lt;au:assertLogContains text="Successfully executed codescanner"/&gt;
+ *  &lt;au:assertLogContains text="Output format: xml,html"/&gt;
+ *  &lt;au:assertFileExists file="${codescanner.output.dir}/problemIndex.xml"/&gt;
+ * </pre>
+ * 
+ * @ant.task name="codescanner" category="Quality"
+ */
+public class CodeScannerTask extends Task {
+    private Vector<Path> paths = new Vector<Path>();
+    private File configuration;
+    private String dest;
+    private String format = "xml,html";
+    private boolean auto;
+    private File log;
+    private boolean failonerror;
+
+    /**
+     * This defines if the task should fails in case of error while 
+     * executing codescanner.
+     * 
+     * @param failonerror
+     * @ant.not-required Default is false for backward compatibility.
+     */
+    public void setFailonerror(boolean failonerror) {
+        this.failonerror = failonerror;
+    }
+
+    /**
+     * Add path datatype to the task.
+     * 
+     * @param path
+     */
+    public void add(Path path) {
+        paths.add(path);
+    }
+
+    /**
+     * Get dest attribute.
+     * 
+     */
+    public String getDest() {
+        return this.dest;
+    }
+
+    /**
+     * Set dest attribute.
+     * 
+     * @param dest
+     * @ant.required
+     */
+    public void setDest(String dest) {
+        this.dest = dest;
+    }
+
+    /**
+     * Get format attribute.
+     * 
+     */
+    public String getFormat() {
+        return this.format;
+    }
+
+    /**
+     * Set format attribute.
+     * 
+     * @param format
+     * @ant.not-required Default is xml,html
+     */
+    public void setFormat(String format) {
+        this.format = format;
+    }
+
+    /**
+     * Get configuration attribute.
+     * 
+     */
+    public File getConfiguration() {
+        return this.configuration;
+    }
+
+    /**
+     * Set configuration attribute.
+     * 
+     * @param configuration
+     * @ant.required
+     */
+    public void setConfiguration(File configuration) {
+        this.configuration = configuration;
+    }
+
+    /**
+     * Set auto attribute.
+     * 
+     * @param auto
+     * @ant.not-required Default is false.
+     */
+    public void setAuto(boolean auto) {
+        this.auto = auto;
+    }
+
+    /**
+     * Set log attribute.
+     * 
+     * @param log
+     * @ant.not-required
+     */
+    public void setLog(File log) {
+        this.log = log;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void execute() {
+        // creating the exec subtask
+        String osType = System.getProperty("os.name");
+        if (!osType.toLowerCase().startsWith("win")) {
+            this.log("CODESCANNER: run in windows only");
+            return;
+        }
+        ExecTask task = new ExecTask();
+        task.setProject(getProject());
+        task.setTaskName(this.getTaskName());
+        task.setFailonerror(failonerror);
+        task.setExecutable("codescanner");
+        task.setDir(new File("."));
+        if (dest == null) {
+            throw new BuildException("'dest' attribute must be defined");
+        }
+        if (configuration != null) {
+            if (!configuration.exists()) {
+                throw new BuildException("Could not find the file "
+                        + configuration);
+            } else {
+                task.createArg().setValue("-c");
+                task.createArg().setValue(configuration.getAbsolutePath());
+            }
+        } else {
+            throw new BuildException(
+                    "'configuration' attribute must be defined");
+        }
+        if (!format.contains("xml")) {
+           setFormat("xml," + format);
+        }
+        this.log("Output format: " + format);
+        // -t off
+        task.createArg().setValue("-t");
+        task.createArg().setValue(auto ? "on" : "off");
+
+        // -l log
+        if (log != null) {
+            this.log("Output log: " + log.getAbsolutePath());
+            task.createArg().setValue("-l");
+            task.createArg().setValue(log.getAbsolutePath());
+        }
+
+        // -o type
+        task.createArg().setValue("-o");
+        task.createArg().setValue(format);
+        if (paths.isEmpty()) {
+            throw new BuildException("No input directory defined");
+        }
+        // Getting the list of source dir to scan
+        Vector<String> srcs = new Vector<String>();
+        for (Path path : paths) {
+            if (path.isReference()) {
+                path = (Path) path.getRefid().getReferencedObject();
+            }
+            for (String apath : path.list()) {
+                srcs.add(apath);
+            }
+        }
+        for (int i = 0; i < srcs.size(); i++) {
+            if (i != srcs.size() - 1) {
+                task.createArg().setValue("-i");
+                task.createArg().setValue(srcs.elementAt(i));
+            } else {
+                task.createArg().setValue(srcs.elementAt(i));
+                task.createArg().setValue(dest.toString());
+            }
+        }
+        // output path
+        this.log("Output dir " + dest);
+
+        // Run codescanner
+        task.execute();
+        this.log("Successfully executed codescanner");
+    }
+}
--- a/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/Coverity.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +0,0 @@
-/*
-* 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.quality.ant.taskdefs;
-
-import java.io.File;
-import java.util.Vector;
-import java.util.Map.Entry;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.ExecTask;
-
-import com.nokia.helium.core.ant.types.Variable;
-import com.nokia.helium.core.ant.types.VariableSet;
-
-/**
- * To run the coverity commands.
- * 
- *  
- * <pre>
- *      &lt;hlm:coverity command="cov-link" dir="${build.drive}/"&gt;
-                    &lt;hlm:arg name="--dir" value="${coverity.output.dir}/intermidiate"/&gt;
-                    &lt;hlm:arg name="--compile-arg" value="armv5"/&gt;
-                    &lt;hlm:arg name="--output" value="${coverity.output.dir}/coveritylink/armv5.link"/&gt;
-                    &lt;hlm:arg name="${coverity.output.dir}/coveritylink/all.link" value=""/&gt;
-                &lt;/hlm:coverity &gt;
- *      
- * </pre>
- * 
- * @ant.task name="coverity" category="Quality".
- *
- */
-  
- 
-public class Coverity extends Task {
-    
-    private String command;
-    private boolean failOnError;
-    private boolean execute = true;
-    private String dir;
-    private Vector<VariableSet> coverityOptions = new Vector<VariableSet>();
-    private Vector<Variable> coverityArgs = new Vector<Variable>();
-    
-    
-    public void execute() {
-        
-        validateParameters();
-        
-        runCommand(command);
-        
-    }
-    
-    
-
-    /**
-     * To run the command passed into coverity tsask.
-     * @param command
-     */
-    private void runCommand(String command) {
-        
-        String commandString = command;
-        if (!command.startsWith("cov-")) {
-            throw new BuildException("Coverity task can run only coverity prevent tool commands.");
-        }
-        
-        ExecTask task = new ExecTask();
-        task.setProject(getProject());
-        task.setTaskName(this.getTaskName());
-        task.setFailonerror(failOnError);
-        task.setExecutable(command);
-        task.setDir(new File(this.dir));
-        
-        for (VariableSet coverityArg : coverityOptions) {
-            for (Entry<String, Variable> entry : coverityArg.getVariablesMap().entrySet() ) {
-                task.createArg().setValue(entry.getKey());
-                task.createArg().setValue(entry.getValue().getValue());
-                commandString = commandString + " " + entry.getKey() + " " + entry.getValue().getValue();
-            }
-        }
-        
-        for (Variable coverityArg : coverityArgs) {
-            task.createArg().setValue(coverityArg.getName());
-            task.createArg().setValue(coverityArg.getValue());
-            commandString = commandString + " " + coverityArg.getName() + " " + coverityArg.getValue();
-        }
-        
-        try {
-            log("run command: " + commandString);
-            if (execute) {
-                task.execute();
-            }
-        } catch (BuildException be) {
-            if (failOnError) {
-                throw new BuildException("exception during coverity command '" + command + "' execution:", be);
-            }
-        }
-        
-    }
-
-
-
-    /**
-     * To validate the parameters passed into coverity task.
-     */
-    private void validateParameters() {
-        
-        if (command == null) {
-            throw new BuildException("'command' parameter should not be null for coverity task.");
-        }
-        
-    }
-
-
-
-    /**
-     * @param command the command to set
-     * @ant.required
-     */
-    public void setCommand(String command) {
-        this.command = command;
-    }
-
-    /**
-     * @return the command
-     */
-    public String getCommand() {
-        return command;
-    }
-    
-    /**
-     * @param failOnError the failOnError to set
-     *  @ant.not-required
-     */
-    public void setFailOnError(boolean failOnError) {
-        this.failOnError = failOnError;
-    }
-
-    /**
-     * @return the dir
-     */
-    public String getDir() {
-        return dir;
-    }
-
-    /**
-     * @param dir the dir to set
-     *  @ant.not-required
-     */
-    public void setDir(String dir) {
-        this.dir = dir;
-    }
-
-    /**
-     * @param execute the execute to set
-     */
-    public void setExecute(boolean execute) {
-        this.execute = execute;
-    }
-
-
-
-    /**
-     * To read the coverity arguments for coverity commands.
-     * @param variableArg
-     */
-    public void addCoverityOptions(VariableSet coverityArg) {
-        if (!coverityOptions.contains(coverityArg)) {
-            coverityOptions.add(coverityArg);
-        }
-    }
-    
-    /**
-     * To read the individual arguments.
-     * @param coverityArg
-     */
-    public void addArg(Variable coverityArg) {
-        if (!coverityArgs.contains(coverityArg)) {
-            coverityArgs.add(coverityArg);
-        }
-    }
-    
-    
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/src/com/nokia/helium/quality/ant/taskdefs/CoverityTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,188 @@
+/*
+ * 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.quality.ant.taskdefs;
+
+import java.io.File;
+import java.util.Vector;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.ExecTask;
+
+import com.nokia.helium.core.ant.types.VariableImpl;
+import com.nokia.helium.core.ant.types.VariableSet;
+
+/**
+ * To run the coverity commands.
+ * 
+ * 
+ * <pre>
+ *      &lt;hlm:coverity command=&quot;cov-link&quot; dir=&quot;${build.drive}/&quot;&gt;
+ *                     &lt;hlm:arg name=&quot;--dir&quot; value=&quot;${coverity.output.dir}/intermidiate&quot;/&gt;
+ *                     &lt;hlm:arg name=&quot;--compile-arg&quot; value=&quot;armv5&quot;/&gt;
+ *                     &lt;hlm:arg name=&quot;--output&quot; value=&quot;${coverity.output.dir}/coveritylink/armv5.link&quot;/&gt;
+ *                     &lt;hlm:arg name=&quot;${coverity.output.dir}/coveritylink/all.link&quot; value=&quot;&quot;/&gt;
+ *                 &lt;/hlm:coverity &gt;
+ * 
+ * </pre>
+ * 
+ * @ant.task name="coverity" category="Quality".
+ * 
+ */
+
+public class CoverityTask extends Task {
+
+    private String command;
+    private boolean failOnError;
+    private boolean execute = true;
+    private String dir;
+    private Vector<VariableSet> coverityOptions = new Vector<VariableSet>();
+    private Vector<VariableImpl> coverityArgs = new Vector<VariableImpl>();
+
+    public void execute() {
+
+        validateParameters();
+
+        runCommand(command);
+
+    }
+
+    /**
+     * To run the command passed into coverity task.
+     * 
+     * @param command
+     */
+    private void runCommand(String command) {
+
+        String commandString = command;
+        if (!command.startsWith("cov-")) {
+            throw new BuildException(
+                    "Coverity task can run only coverity prevent tool commands.");
+        }
+
+        ExecTask task = new ExecTask();
+        task.setProject(getProject());
+        task.setTaskName(this.getTaskName());
+        task.setFailonerror(failOnError);
+        task.setExecutable(command);
+        task.setDir(new File(this.dir));
+
+        for (VariableSet coverityArg : coverityOptions) {
+            task.createArg().setLine(coverityArg.getParameter(" "));
+            commandString += " " + coverityArg.getParameter(" ");
+        }
+        for (VariableImpl coverityArg : coverityArgs) {
+            task.createArg().setLine(coverityArg.getParameter(" "));
+            commandString += " " + coverityArg.getParameter(" ");
+        }
+
+        try {
+            log("run command: " + commandString);
+            if (execute) {
+                task.execute();
+            }
+        } catch (BuildException be) {
+            if (failOnError) {
+                throw new BuildException("exception during coverity command '"
+                        + command + "' execution:", be);
+            }
+        }
+
+    }
+
+    /**
+     * To validate the parameters passed into coverity task.
+     */
+    private void validateParameters() {
+        if (command == null) {
+            throw new BuildException(
+                    "'command' parameter should not be null for coverity task.");
+        }
+
+    }
+
+    /**
+     * @param command
+     *            the command to set
+     * @ant.required
+     */
+    public void setCommand(String command) {
+        this.command = command;
+    }
+
+    /**
+     * @return the command
+     */
+    public String getCommand() {
+        return command;
+    }
+
+    /**
+     * @param failOnError
+     *            the failOnError to set
+     * @ant.not-required
+     */
+    public void setFailOnError(boolean failOnError) {
+        this.failOnError = failOnError;
+    }
+
+    /**
+     * @return the dir
+     */
+    public String getDir() {
+        return dir;
+    }
+
+    /**
+     * @param dir
+     *            the dir to set
+     * @ant.not-required
+     */
+    public void setDir(String dir) {
+        this.dir = dir;
+    }
+
+    /**
+     * @param execute
+     *            the execute to set
+     */
+    public void setExecute(boolean execute) {
+        this.execute = execute;
+    }
+
+    /**
+     * To read the coverity arguments for coverity commands.
+     * 
+     * @param variableArg
+     */
+    public void addCoverityOptions(VariableSet coverityArg) {
+        if (!coverityOptions.contains(coverityArg)) {
+            coverityOptions.add(coverityArg);
+        }
+    }
+
+    /**
+     * To read the individual arguments.
+     * 
+     * @param coverityArg
+     */
+    public void addArg(VariableImpl coverityArg) {
+        if (!coverityArgs.contains(coverityArg)) {
+            coverityArgs.add(coverityArg);
+        }
+    }
+
+}
--- a/buildframework/helium/sf/java/quality/tests/antunit/test_cmt.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/quality/tests/antunit/test_cmt.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -23,27 +23,36 @@
 <project name="test-cmt" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
     <description>Helium antlib Quality CMT related tests.</description>
 
+    <taskdef name="fmpp" classname="fmpp.tools.AntTask" onerror="report"/>
+
     <taskdef resource="com/nokia/helium/quality/ant/antlib.xml" uri="http://www.nokia.com/helium" />
-    <property name="cmt.output.dir" location="./../output"/>
+    <property name="cmt.output.dir" location="${test.temp.dir}/output"/>
     <property name="test.data.src" value="./../data/helloworldcons"/>
-    <property name="build.id" value="testbuild"/>
-    <property name="ido.name" value="cmttest"/>
-    <property name="cmt.id" value="1"/>
-
+    <property name="temp.diamonds.header.xml" location="${cmt.output.dir}/cmt/diamonds_header.xml" />
+    <property name="temp.diamonds.footer.xml" location="${cmt.output.dir}/cmt/diamonds_footer.xml" />
+    
     <basename property="componentbase" file="${test.data.src}"/>
+    <property name="diamonds.build.output.dir" location="${cmt.output.dir}/cmt" />
     
     <!-- is called prior to the test -->
     <target name="setUp">
-        <delete dir="${cmt.output.dir}" failonerror="false" />
-        <mkdir dir="${cmt.output.dir}/logs" />
+        <delete dir="${cmt.output.dir}/cmt" failonerror="false" />
+        <mkdir dir="${cmt.output.dir}/cmt" />
+        
+        <!--take the diamonds header and footer .ftl files and turn them into .xml files
+        for copying as the headera nd footer parts of the output files-->
+        <fmpp sourcefile="./../../../../../tools/common/templates/diamonds/diamonds_header.ftl" 
+              outputfile="${temp.diamonds.header.xml}" quiet="true"/>
+        <fmpp sourcefile="./../../../../../tools/common/templates/diamonds/diamonds_footer.ftl" 
+              outputfile="${temp.diamonds.footer.xml}" quiet="true"/>
     </target>
 
     <!-- is called after the test, even if that caused an error -->
     <target name="tearDown">
-        <delete dir="${cmt.output.dir}" failonerror="false" />
-        <delete file="${test.data.src}\files.lst" failonerror="false" />
+        <delete dir="${cmt.output.dir}/cmt" failonerror="false" />
+        <delete file="${temp.diamonds.header.xml}" failonerror="false" />
+        <delete file="${temp.diamonds.footer.xml}" failonerror="false" />
     </target>
-
     <condition property="do.cmt.test">
         <os family="windows" />
     </condition>
@@ -56,17 +65,27 @@
     -->
 
     <target name="test-cmt-with-all-reqd-params-set" if="do.cmt.test">
-        <hlm:cmt output="${cmt.output.dir}\logs\${build.id}_${ido.name}_${componentbase}_${cmt.id}.txt">
+        <hlm:cmt output="${cmt.output.dir}\logs\cmt_test.txt">
             <fileset id="input" dir="${test.data.src}">
                 <include name="**/*.h"/>
                 <include name="**/*.cpp"/>
             </fileset>
         </hlm:cmt>
-        
-        <au:assertLogContains text="CMT run successfully? true"/>
-        <au:assertFileExists file="${cmt.output.dir}\logs\testbuild_cmttest_helloworldcons_1.txt"/>
-        <au:assertLogContains text="CMT2HTML run successfully? true"/>
-        <au:assertFileExists file="${cmt.output.dir}\logs\testbuild_cmttest_helloworldcons_1_cmt\CMTHTML\index.html"/>
+        <au:assertLogContains text="run command: cmt"/>
+        <au:assertFileExists file="${cmt.output.dir}\logs\cmt_test.txt"/>
+    </target>
+    
+    <target name="test-cmt-with-html-output-dir" if="do.cmt.test">
+        <hlm:cmt output="${cmt.output.dir}\logs\cmt_test.txt" htmlOutputDir="${cmt.output.dir}\logs\cmthtmlFolder">
+            <fileset id="input" dir="${test.data.src}">
+                <include name="**/*.h"/>
+                <include name="**/*.cpp"/>
+            </fileset>
+        </hlm:cmt>
+        <au:assertLogContains text="run command: cmt"/>
+        <au:assertFileExists file="${cmt.output.dir}\logs\cmt_test.txt"/>
+        <au:assertLogContains text="run command: cmt2html.bat"/>
+        <au:assertFileExists file="${cmt.output.dir}\logs\cmthtmlFolder\CMTHTML\index.html"/>
     </target>
     
     <!--
@@ -102,9 +121,92 @@
      **************************************************************
     -->
     <target name="test-cmt-linux" unless="do.cmt.test">
-        <hlm:cmt/>
-        <au:assertLogContains text="CMT supported only for windows"/>
+        <au:expectfailure expectedMessage="CMT supported only on windows platforms">
+            <hlm:cmt/>
+        </au:expectfailure>
+    </target>
+
+    <!--
+     ** test CMT convert to diamonds (input file has all the wanted data on 2 lines only)
+    -->
+    <target name="test-cmt-cnvt-dia-valid-2lines" if="do.cmt.test">
+        <property name="cmt.id" value="1" />
+        <property name="cmt.test.data.src" location="${test.data.src}/index_${cmt.id}.html" />
+        <property name="output.file.name" location="${diamonds.build.output.dir}/cmt_summary_${cmt.id}.xml"/>
+
+        <hlm:cmtsummarytask diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+            outputFile="${output.file.name}"
+            inputFile="${cmt.test.data.src}" />
+        <au:assertFileExists file="${output.file.name}" />
+        <au:assertFilesMatch expected="${output.file.name}" 
+                actual="${test.data.src}/../cmt_summary_${cmt.id}.xml" />
+
+    </target>
+
+    <!--
+     ** test CMT convert to diamonds (input file has all the wanted data on 4 lines)
+    -->
+    <target name="test-cmt-cnvt-dia-valid-split" if="do.cmt.test">
+        <property name="cmt.id" value="2" />
+        <property name="cmt.test.data.src" location="${test.data.src}/index_${cmt.id}.html" />
+        <property name="output.file.name" location="${diamonds.build.output.dir}/cmt_summary_${cmt.id}.xml"/>
+
+        <hlm:cmtsummarytask diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+            outputFile="${output.file.name}"
+            inputFile="${cmt.test.data.src}" />
+        <au:assertFileExists file="${output.file.name}" />
+        <au:assertFilesMatch expected="${output.file.name}" 
+                actual="${test.data.src}/../cmt_summary_${cmt.id}.xml" />
+
     </target>
 
-    
+    <!--
+     ** test CMT convert to diamonds input file has no CMT summary data
+    -->
+    <target name="test-cmt-cnvt-dia-invalid-no-summary" if="do.cmt.test">
+        <property name="cmt.id" value="3" />
+        <property name="cmt.test.data.src" location="${test.data.src}/index_${cmt.id}.html" />
+        <property name="output.file.name" location="${diamonds.build.output.dir}/cmt_summary_${cmt.id}.xml"/>
+
+        <hlm:cmtsummarytask diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+            outputFile="${output.file.name}"
+            inputFile="${cmt.test.data.src}" />
+        <au:assertFileExists file="${output.file.name}" />
+        <au:assertFilesMatch expected="${output.file.name}" 
+                actual="${test.data.src}/../cmt_summary_${cmt.id}.xml" />
+
+    </target>
+
+    <!--
+     ** test CMT convert to diamonds input file none existant
+    -->
+    <target name="test-cmt-cnvt-dia-invalid-no-file" if="do.cmt.test">
+        <property name="cmt.id" value="4" />
+        <property name="cmt.test.data.src" location="${test.data.src}/index_${cmt.id}.html" />
+        <property name="output.file.name" location="${diamonds.build.output.dir}/cmt_summary_${cmt.id}.xml"/>
+
+        <hlm:cmtsummarytask diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+            outputFile="${output.file.name}"
+            inputFile="${cmt.test.data.src}" />
+        <au:assertFileDoesntExist file="${output.file.name}" />
+
+    </target>
+
+    <!--
+     ** test CMT convert to diamonds input file has spaces after number text in CMT summary data
+    -->
+    <target name="test-cmt-cnvt-dia-invalid-space-after-numtext-no-summary" if="do.cmt.test">
+        <property name="cmt.id" value="5" />
+        <property name="cmt.test.data.src" location="${test.data.src}/index_${cmt.id}.html" />
+        <property name="output.file.name" location="${diamonds.build.output.dir}/cmt_summary_${cmt.id}.xml"/>
+
+        <hlm:cmtsummarytask diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+            outputFile="${output.file.name}"
+            inputFile="${cmt.test.data.src}" />
+        <au:assertFileExists file="${output.file.name}" />
+        <au:assertFilesMatch expected="${output.file.name}" 
+                actual="${test.data.src}/../cmt_summary_${cmt.id}.xml" />
+
+    </target>
+
 </project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_1.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<diamonds-build>
+    <schema>21</schema>
+    <cmt>
+        <files>2</files>
+        <locphy>101</locphy>
+        <locbl>25</locbl>
+        <locpro>45</locpro>
+        <loccom>35</loccom>
+        <vg>4</vg>
+        <mi_wo_comments>98</mi_wo_comments>
+        <mi_comment_weight>32</mi_comment_weight>
+        <mi>130</mi>
+    </cmt>
+</diamonds-build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_2.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<diamonds-build>
+    <schema>21</schema>
+    <cmt>
+        <files>3578</files>
+        <locphy>1449873</locphy>
+        <locbl>197449</locbl>
+        <locpro>883402</locpro>
+        <loccom>393776</loccom>
+        <vg>79966</vg>
+        <mi_wo_comments>92</mi_wo_comments>
+        <mi_comment_weight>32</mi_comment_weight>
+        <mi>125</mi>
+    </cmt>
+</diamonds-build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_3.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<diamonds-build>
+    <schema>21</schema>
+    <cmt>
+    </cmt>
+</diamonds-build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/cmt_summary_5.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<diamonds-build>
+    <schema>21</schema>
+    <cmt>
+        <files>3578</files>
+        <locphy>1449873</locphy>
+        <locbl>197449</locbl>
+        <locpro>883402</locpro>
+        <loccom>483</loccom>
+        <vg>79966</vg>
+        <mi_wo_comments>92</mi_wo_comments>
+        <mi_comment_weight>32</mi_comment_weight>
+        <mi>125</mi>
+    </cmt>
+</diamonds-build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_1.html	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<body 
+<td>&nbsp;<a class="black">helloworldcons.cpp</a>&nbsp;3&nbsp;79&nbsp;40&nbsp;1051&nbsp;0.18&nbsp;125&nbsp;</td></tr>
+<tr><td colspan="2">&nbsp;</td></tr>
+<pre>
+Files: 2    LOCphy: 101     LOCbl: 25    LOCpro: 45     LOCcom: 35   ';': 25
+v(G) : 4    MI without comments  : 98    MI comment weight    : 32    MI: 130
+</pre></body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_2.html	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<body 
+<td>&nbsp;<a class="black">helloworldcons.cpp</a>&nbsp;3&nbsp;79&nbsp;40&nbsp;1051&nbsp;0.18&nbsp;125&nbsp;</td></tr>
+<tr><td colspan="2">&nbsp;</td></tr>
+<pre>
+Files: 3578 LOCphy: 1449873 LOCbl: 197449LOCpro: 883402 LOCcom: =
+393776';': 432445
+v(G) : 79966MI without comments  : 92    MI comment weight    : 32    =
+MI: 125
+</pre></body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_3.html	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<body 
+<td>&nbsp;<a class="black">helloworldcons.cpp</a>&nbsp;3&nbsp;79&nbsp;40&nbsp;1051&nbsp;0.18&nbsp;125&nbsp;</td></tr>
+<tr><td colspan="2">&nbsp;</td></tr>
+<pre>
+
+</pre></body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/quality/tests/data/helloworldcons/index_5.html	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<body 
+<td>&nbsp;<a class="black">helloworldcons.cpp</a>&nbsp;3&nbsp;79&nbsp;40&nbsp;1051&nbsp;0.18&nbsp;125&nbsp;</td></tr>
+<tr><td colspan="2">&nbsp;</td></tr>
+<pre>
+Files: 3578 LOCphy: 1449873 LOCbl: 197449LOCpro: 883402 LOCcom: =
+483    ';': 432445
+v(G) : 79966MI without comments  : 92    MI comment weight    : 32    =
+MI: 125
+</pre></body></html>
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -24,8 +24,8 @@
     <!-- Task definition -->
     <taskdef name="sbstask" classname="com.nokia.helium.sbs.ant.taskdefs.SBSTask"/>
     <taskdef name="ctctask" classname="com.nokia.helium.sbs.ant.taskdefs.CTCTask"/>
-    <taskdef name="coveritybuild" classname="com.nokia.helium.sbs.ant.taskdefs.SBSCoverity"/>
-    <taskdef name="getsbsinputs" classname="com.nokia.helium.sbs.ant.taskdefs.GetSBSInputs"/>
+    <taskdef name="coveritybuild" classname="com.nokia.helium.sbs.ant.taskdefs.SBSCoverityTask"/>
+    <taskdef name="getsbsinputs" classname="com.nokia.helium.sbs.ant.taskdefs.GetSBSInputsTask"/>
     <!-- Type definition -->
     <typedef name="sbsbuild" classname="com.nokia.helium.sbs.ant.types.SBSBuild"/>
     <typedef name="sbsinput" classname="com.nokia.helium.sbs.ant.types.SBSInput"/>
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/CTCTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/CTCTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,10 @@
 */
 package com.nokia.helium.sbs.ant.taskdefs;
 
+import java.util.Vector;
+
+import com.nokia.helium.core.ant.types.VariableSet;
+
 /**
  * This task is to execute the CTCWrap command with the list of sbs parameters
  * using sbsinput type. Based on the raptor input list of additional log file path
@@ -35,19 +39,45 @@
 public class CTCTask extends SBSTask {
     
     private String instrumentType = "m";
+    private Vector<VariableSet> ctcOptions = new Vector<VariableSet>();
     
+    /**
+     * Constructing the task, overriding default executable to be 
+     * ctcwrap.
+     */
     public CTCTask() {
         super();
         getSbsCmd().setExecutable("ctcwrap");
     }
     
-    public void setInstrumentType(String i)
+    /**
+     * Defined the instrumentation type.
+     * @param instrumentType the instrumentation type.
+     * @ant.not-required Default is 'm'
+     */
+    public void setInstrumentType(String instrumentType)
     {
-        instrumentType = i;
+        this.instrumentType = instrumentType;
     }
     
+    /**
+     * Override the command line construction.
+     */
     protected String getSBSCmdLine() {
-        return "-i " + instrumentType + " sbs" + super.getSBSCmdLine();
+        String ctcConfig = "";
+        for (VariableSet ctcOption : ctcOptions) {
+            ctcConfig += " " + ctcOption.getParameter();
+        }
+        return "-i " + instrumentType  + ctcConfig + " sbs" + super.getSBSCmdLine();
+    }
+
+    /**
+     * To read the ctc arguments for ctcwrap command.
+     * 
+     * @param ctcArg
+     */
+    public void addCTCOptions(VariableSet ctcArg) {
+        ctcOptions.add(ctcArg);
     }
 
 }
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/GetSBSInputs.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
- * 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.sbs.ant.taskdefs;
-
-import java.util.List;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import com.nokia.helium.sbs.ant.types.*;
-import com.nokia.helium.sbs.ant.*;
-
-/**
- * This task provide a way to get the list of sbs command input for a particular
- * configuration from abld. For every abld command mentioned for a configuration 
- * from schema 1.4.0, there should be a corresponding sbsinput and for all
- * abld commands in the sysdef configuration a corresponding sbsbuild command has
- * to be there. And using this task the list of sbs commands are extracted and executed 
- * one after another. This is only for backward compatibility, once the sysdef config
- * is migrated to 3.0, this task would be deprecated.
- * 
- * This is internal task and should not be used outside helium.
- * 
- * <pre>
- * Example 1:
- * &lt;getsbsinputs config=&quot;sysdef.configuration&quot;
- *      outputProperty=&quot;sbs.internal.list&quot;/&gt;
- * </pre>
- * 
- * @ant.task name="getsbsinputs" category="SBS"
- */
-
-public class GetSBSInputs extends Task {
-
-    private String configName;
-    private String outputProperty;
-    
-    /**
-     *  Helper function to set the configuration name for
-     *  which the sbs commands to be extracted.
-     * @param name of the configuration for which sbs commands to be obtained.
-     */
-    public void setConfig(String name) {
-        configName = name;
-    }
-
-    /**
-     *  Helper function to retrive the sbs input list (list of sbs commands
-     *  to be executed one after another). The list is provided with comma
-     *  separated values.
-     * @param property name of the property where the sbs input list to be stored.
-     */
-    public void setOutputProperty(String property) {
-        outputProperty = property;
-    }
-
-    /**
-     *  Execute the task. Finds the list of sbsinput and store it in
-     *  outputproperty with comma separated values.
-     * @throws BuildException
-     */
-    public void execute() {
-        if (configName == null) {
-            throw new BuildException("configInput is not defined");
-        }
-        List<SBSInput> sbsInputList = SBSBuildList.getSBSInputList(getProject(), configName);
-        StringBuffer inputs = new StringBuffer();
-        for (SBSInput input : sbsInputList) {
-            if (inputs.length() > 0) {
-                inputs.append(",");
-            }
-            inputs.append(input.getRefid().getRefId());
-            getProject().setProperty(outputProperty,inputs.toString());
-        }
-    }
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/GetSBSInputsTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,89 @@
+/*
+ * 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.sbs.ant.taskdefs;
+
+import java.util.List;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import com.nokia.helium.sbs.ant.types.*;
+import com.nokia.helium.sbs.ant.*;
+
+/**
+ * This task provide a way to get the list of sbs command input for a particular
+ * configuration from abld. For every abld command mentioned for a configuration 
+ * from schema 1.4.0, there should be a corresponding sbsinput and for all
+ * abld commands in the sysdef configuration a corresponding sbsbuild command has
+ * to be there. And using this task the list of sbs commands are extracted and executed 
+ * one after another. This is only for backward compatibility, once the sysdef config
+ * is migrated to 3.0, this task would be deprecated.
+ * 
+ * This is internal task and should not be used outside helium.
+ * 
+ * <pre>
+ * Example 1:
+ * &lt;getsbsinputs config=&quot;sysdef.configuration&quot;
+ *      outputProperty=&quot;sbs.internal.list&quot;/&gt;
+ * </pre>
+ * 
+ * @ant.task name="getsbsinputs" category="SBS"
+ */
+
+public class GetSBSInputsTask extends Task {
+
+    private String configName;
+    private String outputProperty;
+    
+    /**
+     *  Helper function to set the configuration name for
+     *  which the sbs commands to be extracted.
+     * @param name of the configuration for which sbs commands to be obtained.
+     */
+    public void setConfig(String name) {
+        configName = name;
+    }
+
+    /**
+     *  Helper function to retrive the sbs input list (list of sbs commands
+     *  to be executed one after another). The list is provided with comma
+     *  separated values.
+     * @param property name of the property where the sbs input list to be stored.
+     */
+    public void setOutputProperty(String property) {
+        outputProperty = property;
+    }
+
+    /**
+     *  Execute the task. Finds the list of sbsinput and store it in
+     *  outputproperty with comma separated values.
+     * @throws BuildException
+     */
+    public void execute() {
+        if (configName == null) {
+            throw new BuildException("configInput is not defined");
+        }
+        List<SBSInput> sbsInputList = SBSBuildList.getSBSInputList(getProject(), configName);
+        StringBuffer inputs = new StringBuffer();
+        for (SBSInput input : sbsInputList) {
+            if (inputs.length() > 0) {
+                inputs.append(",");
+            }
+            inputs.append(input.getRefid().getRefId());
+            getProject().setProperty(outputProperty,inputs.toString());
+        }
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSCoverity.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/*
- * 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.sbs.ant.taskdefs;
-
-import java.util.Vector;
-import java.util.Map.Entry;
-
-import com.nokia.helium.core.ant.types.Variable;
-import com.nokia.helium.core.ant.types.VariableSet;
-
-/**
- * This task is to execute the cov-build command with the list of sbs parameters
- * using sbsinput type. Based on the raptor input list of additional log file
- * path used needs to be set, so that the scanlog, additional log files are
- * generated properly.
- * 
- * <pre>
- * Example 1:
- * 
- * &lt;coveritybuild sbsinput=&quot;sbs.input&quot; sysdefFile=&quot;system.def.file&quot;
- *      workingDir=&quot;build.drive&quot; failOnError=&quot;false&quot; 
- *      cleanLog=&quot;sbs.log.file.clean.log&quot; 
- *      failOnError=&quot;false&quot; 
- *      errorfile=&quot;path to error file&quot;/&gt;
- * </pre>
- * 
- * @ant.task name="coveritybuild" category="SBS"
- */
-public class SBSCoverity extends SBSTask {
-
-    private Vector<VariableSet> coverityOptions = new Vector<VariableSet>();
-    
-    /**
-     * Default constructor.
-     */
-    public SBSCoverity() {
-        super();
-        setAddMakeOptions(false);
-        getSbsCmd().setExecutable("cov-build");
-    }
-    
-    
-    protected String getSBSCmdLine() {
-
-        StringBuffer coverityCmdOptions = new StringBuffer();
-
-        String coverityConfig = "";
-        for (VariableSet coverityArg : coverityOptions) {
-            for (Entry<String, Variable> entry : coverityArg.getVariablesMap()
-                    .entrySet()) {
-                coverityConfig = coverityConfig + entry.getKey() + " "
-                        + entry.getValue().getValue() + " ";
-            }
-        }
-        coverityCmdOptions.append(coverityConfig + "sbs" + super.getSBSCmdLine());
-        return coverityCmdOptions.toString();
-
-    }
-    
-    /**
-     * @param pattern. To set the pattern to be read from error to super class.
-     */
-    protected String getErrorStreamPattern() {
-        return "ERROR";
-    }
-    
-
-    /**
-     * To read the coverity arguments for cov-build command.
-     * 
-     * @param coverityArg
-     */
-    public void addCoverityOptions(VariableSet coverityArg) {
-        if (!coverityOptions.contains(coverityArg)) {
-            coverityOptions.add(coverityArg);
-        }
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSCoverityTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,80 @@
+/*
+ * 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.sbs.ant.taskdefs;
+
+import java.util.Vector;
+
+import com.nokia.helium.core.ant.types.VariableSet;
+
+/**
+ * This task is to execute the cov-build command with the list of sbs parameters
+ * using sbsinput type. Based on the raptor input list of additional log file
+ * path used needs to be set, so that the scanlog, additional log files are
+ * generated properly.
+ * 
+ * <pre>
+ * Example 1:
+ * 
+ * &lt;coveritybuild sbsinput=&quot;sbs.input&quot; sysdefFile=&quot;system.def.file&quot;
+ *      workingDir=&quot;build.drive&quot; failOnError=&quot;false&quot; 
+ *      cleanLog=&quot;sbs.log.file.clean.log&quot; 
+ *      failOnError=&quot;false&quot; 
+ *      errorfile=&quot;path to error file&quot;/&gt;
+ * </pre>
+ * 
+ * @ant.task name="coveritybuild" category="SBS"
+ */
+public class SBSCoverityTask extends SBSTask {
+
+    private Vector<VariableSet> coverityOptions = new Vector<VariableSet>();
+    
+    /**
+     * Default constructor.
+     */
+    public SBSCoverityTask() {
+        super();
+        setAddMakeOptions(false);
+        getSbsCmd().setExecutable("cov-build");
+    }
+    
+    
+    protected String getSBSCmdLine() {
+        String coverityConfig = "";
+        for (VariableSet coverityArg : coverityOptions) {
+            coverityConfig +=  " " + coverityArg.getParameter(" ");
+        }
+        return coverityConfig + " sbs" + super.getSBSCmdLine();
+    }
+    
+    /**
+     * @param pattern. To set the pattern to be read from error to super class.
+     */
+    protected String getErrorStreamPattern() {
+        return "ERROR";
+    }
+    
+
+    /**
+     * To read the coverity arguments for cov-build command.
+     * 
+     * @param coverityArg
+     */
+    public void addCoverityOptions(VariableSet coverityArg) {
+        coverityOptions.add(coverityArg);
+    }
+
+}
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/taskdefs/SBSTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -32,7 +32,8 @@
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
-import com.nokia.helium.core.ant.types.Variable;
+
+import com.nokia.helium.core.ant.MappedVariable;
 import com.nokia.helium.core.ant.types.VariableSet;
 import com.nokia.helium.sbs.ant.types.*;
 import org.apache.log4j.Logger;
@@ -339,14 +340,20 @@
                 sbsCmd.addErrorLineHandler(sbsErrorConsumer);
             }
         } catch (java.io.FileNotFoundException ex) {
-            log.info("file path: " + errorFile + "Not valid" );
+            log("file path: " + errorFile + "Not valid" );
         }
         
         startTime = new Date();
         try {
-            log(getSbsCmd().getExecutable() + " commands: " + getSBSCmdLine());
+            String cmdLine = getSBSCmdLine();
+            if (cmdLine == null) {
+                // this happens in case there is nothing to be done, let's just run
+                // sbs anyway so the output log is generated
+                cmdLine = " --logfile " + getOutputLog().getAbsolutePath();
+            }
+            log(getSbsCmd().getExecutable() + " commands: " + cmdLine);
             if (executeCmd) {
-                sbsCmd.execute(getSBSCmdLine());
+                sbsCmd.execute(cmdLine);
             }
         } catch (SBSException sex) {
             log.debug("SBS exception occured during sbs execution", sex);
@@ -536,14 +543,14 @@
         StringBuffer cmdOptions = new StringBuffer();
         VariableSet sbsOptions = sbsInput.getFullSBSOptions();
         cmdOptions.append(" -s " + sysDefFile);
-        Collection<Variable> variableList = sbsOptions.getVariables(); 
+        Collection<MappedVariable> variableList = sbsOptions.getVariables(); 
         if (sbsOptions != null ) {
            if (variableList.isEmpty()) {
                throw new BuildException("sbsoptions cannot be empty for input: " + sbsInputName);
            }
         }
         cmdOptions.append(" --logfile " + getOutputLog().getAbsolutePath());
-        for (Variable variable : variableList) {
+        for (MappedVariable variable : variableList) {
             if (variable.getParameter().startsWith("--logfile")) {
                 this.log("The following command line argument will be ignored: " + variable.getParameter(), Project.MSG_WARN);
             } else {
@@ -559,10 +566,7 @@
                 cmdOptions.append(" -j " + ppThreads);
             }
             variableList = sbsMakeOptions.getVariables(); 
-            //if (variableList.isEmpty()) {
-            //    throw new BuildException("sbs make options cannot be empty for input: " + sbsInputName);
-            //}
-            for (Variable variable : variableList) {
+            for (MappedVariable variable : variableList) {
                 cmdOptions.append(" --mo=");
                 cmdOptions.append(variable.getParameter());
             }
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSInput.java	Wed Jun 16 16:51:40 2010 +0300
@@ -18,13 +18,14 @@
 package com.nokia.helium.sbs.ant.types;
 
 import com.nokia.helium.core.ant.types.VariableSet;
-import com.nokia.helium.core.ant.VariableIFImpl;
+import com.nokia.helium.core.ant.MappedVariable;
+import com.nokia.helium.core.ant.VariableMap;
 import java.util.Collection;
-import com.nokia.helium.core.ant.types.Variable;
 import org.apache.tools.ant.BuildException;
 import java.util.Vector;
+
+import org.apache.tools.ant.types.DataType;
 import org.apache.tools.ant.types.Reference;
-import org.apache.log4j.Logger;
 
 /**
  * Helper class to store the variable set (list of variables
@@ -37,19 +38,11 @@
  * 
  * @ant.type name="sbsinput" category="SBS"
  */
-public class SBSInput extends VariableIFImpl {
-    
-    private static Logger log = Logger.getLogger(SBSInput.class);
+public class SBSInput extends DataType implements VariableMap {
     
     private Vector<VariableSet> sbsOptions = new Vector<VariableSet>();
     private Vector<SBSMakeOptions> sbsMakeOptions = new Vector<SBSMakeOptions>();
     private Vector<SBSInput> sbsInputList = new Vector<SBSInput>();
-    
-    /**
-     * Constructor
-     */
-    public SBSInput() {
-    }    
 
     /**
      * Creates an empty variable element and adds 
@@ -235,7 +228,7 @@
         }
         if (fullList != null) {
             for (VariableSet varSet : fullList) {
-                for (Variable var : varSet.getVariables()) {
+                for (MappedVariable var : varSet.getVariables()) {
                     if (resultSet == null) {
                         resultSet = new VariableSet();
                     }
@@ -297,7 +290,7 @@
                     ppThreads = currentThread;
                     resultSet.setPPThreads(ppThreads);
                 }
-                for (Variable var : varSet.getVariables()) {
+                for (MappedVariable var : varSet.getVariables()) {
                     resultSet.add(var);
                 }
             }
@@ -309,8 +302,8 @@
      * Helper function to return the collection of variabes associated with this
      * @return collection of sbs options associatied with this sbsinput.
      */
-    public Collection<Variable> getVariables() {
-        Collection<Variable> varList = null;
+    public Collection<MappedVariable> getVariables() {
+        Collection<MappedVariable> varList = null;
         VariableSet  options = getFullSBSOptions();
         if (options != null) {
             varList = options.getVariables();
--- a/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/src/com/nokia/helium/sbs/ant/types/SBSMakeOptions.java	Wed Jun 16 16:51:40 2010 +0300
@@ -18,7 +18,6 @@
 package com.nokia.helium.sbs.ant.types;
 
 import com.nokia.helium.core.ant.types.VariableSet;
-import org.apache.log4j.Logger;
 import org.apache.tools.ant.types.Reference;
 import org.apache.tools.ant.BuildException;
 import java.util.List;
@@ -44,19 +43,11 @@
  */
 public class  SBSMakeOptions extends VariableSet {
 
-    private static Logger log = Logger.getLogger(SBSMakeOptions.class);
-
     private String engine;
 
     private String ppThreads;
 
-    
     private boolean initialized;
-    /**
-     * Constructor
-     */
-    public SBSMakeOptions() {
-    }    
 
     /**
      * Helper function called by ant to create the new sbs make options
@@ -129,7 +120,6 @@
      * input. 
      */
     private void initializeAll() {
-        Object sbsInputObject = null;
         List<VariableSet> varSets = getVariableSets();
         initialize(this);
         for (VariableSet varSet : varSets) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sbs/tests/antunit/test_ctc.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<!-- 
+============================================================================ 
+Name        : test_ctc.ant.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+
+<project name="test-sbs-ctc" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium Antlib ctc-sbs unittests.</description>
+
+    <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    <taskdef resource="com/nokia/helium/sbs/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
+    
+    <property name="build.system" value="sbs" />
+
+    <import file="sbs_default_config.ant.xml" />
+
+    <target name="test-ctc">
+        <property name="build.system" value="sbs" />
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:ctctask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
+            layerPatternSetRef="includeNoNameLayerPatternSet" workingDir="${working.dir}"
+            execute="false"/>
+        <au:assertLogContains text="-i m sbs" />
+    </target>
+    
+    <target name="test-ctc-custom-config">
+        <property name="build.system" value="sbs" />
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:ctctask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
+            layerPatternSetRef="includeNoNameLayerPatternSet" workingDir="${working.dir}"
+            execute="false">
+            <CTCOptions>
+                <arg line="-C OPT_ADD_COMPILE+-DCTC_NO_START_CTCMAN" />
+            </CTCOptions>
+        </hlm:ctctask>
+        <au:assertLogContains text="-i m  -C OPT_ADD_COMPILE+-DCTC_NO_START_CTCMAN sbs" />
+    </target>
+
+    <hlm:argSet id="ctc.extra.params">
+        <arg line="-C OPT_ADD_COMPILE+-DCTC_NO_START_CTCMAN" />
+    </hlm:argSet>
+
+    <target name="test-ctc-custom-ref-config">
+        <property name="build.system" value="sbs" />
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:ctctask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
+            layerPatternSetRef="includeNoNameLayerPatternSet" workingDir="${working.dir}"
+            execute="false">
+            <CTCOptions refid="ctc.extra.params" />
+        </hlm:ctctask>
+        <au:assertLogContains text="-i m  -C OPT_ADD_COMPILE+-DCTC_NO_START_CTCMAN sbs" />
+    </target>
+
+
+    <target name="test-ctc-custom-ref-config-instrumentType">
+        <property name="build.system" value="sbs" />
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:ctctask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
+            layerPatternSetRef="includeNoNameLayerPatternSet" workingDir="${working.dir}"
+            execute="false"
+            instrumentType="i">
+            <CTCOptions refid="ctc.extra.params" />
+        </hlm:ctctask>
+        <au:assertLogContains text="-i i  -C OPT_ADD_COMPILE+-DCTC_NO_START_CTCMAN sbs" />
+    </target>
+</project>
--- a/buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_coverity.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_coverity.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -26,7 +26,7 @@
 
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     <taskdef resource="com/nokia/helium/sbs/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef name="getVariableValue" classname="com.nokia.helium.core.ant.taskdefs.GetValueFromVariableSet"/>
+    <taskdef name="getVariableValue" classname="com.nokia.helium.core.ant.taskdefs.GetValueFromVariableSetTask"/>
     <dirname property="test.sbs.dir" file="${ant.file.test-sbs-input}"/>
     <property name="working.dir" value="${test.sbs.dir}" />
     
@@ -50,7 +50,7 @@
             workingDir="${working.dir}" execute="false">
             <hlm:coverityoptions refid="coverity.build.options"/>
         </hlm:coveritybuild>
-        <au:assertLogContains text="--auto-diff  --record-only"/>
+        <au:assertLogContains text="--auto-diff  --preprocess-first  --record-only"/>
         <au:assertLogContains text="cov-build"/>
         <au:assertLogContains text="-c armv5"/>
     </target>
@@ -82,7 +82,7 @@
             workingDir="${working.dir}" execute="false">
             <hlm:coverityoptions refid="coverity.build.options"/>
         </hlm:coveritybuild>
-        <au:assertLogContains text="--auto-diff  --record-only"/>
+        <au:assertLogContains text="--auto-diff  --preprocess-first  --record-only"/>
         <au:assertLogContains text="cov-build"/>
         <au:assertLogContains text="-c armv5"/>
     </target>
@@ -96,11 +96,29 @@
         </hlm:coveritybuild>
         <au:assertLogContains text="cov-build"/>
         <au:assertLogContains text="-c armv5"/>
-        <au:assertLogContains text="--auto-diff  --record-only"/>
+        <au:assertLogContains text="--auto-diff  --preprocess-first  --record-only"/>
         <au:assertLogDoesntContain text="-e emake"/>
         <au:assertLogDoesntContain text="--mo=--emake-annodetail=basic,history,waiting"/>
          
     </target>
 
+    <target name="test-coverity-sbs-ec-several-disable">
+        <property name="build.system" value="sbs-ec" />
+        <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
+        <hlm:coveritybuild outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="test.sysdef.xml" 
+            workingDir="${working.dir}" execute="false">
+            <hlm:coverityoptions refid="coverity.build.options"/>
+            <hlm:coverityoptions>
+                <arg name="--disable" value="foo" />
+                <arg name="--disable" value="bar" />
+            </hlm:coverityoptions>
+        </hlm:coveritybuild>
+        <au:assertLogContains text="cov-build"/>
+        <au:assertLogContains text="-c armv5"/>
+        <au:assertLogContains text="--auto-diff  --preprocess-first  --record-only"/>
+        <au:assertLogContains text="--disable foo --disable bar"/>
+        <au:assertLogDoesntContain text="-e emake"/>
+        <au:assertLogDoesntContain text="--mo=--emake-annodetail=basic,history,waiting"/>
+    </target>
 
 </project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_input.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sbs/tests/antunit/test_sbs_input.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -26,7 +26,6 @@
 
     <taskdef resource="com/nokia/helium/core/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
     <taskdef resource="com/nokia/helium/sbs/ant/antlib.xml" uri="http://www.nokia.com/helium"/>
-    <taskdef name="getVariableValue" classname="com.nokia.helium.core.ant.taskdefs.GetValueFromVariableSet"/>
     <dirname property="test.sbs.dir" file="${ant.file.test-sbs-input}"/>
     <property name="working.dir" value="${test.sbs.dir}" />
     <patternset id="includeLayerPatternSet" >
@@ -66,6 +65,10 @@
         <include name="use_no_name_layer" />
     </patternset>
 
+    <patternset id="doNotIncludeAnyExistingLayer" >
+        <include name="non_existing_layer" />
+    </patternset>
+
     <dirname property="project.dir" file="${ant.file.test-sbs-input}" />
 
     <property name="build.system" value="sbs" />
@@ -234,9 +237,9 @@
         <property name="build.system" value="sbs-ec" />
         <hlm:getsbsinputs config="inherit3" outputProperty="sbs-inputs"/>
         <echo message="sbs-inputs: ${sbs-inputs}" />
-        <getVariableValue name="-f" property="sbs.log.file">
+        <hlm:getVariableValue name="-f" property="sbs.log.file">
             <hlm:sbsinput refid="${sbs-inputs}" />
-        </getVariableValue>
+        </hlm:getVariableValue>
         <echo message="${sbs-inputs}" />
     </target>
 
@@ -258,13 +261,15 @@
         <au:assertLogContains text="-l use_no_name_layer" />
     </target>
 
-    <target name="test-ctc">
+    
+    <target name="test-include-no-layer">
         <property name="build.system" value="sbs" />
         <hlm:getsbsinputs config="pf_7952" outputProperty="sbs-inputs"/>
-        <hlm:ctctask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
-            layerPatternSetRef="includeNoNameLayerPatternSet" workingDir="${working.dir}"
+        <hlm:sbstask outputLog="tmp" sbsinput="${sbs-inputs}" sysdefFile="../data/test.sysdef.xml" 
+            layerPatternSetRef="doNotIncludeAnyExistingLayer" workingDir="${working.dir}"
             execute="false"/>
-        <au:assertLogContains text="-i m sbs" />
+        <au:assertLogContains text="--logfile" />
+        <au:assertLogContains text="Warning: No matching layers to build from system definition file, skipped" />
     </target>
 
 </project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/AddAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+/**
+ * Adding a set of files into SCM control.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *   &lt;hlm:add&gt;
+ *      &lt;fileset dir="${repo.dir}/test1"&gt;
+ *         &lt;include name="**" /&gt;
+ *         &lt;exclude name="** /.${repo.type}/**" /&gt;
+ *      &lt;/fileset&gt;
+ *   &lt;/hlm:add&gt;
+ * &lt;/hlm:scm&gt;
+ *
+ * </pre>
+ * 
+ * @ant.type name="add" category="SCM"
+ */
+public class AddAction extends BaseDirectoryScmAction {
+
+    /**
+     * {@inheritDoc}
+     * @throws ScmException 
+     */
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+
+        AddScmResult result = scmManager.add(repository, getScmFileSet());
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM add action failed.");
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/BaseDirectoryScmAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,88 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.FileSet;
+
+/**
+ * Handles configuration of directory-based SCM task commands.
+ */
+public abstract class BaseDirectoryScmAction extends ScmAction {
+    private String basedir;
+
+    /**
+     * Only one fileset is valid because all the SCM commands work on just one
+     * Sdirectory.
+     */
+    private FileSet fileSet;
+
+    /**
+     * Get the basedir.
+     * 
+     * @return the basedir attribute as a string.
+     */
+    public String getBasedir() {
+        if (fileSet != null) {
+            return fileSet.getDir(getProject()).getAbsolutePath();
+        }
+        return basedir;
+    }
+
+    /**
+     * Location of the current checkout in most of the case.
+     * 
+     * @param basedir
+     *            the directory to use on the local machine
+     * 
+     * @ant.required
+     */
+    public void setBasedir(String basedir) {
+        this.basedir = basedir;
+    }
+
+    public void addFileset(FileSet set) {
+        fileSet = set;
+    }
+
+    public ScmFileSet getScmFileSet() {
+        ArrayList<File> files = new ArrayList<File>();
+        if (fileSet == null) {
+            if (basedir == null) {
+                throw new BuildException(
+                        "Need a fileset or basedir attribute to be defined.");
+            }
+            return new ScmFileSet(new File(basedir));
+        }
+        DirectoryScanner scanner = fileSet.getDirectoryScanner(getTask()
+                .getProject());
+        String[] fileNames = scanner.getIncludedFiles();
+        for (String fileName : fileNames) {
+            log("ScmFileSet: adding " + fileName, Project.MSG_DEBUG);
+            files.add(new File(fileName));
+        }
+        ScmFileSet scmFileSet = new ScmFileSet(fileSet.getDir(), files);
+        return scmFileSet;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/BranchAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+
+/**
+ * This action will create new branch using a specific name.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *    &lt;hlm:branch baseDir="${repo.dir}/test1" name="test branch 1.0" /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="branch" category="SCM"
+ */
+public class BranchAction extends BaseDirectoryScmAction {
+
+    private String name;
+
+    /**
+     * Sets the branch name
+     * 
+     * @param name
+     * @ant.required
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void execute(ScmRepository repository) {
+
+        if (name == null)
+            throw new BuildException("'name' attribute is not defined.");
+
+        ScmManager scmManager = getTask().getScmManager();
+        BranchScmResult result;
+
+        try {
+            result = scmManager.branch(repository, getScmFileSet(), name);
+            if (!result.isSuccess()) {
+                throw new BuildException("SCM branch action error: "
+                        + result.getProviderMessage());
+            }
+            getTask().log(
+                    "Branch '" + name + "' has been created successfully.");
+        } catch (ScmException e) {
+            throw new BuildException("SCM Branch action failed: "
+                    + e.toString());
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ChangelogAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,255 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.util.Iterator;
+import java.io.*;
+import java.text.ParseException;
+
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.dom4j.DocumentException;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogSet;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+
+/**
+ * Get change log within a date range i.e startDate and endDate; 
+ * OR get change log of a number of days i.e numDays
+ * OR get change log within a range of starVersion and endVersion
+ * Parameters either startDate="20090317 18:49:31" endDate="20090318 24:49:31" datePattern="yyyyMMdd HH:mm:ss"
+ * Or numDays='1'
+ * Or startVersion="1" endVersion="2"
+ * Add logOutput="xml" to output log in xml format
+ * 
+ * <pre>
+ * &lt;hlm:scm verbose="false" scmUrl="scm:hg:${repo.dir}/changelog"&gt;
+ *     &lt;hlm:changelog basedir="${repo.dir}/changelog" startVersion="1" endVersion="2"/&gt;
+ *     &lt;hlm:changelog baseDir="${repo.dir}/changelog" numDays='1' /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="changelog" category="SCM"
+ */
+public class ChangelogAction extends BaseDirectoryScmAction {
+
+    private String startDate;
+
+    private String endDate;
+
+    private String datePattern;
+
+    private String logOutput;
+    
+    private int numDays;
+
+    private String startVersion;
+
+    private String endVersion;
+    private File xmlbom;
+
+
+    /**
+     * Start version
+     * 
+     * @ant.not-required
+     */
+    public void setStartVersion(String startVersion) {
+        this.startVersion = startVersion;
+    }
+
+    /**
+     * End version
+     * 
+     * @ant.not-required
+     */
+    public void setEndVersion(String endVersion) {
+        this.endVersion = endVersion;
+    }
+
+    /**
+     * Start date
+     * 
+     * @ant.not-required
+     */
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    /**
+     * End date
+     * 
+     * @ant.not-required
+     */
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    /**
+     * Number of days
+     * 
+     * @ant.not-required
+     */
+    public void setNumDays(int numDays) {
+        this.numDays = numDays;
+    }
+
+    /**
+     * Date pattern default is EEE MMM dd HH:mm:ss yyyy Z
+     * 
+     * @ant.not-required
+     */
+    public void setDatePattern(String datePattern) {
+        this.datePattern = datePattern;
+    }
+
+    /**
+     * Output pattern default is log output, to get xml output set logoutput=xml
+     * 
+     * @ant.not-required
+     */    
+    public void setLogOutput(String logOutput)
+    {
+        this.logOutput = logOutput;
+    }
+    
+    /**
+     * File for xml output of changeset list
+     * 
+     * @ant.not-required
+     */ 
+    public void setXmlbom(File xmlbom)
+    {
+        this.xmlbom = xmlbom;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public void execute(ScmRepository repository) throws ScmException
+    {
+        ScmManager scmManager = getTask().getScmManager();
+        ScmRevision startRevision = new ScmRevision(startVersion);
+        ScmRevision endRevision = new ScmRevision(endVersion);
+
+        ChangeLogScmResult result;
+        Date start = null;
+        Date end = null;
+
+        if (numDays == 0 && (startDate != null || endDate != null) )
+        {
+            try {
+                SimpleDateFormat format = new SimpleDateFormat(datePattern);
+                start = format.parse(startDate);
+                end = format.parse(endDate);
+            } catch (ParseException e) {
+                throw new ScmException("Date Format not supported:" + e.getMessage());
+            }
+        }
+        else 
+        {
+            start = null;
+            end = null;
+        }
+        try
+        {
+        if (startVersion == null)
+            result = scmManager.changeLog(repository, getScmFileSet(), start, end, numDays, null, datePattern);
+        else
+            result = scmManager.changeLog(repository, getScmFileSet(), startRevision, endRevision, datePattern);
+        } catch (ScmException e) {
+            throw new BuildException("Execution of SCM changelog action failed.");
+        }
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM changelog command unsuccessful.");
+        }
+        // Output changelog information
+        ChangeLogSet changelogSet = result.getChangeLog();
+        if (logOutput != null && logOutput.equals("xml"))
+        {
+            getTask().log(changelogSet.toXML());
+        }
+        else if (xmlbom != null)
+        {
+            String output = "";
+            for (Object object : changelogSet.getChangeSets())
+            {
+                String revision = "";
+                ChangeSet changeSet = (ChangeSet)object;
+                for (String line : changeSet.toString().split("\n"))
+                {
+                    if (line.contains("revision:"))
+                        revision = line.replace("revision:", "");
+                }
+                
+                output = output + "<task><id>" + revision + "</id><synopsis>" + changeSet.getComment() + "</synopsis><completed>" + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(changeSet.getDate()) + "</completed></task>";
+            }
+            String[] path = getTask().getScmUrl().split("/");
+            String xml = "<bom><build>untitled</build><content>\n";
+            String thisproject = "<project>" + "<name>" + path[path.length - 1] + "</name>" + "<baseline>" + getTask().getScmUrl() + "</baseline>" + "<database>mercurial</database>" + output + "</project>\n";
+            xml = xml + thisproject;
+            try {
+                if (xmlbom.exists())
+                {
+                    SAXReader xmlReader = new SAXReader();
+                    Document antDoc = xmlReader.read(xmlbom);
+                    for (Iterator iterator = antDoc.selectNodes("//project").iterator(); iterator.hasNext();)
+                    {
+                        boolean equal = false;
+                        Element element = (Element) iterator.next();
+                        for (Iterator iterator2 = antDoc.selectNodes("//baseline").iterator(); iterator2.hasNext();)
+                        {
+                              Element e2 = (Element) iterator2.next();
+                              if (e2.getText().equals(getTask().getScmUrl()))
+                                  equal = true;
+                        }
+                        if (!equal)
+                            xml = xml + element.asXML() + "\n";
+                    }
+                }
+                xml = xml + "</content></bom>";
+                
+                FileWriter fstream = new FileWriter(xmlbom);
+                BufferedWriter out = new BufferedWriter(fstream);
+                out.write(xml);
+                out.close();
+            } catch (DocumentException e) { e.printStackTrace(); }
+            catch (IOException e) { e.printStackTrace(); }
+        }
+        else
+        {
+            Iterator iterator = changelogSet.getChangeSets().iterator();
+            while (iterator.hasNext())
+            {
+                getTask().log(iterator.next().toString());
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckinAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,78 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+
+/**
+ * Check in a specific set of files to the repository.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
+ *    &lt;hlm:checkin message="Adding not_in_repo.txt..."&gt;
+ *        &lt;fileset dir="${repo.dir}/test1"&gt;
+ *            &lt;include name="not_in_repo.txt" /&gt;
+ *            &lt;exclude name="** /.${repo.type}/**" / &gt;
+ *        &lt;/fileset &gt;
+ *    &lt;/hlm:checkin &gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ * 
+ * @ant.type name="checkin" category="SCM"
+ */
+public class CheckinAction extends BaseDirectoryScmAction {
+    private String message;
+
+    public String getMessage() {
+        return message;
+    }
+
+    /**
+     * @param message
+     *            the message associated to the commit.
+     * @ant.required
+     */
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+
+        if (message == null)
+            throw new BuildException(
+                    "'message attribute has not been defined.'");
+
+        CheckInScmResult result;
+        try {
+            result = scmManager.checkIn(repository, getScmFileSet(), message);
+        } catch (ScmException e) {
+            throw new BuildException("SCM checkin action failed.");
+        }
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM checkin action failed.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/CheckoutAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,107 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.ScmTag;
+
+import com.nokia.helium.scm.ant.types.Tag;
+import com.nokia.helium.scm.ant.types.Revision;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Checkout the defined project. Depending on the kind of repository used this
+ * can mean for example the cloning of a repository in the case of Mercurial or the copying of 
+ * a repository in the case of SVN.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test3"&gt;
+ *     &lt;hlm:checkout baseDir="${repo.dir}/cloned" /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="checkout" category="SCM"
+ */
+public class CheckoutAction extends BaseDirectoryScmAction {
+    private List<Tag> tags = new ArrayList<Tag>();
+    private List<Revision> revisions = new ArrayList<Revision>();
+
+    public Tag createTag() {
+        Tag tag = new Tag();
+        add(tag);
+        return tag;
+    }
+
+    public void add(Tag tag) {
+        tags.add(tag);
+    }
+
+    public Revision createRevision() {
+        Revision revision = new Revision();
+        add(revision);
+        return revision;
+    }
+
+    public void add(Revision revision) {
+        revisions.add(revision);
+    }
+
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+
+        if (tags.size() > 1)
+            throw new ScmException(
+                    "You can only specify one tag nested element.");
+
+        if (revisions.size() > 1)
+            throw new ScmException(
+                    "You can only specify one revision nested element.");
+
+        if ((tags.size() == 1) && (revisions.size() == 1)) {
+            throw new ScmException(
+                    "You can not specify nested element 'revision' and 'tag' together.");
+        }
+
+        CheckOutScmResult result;
+        try {
+            if (tags.size() == 1) {
+                result = scmManager.checkOut(repository, getScmFileSet(),
+                        new ScmTag(tags.get(0).getName()));
+            } else if (revisions.size() == 1) {
+                result = scmManager.checkOut(repository, getScmFileSet(),
+                        new ScmRevision(revisions.get(0).getName()));
+            } else {
+                result = scmManager.checkOut(repository, getScmFileSet());
+            }
+        } catch (ScmException e) {
+            throw new BuildException("SCM checkout action failed: " + e);
+        }
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM checkout action failed.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/DiffAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,86 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.command.diff.DiffScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+
+/**
+ * Display the difference of the working copy with the latest copy in the
+ * configured scm url.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *    &lt;hlm:diff&gt;
+ *        &lt;fileset dir="${repo.dir}/test1"&gt;
+ *            &lt;include name="**" /&gt;
+ *            &lt;exclude name="** /.${repo.type}/**" /&gt;
+ *        &lt;/fileset&gt;
+ *    &lt;/hlm:diff&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="diff" category="SCM"
+ */
+public class DiffAction extends BaseDirectoryScmAction {
+    private String startVersion;
+    private String endVersion;
+
+    public String getStartVersion() {
+        return startVersion;
+    }
+
+    public void setStartVersion(String startVersion) {
+        this.startVersion = startVersion;
+    }
+
+    public String getEndVersion() {
+        return endVersion;
+    }
+
+    public void setEndVersion(String endVersion) {
+        this.endVersion = endVersion;
+    }
+
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+
+        ScmManager scmManager = getTask().getScmManager();
+        DiffScmResult result;
+
+        try {
+            result = scmManager.diff(repository, getScmFileSet(),
+                    new ScmRevision(startVersion), new ScmRevision(endVersion));
+        } catch (ScmException e) {
+            throw new BuildException("SCM diff action failed." + e.getMessage());
+        }
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM diff action failed."
+                    + result.getProviderMessage());
+        }
+
+        // Output diff information
+        log(result.getPatch());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ExportAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,119 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmTag;
+import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+import com.nokia.helium.scm.ant.types.Tag;
+
+/**
+ * Get a snapshot of a particular revision into a folder.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test2"&gt;
+ *    &lt;hlm:export basedir="${repo.dir}/test2" destpath="${repo.dir}/export" /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="export" category="SCM"
+ */
+public class ExportAction extends BaseDirectoryScmAction {
+
+    private File destPath;
+    private List<Tag> tags = new ArrayList<Tag>();
+
+    /**
+     * Create a tag sub-element.
+     * @return the tag element.
+     */
+    public Tag createTag() {
+        Tag tag = new Tag();
+        add(tag);
+        return tag;
+    }
+
+    /**
+     * Add a tag.
+     * @param tag
+     */
+    public void add(Tag tag) {
+        tags.add(tag);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+
+        if (getDestPath() == null)
+            throw new ScmException("destPath attribute has not been provided.");
+
+        if (tags.size() > 1)
+            throw new ScmException(
+                    "You can only specify one tag nested element.");
+
+        ExportScmResult result;
+        try {
+            if (tags.size() == 0) {
+                getTask().log(
+                        "Exporting " + getScmFileSet().getBasedir() + " under "
+                                + getDestPath().getAbsolutePath() + ".");
+                result = scmManager.export(repository, getScmFileSet(),
+                        getDestPath().getAbsolutePath());
+            } else {
+                String tagName = tags.get(0).getName();
+                getTask().log(
+                        "Exporting revision " + tagName + " of "
+                                + getScmFileSet().getBasedir() + " under "
+                                + getDestPath().getAbsolutePath() + ".");
+                result = scmManager.export(repository, getScmFileSet(),
+                        new ScmTag(tagName), getDestPath().getAbsolutePath());
+            }
+        } catch (ScmException e) {
+            throw new BuildException("SCM export action failed: " + e);
+        }
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM export action failed: "
+                    + result.getProviderMessage());
+        }
+        // Dump created files.
+        for (Object file : result.getExportedFiles().toArray()) {
+            getTask().log(file.toString());
+        }
+    }
+
+    public File getDestPath() {
+        return destPath;
+    }
+
+    public void setDestPath(File destPath) {
+        this.destPath = destPath;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/InfoAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,64 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+import com.nokia.maven.scm.command.info.InfoScmResult;
+import com.nokia.maven.scm.manager.ExtendedScmManager;
+
+/**
+ * This action will display the global revision id for the repository.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *    &lt;hlm:checkout baseDir="${repo.dir}/info" /&gt;
+ *    &lt;hlm:info baseDir="${repo.dir}/info"/&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="info" category="SCM"
+ */ 
+public class InfoAction extends BaseDirectoryScmAction {
+
+    
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        InfoScmResult result;
+        try {
+            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
+                    .getScmManager();
+            result = scmManager.info(repository, new File(this.getBasedir()));
+            
+            if (!result.isSuccess()) {
+                throw new BuildException("SCM tags action error: "
+                        + result.getProviderMessage());
+            }
+            getTask().log(result.getRevision());
+            
+        } catch (ScmException e) {
+            throw new BuildException("SCM info action failed: "
+                    + e.getMessage());
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/InitAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+
+import com.nokia.maven.scm.provider.ScmProviderExt;
+
+/**
+ * Create a new repository. In the following example the new_repo mercurial repository 
+ * will be created under /some/path/. E.g:
+ * 
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:hg:/some/path/new_repo"&gt;
+ *     &lt;hlm:checkout baseDir="scm:hg:/some/path/new_repo" /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ * 
+ * @ant.type name="init" category="SCM"
+ */
+public class InitAction extends BaseDirectoryScmAction {
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+        ScmProvider provider = scmManager.getProviderByUrl(getTask().getScmUrl());
+
+        getTask().log("InitAction: " + repository);
+        ScmProviderExt providerExt = (ScmProviderExt) provider;
+        providerExt.init(repository);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/PullAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+import com.nokia.maven.scm.command.pull.PullScmResult;
+import com.nokia.maven.scm.manager.ExtendedScmManager;
+
+/**
+ * Retrieve a set of changes from a remote database. This action is only
+ * supported in distributed SCM such as Mercurial or Git.
+ * 
+ * @ant.type name="pull" category="SCM"
+ */
+public class PullAction extends BaseDirectoryScmAction {
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        PullScmResult result;
+        try {
+            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
+                    .getScmManager();
+            result = scmManager.pull(repository, new File(this.getBasedir()));
+            if (!result.isSuccess()) {
+                throw new BuildException("SCM pull action error: "
+                        + result.getProviderMessage());
+            }
+        } catch (ScmException e) {
+            throw new BuildException("SCM pull action failed: "
+                    + e.getMessage());
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/RemoveAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,77 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.remove.RemoveScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+
+/**
+ * Remove a set of file(s) from SCM control.
+ * 
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *    &lt;hlm:remove message="Nothing to remove..."&gt;
+ *        &lt;fileset dir="${repo.dir}/test1"&gt;
+ *            &lt;include name="not_in_repo.txt" /&gt;
+ *        &lt;/fileset&gt;
+ *    &lt;/hlm:remove&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="remove" category="SCM"
+ */
+public class RemoveAction extends BaseDirectoryScmAction {
+    private String message;
+
+    public String getMessage() {
+        return message;
+    }
+
+    /**
+     * @param message
+     *            the message associated to the change
+     * @ant.required
+     */
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        if (message == null)
+            throw new BuildException("message attribute has not been defined.");
+        // if (getBasedir() == null)
+        // throw new BuildException("basedir attribute has not been defined.");
+
+        ScmManager scmManager = getTask().getScmManager();
+        RemoveScmResult result;
+        try {
+            result = scmManager.remove(repository, getScmFileSet(), message);
+        } catch (ScmException e) {
+            throw new BuildException("SCM remove action failed: " + e);
+        }
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM remove action failed.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ScmAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,71 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.ProjectComponent;
+
+import com.nokia.helium.scm.ant.taskdefs.ScmTask;
+
+/**
+ * Abstract class which implements common setting between
+ * ScmAction implementations.
+ * 
+ * Any implementing action must implement the execute method as
+ * a execution of the action. The owning task should be used
+ * to log message to the user.  
+ */
+public abstract class ScmAction extends ProjectComponent {
+    private ScmTask scmtask;
+
+    /**
+     * @return the task
+     */
+    public ScmTask getTask() {
+        return scmtask;
+    }
+
+    /**
+     * @param task
+     *            the task to set
+     */
+    public void setTask(ScmTask task) {
+        this.scmtask = task;
+    }
+
+    /**
+     * Get the action name based on the classname.
+     * @return the lowercase class name. 
+     */
+    public String getName() {
+        String className = getClass().getName();
+        String commandName = className
+                .substring(className.lastIndexOf('.') + 1).toLowerCase();
+        return commandName;
+    }
+
+    /**
+     * This method needs to be implemented by your subclass.
+     * It is executed during the Task execute to achieve
+     * the relevant action.
+     * @param repository
+     * @throws ScmException
+     */
+    public abstract void execute(ScmRepository repository) throws ScmException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/StatusAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * 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.scm.ant.actions;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+
+/**
+ * Status will execute status action on the relevant repository, and reports
+ * basedir, or a specific set of file status.
+ *
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *    &lt;hlm:status&gt;
+ *       &lt;fileset dir="${repo.dir}/test1"&gt;
+ *          &lt;include name="**" /&gt;
+ *          &lt;exclude name="** /.${repo.type}/**" /&gt;
+ *       &lt;/fileset&gt;
+ *    &lt;/hlm:status&gt;
+ * &lt;/hlm:scm &gt;
+ * </pre>
+ * 
+ * @ant.type name="status" category="SCM"
+ */
+public class StatusAction extends BaseDirectoryScmAction {
+
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+
+        StatusScmResult result = scmManager.status(repository, getScmFileSet());
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM status action failed: "
+                    + result.getProviderMessage());
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/TagAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,98 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+import com.nokia.maven.scm.manager.ExtendedScmManager;
+
+/**
+ * This action will tag current repository revision using a specific name.
+ * 
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *     &lt;hlm:tag baseDir="${repo.dir}/test1" name="0.0.1" /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="tag" category="SCM"
+ */
+public class TagAction extends BaseDirectoryScmAction {
+    private String name;
+    private String level = "normal";
+
+    /**
+     * String that will be used to tag the current revision.
+     * 
+     * @param name
+     *            Name of the tag
+     * @ant.required
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * String that will be used to determine tag types, eg. local.
+     * 
+     * @param level
+     *            Level of the tag eg.local
+     * @ant.not-required
+     */
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        TagScmResult result;
+
+        if (name == null)
+            throw new BuildException("'name' attribute is not defined.");
+
+        if (getBasedir() == null)
+            throw new BuildException("'basedir' attribute is not defined.");
+
+        try {
+            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
+                    .getScmManager();
+            if (level.equals(new String("local"))) {
+                result = scmManager.tag(repository, new ScmFileSet(new File(
+                        getBasedir())), name, level);
+            } else {
+                result = scmManager.tag(repository, new ScmFileSet(new File(
+                        getBasedir())), name);
+            }
+
+            if (!result.isSuccess()) {
+                throw new BuildException("SCM tag action error: "
+                        + result.getProviderMessage());
+            }
+            getTask().log("Tag '" + name + "' has been created successfully.");
+        } catch (ScmException e) {
+            throw new BuildException("SCM tag action failed: " + e.toString());
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/TagsAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,92 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmTag;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+
+import com.nokia.helium.scm.ant.types.TagSet;
+import com.nokia.maven.scm.command.tags.TagsScmResult;
+import com.nokia.maven.scm.manager.ExtendedScmManager;
+
+/**
+ * This action will tag current repository revision using a specific name.
+ * 
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *     &lt;hlm:tags baseDir="${repo.dir}/test1" reference="my.tags" /&gt;
+ * &lt;/hlm:scm&gt;
+ * </pre>
+ *
+ * @ant.type name="tags" category="SCM"
+ */
+public class TagsAction extends BaseDirectoryScmAction {
+
+    private String reference;
+
+    /**
+     * Defines the id of the result type generated by the query.
+     * @param reference the name of the reference to use.
+     * @ant.not-required Only log result by default.
+     */
+    public void setReference(String reference) {
+        this.reference = reference;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void execute(ScmRepository repository) throws ScmException {
+        TagsScmResult result;
+        try {
+            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
+                    .getScmManager();
+            result = scmManager.tags(repository, new File(this.getBasedir()));
+            if (!result.isSuccess()) {
+                throw new BuildException("SCM tags action error: "
+                        + result.getProviderMessage());
+            }
+
+            // Creating a TagSet
+            List<ScmTag> tags = result.getTags();
+            TagSet tagSet = new TagSet();
+            tagSet.setProject(getProject());
+            getTask().log("Tag list:");
+            for (ScmTag tag : tags) {
+                tagSet.createTag().setName(tag.getName());
+                getTask().log(" * " + tag.getName());
+            }
+            // Creating new reference
+            if (reference != null) {
+                getTask().log("Creating reference: " + reference);
+                getProject().addReference(reference, tagSet);
+            }
+
+        } catch (ScmException e) {
+            throw new BuildException("SCM tags action failed: "
+                    + e.getMessage());
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/UpdateAction.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,96 @@
+/*
+ * 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.scm.ant.actions;
+
+import java.util.List;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmTag;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.tools.ant.BuildException;
+import org.apache.maven.scm.ScmRevision;
+
+import com.nokia.helium.scm.ant.types.Tag;
+import com.nokia.helium.scm.ant.types.Revision;
+
+/**
+ * Update the defined project for a specific revision or tag.
+ * 
+ * <pre>
+ * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
+ *     &lt;hlm:update basedir="${repo.dir}/test1" /&gt;
+ * &lt;/hlm:scm&gt;
+ *</pre>
+ *
+ * @ant.type name="update" category="SCM"
+ */
+public class UpdateAction extends BaseDirectoryScmAction {
+
+    private Tag tag;
+    private Revision revision;
+
+    public void add(Tag tag) {
+        this.tag = tag;
+    }
+
+    public Tag createTag() {
+        this.tag = new Tag();
+        return this.tag;
+    }
+
+    public void add(Revision revision) {
+        this.revision = revision;
+    }
+
+    public Revision createRevision() {
+        this.revision = new Revision();
+        return this.revision;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void execute(ScmRepository repository) throws ScmException {
+        ScmManager scmManager = getTask().getScmManager();
+
+        UpdateScmResult result;
+        if (tag != null) {
+            result = scmManager.update(repository, getScmFileSet(),
+                    new ScmTag(tag.getName()));
+        } else if (revision != null) {
+            result = scmManager.update(repository, getScmFileSet(),
+                    new ScmRevision(revision.getName()));
+        } else {
+            result = scmManager.update(repository, getScmFileSet());
+        }
+
+        if (!result.isSuccess()) {
+            throw new BuildException("SCM update action error: "
+                    + result.getProviderMessage());
+        }
+
+        List<ScmFile> files = result.getUpdatedFiles();
+        for (ScmFile scmFile : files) {
+            getTask().log(scmFile.toString());
+        }
+
+    }
+
+}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/AddAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.command.add.AddScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Adding a set of files into SCM control.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *   &lt;hlm:add&gt;
- *      &lt;fileset dir="${repo.dir}/test1"&gt;
- *         &lt;include name="**" /&gt;
- *         &lt;exclude name="** /.${repo.type}/**" /&gt;
- *      &lt;/fileset&gt;
- *   &lt;/hlm:add&gt;
- * &lt;/hlm:scm&gt;
- *
- * </pre>
- * 
- * @ant.type name="add" category="SCM"
- */
-public class AddAction extends BaseDirectoryScmAction {
-
-    /**
-     * {@inheritDoc}
-     * @throws ScmException 
-     */
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-
-        AddScmResult result = scmManager.add(repository, getScmFileSet());
-
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM add action failed.");
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/BaseDirectoryScmAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.io.File;
-import java.util.ArrayList;
-
-import org.apache.maven.scm.ScmFileSet;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * Handles configuration of directory-based SCM task commands.
- */
-public abstract class BaseDirectoryScmAction extends ScmAction {
-    private String basedir;
-
-    /**
-     * Only one fileset is valid because all the SCM commands work on just one
-     * Sdirectory.
-     */
-    private FileSet fileSet;
-
-    /**
-     * Get the basedir.
-     * 
-     * @return the basedir attribute as a string.
-     */
-    public String getBasedir() {
-        if (fileSet != null) {
-            return fileSet.getDir(getProject()).getAbsolutePath();
-        }
-        return basedir;
-    }
-
-    /**
-     * Location of the current checkout in most of the case.
-     * 
-     * @param basedir
-     *            the directory to use on the local machine
-     * 
-     * @ant.required
-     */
-    public void setBasedir(String basedir) {
-        this.basedir = basedir;
-    }
-
-    public void addFileset(FileSet set) {
-        fileSet = set;
-    }
-
-    public ScmFileSet getScmFileSet() {
-        ArrayList<File> files = new ArrayList<File>();
-        if (fileSet == null) {
-            if (basedir == null) {
-                throw new BuildException(
-                        "Need a fileset or basedir attribute to be defined.");
-            }
-            return new ScmFileSet(new File(basedir));
-        }
-        DirectoryScanner scanner = fileSet.getDirectoryScanner(getTask()
-                .getProject());
-        String[] fileNames = scanner.getIncludedFiles();
-        for (String fileName : fileNames) {
-            log("ScmFileSet: adding " + fileName, Project.MSG_DEBUG);
-            files.add(new File(fileName));
-        }
-        ScmFileSet scmFileSet = new ScmFileSet(fileSet.getDir(), files);
-        return scmFileSet;
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/BranchAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.command.branch.BranchScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * This action will create new branch using a specific name.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *    &lt;hlm:branch baseDir="${repo.dir}/test1" name="test branch 1.0" /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="branch" category="SCM"
- */
-public class BranchAction extends BaseDirectoryScmAction {
-
-    private String name;
-
-    /**
-     * Sets the branch name
-     * 
-     * @param name
-     * @ant.required
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void execute(ScmRepository repository) {
-
-        if (name == null)
-            throw new BuildException("'name' attribute is not defined.");
-
-        ScmManager scmManager = getTask().getScmManager();
-        BranchScmResult result;
-
-        try {
-            result = scmManager.branch(repository, getScmFileSet(), name);
-            if (!result.isSuccess()) {
-                throw new BuildException("SCM branch action error: "
-                        + result.getProviderMessage());
-            }
-            getTask().log(
-                    "Branch '" + name + "' has been created successfully.");
-        } catch (ScmException e) {
-            throw new BuildException("SCM Branch action failed: "
-                    + e.toString());
-        }
-
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ChangelogAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,256 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.util.Iterator;
-import java.io.*;
-import java.io.IOException;
-import java.text.ParseException;
-
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.dom4j.DocumentException;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmRevision;
-import org.apache.maven.scm.ChangeSet;
-import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
-import org.apache.maven.scm.command.changelog.ChangeLogSet;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Get change log within a date range i.e startDate and endDate; 
- * OR get change log of a number of days i.e numDays
- * OR get change log within a range of starVersion and endVersion
- * Parameters either startDate="20090317 18:49:31" endDate="20090318 24:49:31" datePattern="yyyyMMdd HH:mm:ss"
- * Or numDays='1'
- * Or startVersion="1" endVersion="2"
- * Add logOutput="xml" to output log in xml format
- * 
- * <pre>
- * &lt;hlm:scm verbose="false" scmUrl="scm:hg:${repo.dir}/changelog"&gt;
- *     &lt;hlm:changelog basedir="${repo.dir}/changelog" startVersion="1" endVersion="2"/&gt;
- *     &lt;hlm:changelog baseDir="${repo.dir}/changelog" numDays='1' /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="changelog" category="SCM"
- */
-public class ChangelogAction extends BaseDirectoryScmAction {
-
-    private String startDate;
-
-    private String endDate;
-
-    private String datePattern;
-
-    private String logOutput;
-    
-    private int numDays;
-
-    private String startVersion;
-
-    private String endVersion;
-    private File xmlbom;
-
-
-    /**
-     * Start version
-     * 
-     * @ant.not-required
-     */
-    public void setStartVersion(String startVersion) {
-        this.startVersion = startVersion;
-    }
-
-    /**
-     * End version
-     * 
-     * @ant.not-required
-     */
-    public void setEndVersion(String endVersion) {
-        this.endVersion = endVersion;
-    }
-
-    /**
-     * Start date
-     * 
-     * @ant.not-required
-     */
-    public void setStartDate(String startDate) {
-        this.startDate = startDate;
-    }
-
-    /**
-     * End date
-     * 
-     * @ant.not-required
-     */
-    public void setEndDate(String endDate) {
-        this.endDate = endDate;
-    }
-
-    /**
-     * Number of days
-     * 
-     * @ant.not-required
-     */
-    public void setNumDays(int numDays) {
-        this.numDays = numDays;
-    }
-
-    /**
-     * Date pattern default is EEE MMM dd HH:mm:ss yyyy Z
-     * 
-     * @ant.not-required
-     */
-    public void setDatePattern(String datePattern) {
-        this.datePattern = datePattern;
-    }
-
-    /**
-     * Output pattern default is log output, to get xml output set logoutput=xml
-     * 
-     * @ant.not-required
-     */    
-    public void setLogOutput(String logOutput)
-    {
-        this.logOutput = logOutput;
-    }
-    
-    /**
-     * File for xml output of changeset list
-     * 
-     * @ant.not-required
-     */ 
-    public void setXmlbom(File xmlbom)
-    {
-        this.xmlbom = xmlbom;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    @Override
-    public void execute(ScmRepository repository) throws ScmException
-    {
-        ScmManager scmManager = getTask().getScmManager();
-        ScmRevision startRevision = new ScmRevision(startVersion);
-        ScmRevision endRevision = new ScmRevision(endVersion);
-
-        ChangeLogScmResult result;
-        Date start = null;
-        Date end = null;
-
-        if (numDays == 0 && (startDate != null || endDate != null) )
-        {
-            try {
-                SimpleDateFormat format = new SimpleDateFormat(datePattern);
-                start = format.parse(startDate);
-                end = format.parse(endDate);
-             } catch (ParseException e) {
-                 throw new ScmException("Date Format not supported:" + e.getMessage());
-             }
-         }
-         else 
-         {
-             start = null;
-             end = null;
-         }
-        try
-        {
-        if (startVersion == null)
-            result = scmManager.changeLog(repository, getScmFileSet(), start, end, numDays, null, datePattern);
-        else
-            result = scmManager.changeLog(repository, getScmFileSet(), startRevision, endRevision, datePattern);
-        } catch (ScmException e) {
-            throw new BuildException(
-                    "Execution of SCM changelog action failed.");
-        }
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM changelog command unsuccessful.");
-        }
-        // Output changelog information
-        ChangeLogSet changelogSet = result.getChangeLog();
-        if (logOutput != null && logOutput.equals("xml"))
-        {
-            getTask().log(changelogSet.toXML());
-        }
-        else if (xmlbom != null)
-        {
-            String output = "";
-            for (Object o : changelogSet.getChangeSets())
-            {
-                String revision = "";
-                ChangeSet c = (ChangeSet)o;
-                for (String x : c.toString().split("\n"))
-                {
-                    if (x.contains("revision:"))
-                        revision = x.replace("revision:", "");
-                }
-                
-                output = output + "<task><id>" + revision + "</id><synopsis>" + c.getComment() + "</synopsis><completed>" + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(c.getDate()) + "</completed></task>";
-            }
-            String[] path = getTask().getScmUrl().split("/");
-            String xml = "<bom><build>untitled</build><content>\n";
-            String thisproject = "<project>" + "<name>" + path[path.length - 1] + "</name>" + "<baseline>" + getTask().getScmUrl() + "</baseline>" + "<database>mercurial</database>" + output + "</project>\n";
-            xml = xml + thisproject;
-            try {
-                if (xmlbom.exists())
-                {
-                    SAXReader xmlReader = new SAXReader();
-                    Document antDoc = xmlReader.read(xmlbom);
-                    for (Iterator iterator = antDoc.selectNodes("//project").iterator(); iterator.hasNext();)
-                    {
-                        boolean equal = false;
-                        Element e = (Element) iterator.next();
-                        for (Iterator iterator2 = antDoc.selectNodes("//baseline").iterator(); iterator2.hasNext();)
-                        {
-                              Element e2 = (Element) iterator2.next();
-                              if (e2.getText().equals(getTask().getScmUrl()))
-                                  equal = true;
-                        }
-                        if (!equal)
-                            xml = xml + e.asXML() + "\n";
-                    }
-                }
-                xml = xml + "</content></bom>";
-                
-                FileWriter fstream = new FileWriter(xmlbom);
-                BufferedWriter out = new BufferedWriter(fstream);
-                out.write(xml);
-                out.close();
-            } catch (DocumentException e) { e.printStackTrace(); }
-            catch (IOException e) { e.printStackTrace(); }
-        }
-        else
-        {
-            Iterator iterator = changelogSet.getChangeSets().iterator();
-            while (iterator.hasNext())
-            {
-                getTask().log(iterator.next().toString());
-            }
-        }
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/CheckinAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.command.checkin.CheckInScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Check in a specific set of files to the repository.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1">
- *    &lt;hlm:checkin message="Adding not_in_repo.txt..."&gt;
- *        &lt;fileset dir="${repo.dir}/test1"&gt;
- *            &lt;include name="not_in_repo.txt" /&gt;
- *            &lt;exclude name="** /.${repo.type}/**" / &gt;
- *        &lt;/fileset &gt;
- *    &lt;/hlm:checkin &gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- * 
- * @ant.type name="checkin" category="SCM"
- */
-public class CheckinAction extends BaseDirectoryScmAction {
-    private String message;
-
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * @param message
-     *            the message associated to the commit.
-     * @ant.required
-     */
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-
-        if (message == null)
-            throw new BuildException(
-                    "'message attribute has not been defined.'");
-
-        CheckInScmResult result;
-        try {
-            result = scmManager.checkIn(repository, getScmFileSet(), message);
-        } catch (ScmException e) {
-            throw new BuildException("SCM checkin action failed.");
-        }
-
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM checkin action failed.");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/CheckoutAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.command.checkout.CheckOutScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-import org.apache.maven.scm.ScmRevision;
-import org.apache.maven.scm.ScmTag;
-
-import com.nokia.helium.scm.ant.types.Tag;
-import com.nokia.helium.scm.ant.types.Revision;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Checkout the defined project. Depending on the kind of repository used this
- * can mean for example the cloning of a repository in the case of Mercurial or the copying of 
- * a repository in the case of SVN.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test3"&gt;
- *     &lt;hlm:checkout baseDir="${repo.dir}/cloned" /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="checkout" category="SCM"
- */
-public class CheckoutAction extends BaseDirectoryScmAction {
-    private List<Tag> tags = new ArrayList<Tag>();
-    private List<Revision> revisions = new ArrayList<Revision>();
-
-    public Tag createTag() {
-        Tag tag = new Tag();
-        add(tag);
-        return tag;
-    }
-
-    public void add(Tag tag) {
-        tags.add(tag);
-    }
-
-    public Revision createRevision() {
-        Revision revision = new Revision();
-        add(revision);
-        return revision;
-    }
-
-    public void add(Revision revision) {
-        revisions.add(revision);
-    }
-
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-
-        if (tags.size() > 1)
-            throw new ScmException(
-                    "You can only specify one tag nested element.");
-
-        if (revisions.size() > 1)
-            throw new ScmException(
-                    "You can only specify one revision nested element.");
-
-        if ((tags.size() == 1) && (revisions.size() == 1)) {
-            throw new ScmException(
-                    "You can not specify nested element 'revision' and 'tag' together.");
-        }
-
-        CheckOutScmResult result;
-        try {
-            if (tags.size() == 1) {
-                result = scmManager.checkOut(repository, getScmFileSet(),
-                        new ScmTag(tags.get(0).getName()));
-            } else if (revisions.size() == 1) {
-                result = scmManager.checkOut(repository, getScmFileSet(),
-                        new ScmRevision(revisions.get(0).getName()));
-            } else {
-                result = scmManager.checkOut(repository, getScmFileSet());
-            }
-        } catch (ScmException e) {
-            throw new BuildException("SCM checkout action failed: " + e);
-        }
-
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM checkout action failed.");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/DiffAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmRevision;
-import org.apache.maven.scm.command.diff.DiffScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Display the difference of the working copy with the latest copy in the
- * configured scm url.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *    &lt;hlm:diff&gt;
- *        &lt;fileset dir="${repo.dir}/test1"&gt;
- *            &lt;include name="**" /&gt;
- *            &lt;exclude name="** /.${repo.type}/**" /&gt;
- *        &lt;/fileset&gt;
- *    &lt;/hlm:diff&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="diff" category="SCM"
- */
-public class DiffAction extends BaseDirectoryScmAction {
-    private String startVersion;
-    private String endVersion;
-
-    public String getStartVersion() {
-        return startVersion;
-    }
-
-    public void setStartVersion(String startVersion) {
-        this.startVersion = startVersion;
-    }
-
-    public String getEndVersion() {
-        return endVersion;
-    }
-
-    public void setEndVersion(String endVersion) {
-        this.endVersion = endVersion;
-    }
-
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-
-        ScmManager scmManager = getTask().getScmManager();
-        DiffScmResult result;
-
-        try {
-            result = scmManager.diff(repository, getScmFileSet(),
-                    new ScmRevision(startVersion), new ScmRevision(endVersion));
-        } catch (ScmException e) {
-            throw new BuildException("SCM diff action failed." + e.getMessage());
-        }
-
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM diff action failed."
-                    + result.getProviderMessage());
-        }
-
-        // Output diff information
-        log(result.getPatch());
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ExportAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmTag;
-import org.apache.maven.scm.command.export.ExportScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-import com.nokia.helium.scm.ant.types.Tag;
-
-/**
- * Get a snapshot of a particular revision into a folder.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test2"&gt;
- *    &lt;hlm:export basedir="${repo.dir}/test2" destpath="${repo.dir}/export" /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="export" category="SCM"
- */
-public class ExportAction extends BaseDirectoryScmAction {
-
-    private File destPath;
-    private List<Tag> tags = new ArrayList<Tag>();
-
-    /**
-     * Create a tag sub-element.
-     * @return the tag element.
-     */
-    public Tag createTag() {
-        Tag tag = new Tag();
-        add(tag);
-        return tag;
-    }
-
-    /**
-     * Add a tag.
-     * @param tag
-     */
-    public void add(Tag tag) {
-        tags.add(tag);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-
-        if (getDestPath() == null)
-            throw new ScmException("destPath attribute has not been provided.");
-
-        if (tags.size() > 1)
-            throw new ScmException(
-                    "You can only specify one tag nested element.");
-
-        ExportScmResult result;
-        try {
-            if (tags.size() == 0) {
-                getTask().log(
-                        "Exporting " + getScmFileSet().getBasedir() + " under "
-                                + getDestPath().getAbsolutePath() + ".");
-                result = scmManager.export(repository, getScmFileSet(),
-                        getDestPath().getAbsolutePath());
-            } else {
-                String t = tags.get(0).getName();
-                getTask().log(
-                        "Exporting revision " + t + " of "
-                                + getScmFileSet().getBasedir() + " under "
-                                + getDestPath().getAbsolutePath() + ".");
-                result = scmManager.export(repository, getScmFileSet(),
-                        new ScmTag(t), getDestPath().getAbsolutePath());
-            }
-        } catch (ScmException e) {
-            throw new BuildException("SCM export action failed: " + e);
-        }
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM export action failed: "
-                    + result.getProviderMessage());
-        }
-        // Dump created files.
-        for (Object file : result.getExportedFiles().toArray()) {
-            getTask().log(file.toString());
-        }
-    }
-
-    public File getDestPath() {
-        return destPath;
-    }
-
-    public void setDestPath(File destPath) {
-        this.destPath = destPath;
-    }
-
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/InfoAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-import com.nokia.maven.scm.command.info.InfoScmResult;
-import com.nokia.maven.scm.manager.ExtendedScmManager;
-
-/**
- * This action will display the global revision id for the repository.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *    &lt;hlm:checkout baseDir="${repo.dir}/info" /&gt;
- *    &lt;hlm:info baseDir="${repo.dir}/info"/&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="info" category="SCM"
- */ 
-public class InfoAction extends BaseDirectoryScmAction {
-
-    
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        InfoScmResult result;
-        try {
-            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
-                    .getScmManager();
-            result = scmManager.info(repository, new File(this.getBasedir()));
-            
-            if (!result.isSuccess()) {
-                throw new BuildException("SCM tags action error: "
-                        + result.getProviderMessage());
-            }
-            getTask().log(result.getRevision());
-            
-        } catch (ScmException e) {
-            throw new BuildException("SCM info action failed: "
-                    + e.getMessage());
-        }
-
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/InitAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.provider.ScmProvider;
-import org.apache.maven.scm.repository.ScmRepository;
-
-import com.nokia.maven.scm.provider.ScmProviderExt;
-
-/**
- * Create a new repository. In the following example the new_repo mercurial repository 
- * will be created under /some/path/. E.g:
- * 
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:hg:/some/path/new_repo"&gt;
- *     &lt;hlm:checkout baseDir="scm:hg:/some/path/new_repo" /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- * 
- * @ant.type name="init" category="SCM"
- */
-public class InitAction extends BaseDirectoryScmAction {
-    
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-        ScmProvider provider = scmManager.getProviderByUrl(getTask().getScmUrl());
-
-        getTask().log("InitAction: " + repository);
-        ScmProviderExt providerExt = (ScmProviderExt) provider;
-        providerExt.init(repository);
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/PullAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-import com.nokia.maven.scm.command.pull.PullScmResult;
-import com.nokia.maven.scm.manager.ExtendedScmManager;
-
-/**
- * Retrieve a set of changes from a remote database. This action is only
- * supported in distributed SCM such as Mercurial or Git.
- * 
- * @ant.type name="pull" category="SCM"
- */
-public class PullAction extends BaseDirectoryScmAction {
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        PullScmResult result;
-        try {
-            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
-                    .getScmManager();
-            result = scmManager.pull(repository, new File(this.getBasedir()));
-            if (!result.isSuccess()) {
-                throw new BuildException("SCM pull action error: "
-                        + result.getProviderMessage());
-            }
-        } catch (ScmException e) {
-            throw new BuildException("SCM pull action failed: "
-                    + e.getMessage());
-        }
-
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/RemoveAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.command.remove.RemoveScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Remove a set of file(s) from SCM control.
- * 
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *    &lt;hlm:remove message="Nothing to remove..."&gt;
- *        &lt;fileset dir="${repo.dir}/test1"&gt;
- *            &lt;include name="not_in_repo.txt" /&gt;
- *        &lt;/fileset&gt;
- *    &lt;/hlm:remove&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="remove" category="SCM"
- */
-public class RemoveAction extends BaseDirectoryScmAction {
-    private String message;
-
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * @param message
-     *            the message associated to the change
-     * @ant.required
-     */
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        if (message == null)
-            throw new BuildException("message attribute has not been defined.");
-        // if (getBasedir() == null)
-        // throw new BuildException("basedir attribute has not been defined.");
-
-        ScmManager scmManager = getTask().getScmManager();
-        RemoveScmResult result;
-        try {
-            result = scmManager.remove(repository, getScmFileSet(), message);
-        } catch (ScmException e) {
-            throw new BuildException("SCM remove action failed: " + e);
-        }
-
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM remove action failed.");
-        }
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Abstract class which implements common setting between
- * ScmAction implementations.
- * 
- * Any implementing action must implement the execute method as
- * a execution of the action. The owning task should be used
- * to log message to the user.  
- */
-public abstract class ScmAction extends ProjectComponent {
-    private ScmTask scmtask;
-
-    /**
-     * @return the task
-     */
-    public ScmTask getTask() {
-        return scmtask;
-    }
-
-    /**
-     * @param task
-     *            the task to set
-     */
-    public void setTask(ScmTask task) {
-        this.scmtask = task;
-    }
-
-    /**
-     * Get the action name based on the classname.
-     * @return the lowercase class name. 
-     */
-    public String getName() {
-        String className = getClass().getName();
-        String commandName = className
-                .substring(className.lastIndexOf('.') + 1).toLowerCase();
-        return commandName;
-    }
-
-    /**
-     * This method needs to be implemented by your subclass.
-     * It is executed during the Task execute to achieve
-     * the relevant action.
-     * @param repository
-     * @throws ScmException
-     */
-    public abstract void execute(ScmRepository repository) throws ScmException;
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/ScmTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -27,6 +27,22 @@
 import org.apache.tools.ant.Task;
 import org.apache.maven.scm.ScmException;
 
+import com.nokia.helium.scm.ant.actions.AddAction;
+import com.nokia.helium.scm.ant.actions.BranchAction;
+import com.nokia.helium.scm.ant.actions.ChangelogAction;
+import com.nokia.helium.scm.ant.actions.CheckinAction;
+import com.nokia.helium.scm.ant.actions.CheckoutAction;
+import com.nokia.helium.scm.ant.actions.DiffAction;
+import com.nokia.helium.scm.ant.actions.ExportAction;
+import com.nokia.helium.scm.ant.actions.InfoAction;
+import com.nokia.helium.scm.ant.actions.InitAction;
+import com.nokia.helium.scm.ant.actions.PullAction;
+import com.nokia.helium.scm.ant.actions.RemoveAction;
+import com.nokia.helium.scm.ant.actions.ScmAction;
+import com.nokia.helium.scm.ant.actions.StatusAction;
+import com.nokia.helium.scm.ant.actions.TagAction;
+import com.nokia.helium.scm.ant.actions.TagsAction;
+import com.nokia.helium.scm.ant.actions.UpdateAction;
 import com.nokia.maven.scm.manager.BasicExtendedScmManager;
 import com.nokia.maven.scm.manager.ExtendedScmManager;
 import com.nokia.maven.scm.provider.hg.HgScmProviderExt;
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/StatusAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.command.status.StatusScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Status will execute status action on the relevant repository, and reports
- * basedir, or a specific set of file status.
- *
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *    &lt;hlm:status&gt;
- *       &lt;fileset dir="${repo.dir}/test1"&gt;
- *          &lt;include name="**" /&gt;
- *          &lt;exclude name="** /.${repo.type}/**" /&gt;
- *       &lt;/fileset&gt;
- *    &lt;/hlm:status&gt;
- * &lt;/hlm:scm &gt;
- * </pre>
- * 
- * @ant.type name="status" category="SCM"
- */
-public class StatusAction extends BaseDirectoryScmAction {
-
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-
-        StatusScmResult result = scmManager.status(repository, getScmFileSet());
-
-        if (!result.isSuccess()) {
-            throw new BuildException("SCM status action failed: "
-                    + result.getProviderMessage());
-        }
-    }
-
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/TagAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.command.tag.TagScmResult;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-import com.nokia.maven.scm.manager.ExtendedScmManager;
-
-/**
- * This action will tag current repository revision using a specific name.
- * 
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *     &lt;hlm:tag baseDir="${repo.dir}/test1" name="0.0.1" /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="tag" category="SCM"
- */
-public class TagAction extends BaseDirectoryScmAction {
-    private String name;
-    private String level = "normal";
-
-    /**
-     * String that will be used to tag the current revision.
-     * 
-     * @param name
-     *            Name of the tag
-     * @ant.required
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * String that will be used to determine tag types, eg. local.
-     * 
-     * @param level
-     *            Level of the tag eg.local
-     * @ant.not-required
-     */
-    public void setLevel(String level) {
-        this.level = level;
-    }
-
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        TagScmResult result;
-
-        if (name == null)
-            throw new BuildException("'name' attribute is not defined.");
-
-        if (getBasedir() == null)
-            throw new BuildException("'basedir' attribute is not defined.");
-
-        try {
-            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
-                    .getScmManager();
-            if (level.equals(new String("local"))) {
-                result = scmManager.tag(repository, new ScmFileSet(new File(
-                        getBasedir())), name, level);
-            } else {
-                result = scmManager.tag(repository, new ScmFileSet(new File(
-                        getBasedir())), name);
-            }
-
-            if (!result.isSuccess()) {
-                throw new BuildException("SCM tag action error: "
-                        + result.getProviderMessage());
-            }
-            getTask().log("Tag '" + name + "' has been created successfully.");
-        } catch (ScmException e) {
-            throw new BuildException("SCM tag action failed: " + e.toString());
-        }
-
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/TagsAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.io.File;
-import java.util.List;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmTag;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-
-import com.nokia.helium.scm.ant.types.TagSet;
-import com.nokia.maven.scm.command.tags.TagsScmResult;
-import com.nokia.maven.scm.manager.ExtendedScmManager;
-
-/**
- * This action will tag current repository revision using a specific name.
- * 
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *     &lt;hlm:tags baseDir="${repo.dir}/test1" reference="my.tags" /&gt;
- * &lt;/hlm:scm&gt;
- * </pre>
- *
- * @ant.type name="tags" category="SCM"
- */
-public class TagsAction extends BaseDirectoryScmAction {
-
-    private String reference;
-
-    /**
-     * Defines the id of the result type generated by the query.
-     * @param reference the name of the reference to use.
-     * @ant.not-required Only log result by default.
-     */
-    public void setReference(String reference) {
-        this.reference = reference;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void execute(ScmRepository repository) throws ScmException {
-        TagsScmResult result;
-        try {
-            ExtendedScmManager scmManager = (ExtendedScmManager) getTask()
-                    .getScmManager();
-            result = scmManager.tags(repository, new File(this.getBasedir()));
-            if (!result.isSuccess()) {
-                throw new BuildException("SCM tags action error: "
-                        + result.getProviderMessage());
-            }
-
-            // Creating a TagSet
-            List<ScmTag> tags = result.getTags();
-            TagSet tagSet = new TagSet();
-            tagSet.setProject(getProject());
-            getTask().log("Tag list:");
-            for (ScmTag tag : tags) {
-                tagSet.createTag().setName(tag.getName());
-                getTask().log(" * " + tag.getName());
-            }
-            // Creating new reference
-            if (reference != null) {
-                getTask().log("Creating reference: " + reference);
-                getProject().addReference(reference, tagSet);
-            }
-
-        } catch (ScmException e) {
-            throw new BuildException("SCM tags action failed: "
-                    + e.getMessage());
-        }
-
-    }
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/taskdefs/UpdateAction.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * 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.scm.ant.taskdefs;
-
-import java.util.List;
-
-import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmFile;
-import org.apache.maven.scm.ScmTag;
-import org.apache.maven.scm.command.update.UpdateScmResult;
-import org.apache.maven.scm.manager.ScmManager;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.apache.tools.ant.BuildException;
-import org.apache.maven.scm.ScmRevision;
-
-import com.nokia.helium.scm.ant.types.Tag;
-import com.nokia.helium.scm.ant.types.Revision;
-
-/**
- * Update the defined project for a specific revision or tag.
- * 
- * <pre>
- * &lt;hlm:scm verbose="true" scmUrl="scm:${repo.type}:${repo.dir}/test1"&gt;
- *     &lt;hlm:update basedir="${repo.dir}/test1" /&gt;
- * &lt;/hlm:scm&gt;
- *</pre>
- *
- * @ant.type name="update" category="SCM"
- */
-public class UpdateAction extends BaseDirectoryScmAction {
-
-    private Tag tag;
-    private Revision revision;
-
-    public void add(Tag tag) {
-        this.tag = tag;
-    }
-
-    public Tag createTag() {
-        this.tag = new Tag();
-        return this.tag;
-    }
-
-    public void add(Revision revision) {
-        this.revision = revision;
-    }
-
-    public Revision createRevision() {
-        this.revision = new Revision();
-        return this.revision;
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public void execute(ScmRepository repository) throws ScmException {
-        ScmManager scmManager = getTask().getScmManager();
-
-        UpdateScmResult result;
-            if (tag != null) {
-                result = scmManager.update(repository, getScmFileSet(),
-                        new ScmTag(tag.getName()));
-            } else if (revision != null) {
-                result = scmManager.update(repository, getScmFileSet(),
-                        new ScmRevision(revision.getName()));
-            } else {
-                result = scmManager.update(repository, getScmFileSet());
-            }
-
-            if (!result.isSuccess()) {
-                throw new BuildException("SCM update action error: "
-                        + result.getProviderMessage());
-            }
-
-            List<ScmFile> files = result.getUpdatedFiles();
-            for (ScmFile scmFile : files) {
-                getTask().log(scmFile.toString());
-            }
-
-    }
-
-}
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/HgScmProviderExt.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/HgScmProviderExt.java	Wed Jun 16 16:51:40 2010 +0300
@@ -76,7 +76,7 @@
     @Override
     public CheckOutScmResult checkout(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
 
         HgCheckOutCommand command = new HgCheckOutCommand();
         command.setLogger(getLogger());
@@ -87,7 +87,7 @@
     @Override
     public ChangeLogScmResult changelog(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
 
         HgChangeLogCommand command = new HgChangeLogCommand();
         command.setLogger(getLogger());
@@ -96,7 +96,7 @@
     }
 
     public PullScmResult pull(ScmRepository repository, File path)
-            throws ScmException {
+        throws ScmException {
         HgPullCommand command = new HgPullCommand();
         command.setLogger(getLogger());
         return (PullScmResult) command.executeCommand(repository
@@ -107,7 +107,7 @@
     @Override
     public UpdateScmResult update(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
         HgUpdateCommand command = new HgUpdateCommand();
         command.setLogger(getLogger());
         return (UpdateScmResult) command.executeCommand(repository, fileSet,
@@ -133,7 +133,7 @@
     @Override
     public RemoveScmResult remove(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
         HgRemoveCommand command = new HgRemoveCommand();
         command.setLogger(getLogger());
         return (RemoveScmResult) command.execute(repository, fileSet,
@@ -142,7 +142,7 @@
 
     protected BranchScmResult branch(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
         HgBranchCommand command = new HgBranchCommand();
         command.setLogger(getLogger());
         return (BranchScmResult) command.execute(repository, fileSet,
@@ -151,7 +151,7 @@
 
     protected ExportScmResult export(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
         HgExportCommand command = new HgExportCommand();
         command.setLogger(getLogger());
         return (ExportScmResult) command.execute(repository, fileSet,
@@ -161,7 +161,7 @@
     @Override
     public TagScmResult tag(ScmProviderRepository repository,
             ScmFileSet fileSet, CommandParameters parameters)
-            throws ScmException {
+        throws ScmException {
         HgTagCommand command = new HgTagCommand();
         command.setLogger(getLogger());
         return (TagScmResult) command.execute(repository, fileSet, parameters);
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/VersionChangeSet.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/VersionChangeSet.java	Wed Jun 16 16:51:40 2010 +0300
@@ -74,9 +74,9 @@
     {
         String result = "";
         for (ScmVersion versions : getScmVersion()) {
-           if (!versions.getName().equals("")) 
-           {
-               result += versions.getType().toLowerCase() + ":" + versions.getName() + "\n";
+            if (!versions.getName().equals("")) 
+            {
+                result += versions.getType().toLowerCase() + ":" + versions.getName() + "\n";
             }
         }
         if (getAuthor() != null)
@@ -123,13 +123,13 @@
         }
 
         for (ScmVersion versions : getScmVersion()) {
-           if (!versions.getName().equals("")) 
-           {
-               buffer.append("\t\t<" + versions.getType().toLowerCase() + ">\n")
+            if (!versions.getName().equals("")) 
+            {
+                buffer.append("\t\t<" + versions.getType().toLowerCase() + ">\n")
                      .append("\t\t\t<name>")
                      .append(versions.getName())
                      .append("</name>\n");
-               buffer.append("\t\t</" + versions.getType().toLowerCase() + ">\n");
+                buffer.append("\t\t</" + versions.getType().toLowerCase() + ">\n");
             }
         }
 
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/export/HgExportCommand.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/export/HgExportCommand.java	Wed Jun 16 16:51:40 2010 +0300
@@ -82,11 +82,11 @@
 
     protected List<String> getFiles(File dir) {
         List<String> files = new ArrayList<String>();
-        for (File f : dir.listFiles()) {
-            if (f.isFile()) {
-                files.add(f.getAbsolutePath());
-            } else if (f.isDirectory()) {
-                files.addAll(getFiles(f));
+        for (File file : dir.listFiles()) {
+            if (file.isFile()) {
+                files.add(file.getAbsolutePath());
+            } else if (file.isDirectory()) {
+                files.addAll(getFiles(file));
             }
         }
         return files;
--- a/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tag/HgTagCommand.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/command/tag/HgTagCommand.java	Wed Jun 16 16:51:40 2010 +0300
@@ -125,8 +125,8 @@
         StringBuffer result = new StringBuffer();
         int i = 0;
         for (String cmd : cmds) {
-            String s = cmd;
-            result.append(s);
+            String cmdStr = cmd;
+            result.append(cmdStr);
             if (i < cmds.length - 1) {
                 result.append(" ");
             }
--- a/buildframework/helium/sf/java/signaling/signaling.rst	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/signaling.rst	Wed Jun 16 16:51:40 2010 +0300
@@ -1,16 +1,20 @@
+
+.. index::
+  module: Configuring Signaling
+  
 =====================
 Configuring Signaling
 =====================
 
 Helium signaling framework offers you a simplest way to control 
-failures on build flow, and provides you an easy way to get reporting on
+failures on build flow, and provides you with an easy way to get reporting on
 some crucial steps of your build.
 
 
 The configuration
 -----------------
 
-The signaling configuration is divided on three parts:
+The signaling configuration is divided into three parts:
 
    * the signalListenerConfig: defines the signal
    * the signalInput: defines what to do when a signal is raised
@@ -37,9 +41,9 @@
         </hlm:targetCondition>
     </hlm:signalListenerConfig>
  
-A signal will then be triggered each time the **target-name** completed. The signalInput will then defined how it should be handled.
+A signal will then be triggered each time the **target-name** completed. The signalInput will then define how it should be handled.
 
-Other way to trigger a signal is by using the signal task:
+Another way to trigger a signal is by using the signal task:
  
 .. code-block:: xml
 
@@ -71,13 +75,13 @@
         <hlm:notifierListRef refid="customNotifier" />
     </hlm:signalInput>
   
-This will run all notifier from the customNotifier configuration then fail the build.
+This will run all notifiers from the customNotifier configuration then fail the build.
 
 .. code-block:: xml
 
     <hlm:signalInput id="customSignalInput" failbuild="defer"/>
 
-This will defer the failure at the end of the build, no notifier will be run.
+This will defer the failure to the end of the build, no notifier will be run.
 
 notifierList
 ............
@@ -111,7 +115,7 @@
    * send an email to additional users e.g: user@foo.com, user@bar.com
    * defer the build failure.
 
-You configuration should contains (e.g build.xml)
+Your configuration should contain (e.g build.xml)
 
 .. code-block:: xml
 
@@ -138,17 +142,17 @@
 
    
 A custom notifierList has been created with **myCustomNotifierList** as reference ID. It defines
-a emailNotifier which uses the default email template under Helium (${helium.dir}/tools/common/templates/log/email_new.html.ftl).
-It also set the title of you email to be "[signal] My build goes wrong: ${signal.name}" (signal.name property will be replace by the signal name raised).
-**notifyWhen** attribute will make the notifier to send a notification only on build failure.
+an emailNotifier which uses the default email template under Helium (${helium.dir}/tools/common/templates/log/email_new.html.ftl).
+It also sets the title of your email to be "[signal] My build goes wrong: ${signal.name}" (signal.name property will be replaced by the signal name raised).
+**notifyWhen** attribute will make the notifier send a notification only on build failure.
 Finally the two additional email addresses will be set using the **additionalrecipients** attribute. 
 
-We then need to link the signal configuration and our custom the notifier list. The signalInput element is use to achieve that. 
-It must be defined using the same reference ID (see reference overriding howto) as the one in the Helium configuration, the naming convention for this is: **<signal_name>Input**.
+We then need to link the signal configuration and our custom  signal to the notifier list, the signalInput element is used to achieve this. 
+It must be defined using the same reference ID (see reference overriding how to) as the one in the Helium configuration, the naming convention for this is: **<signal_name>Input**.
 Its **failbuild** attribute is set to **defer** which will configure the build to keepgoing, and fail at the end of the build flow.
 Finally an embedded notifierListRef element will reference our custom notifier list: **myCustomNotifierList**.
 
-While failing the signaling framework will execute all notifier defined and then store internally the build failure so it can raise it again at the end of the execution.
+While failing the signaling framework will execute all notifiers defined and then store internally the build failure so it can raise it again at the end of the execution.
     
 
 Example: Report specific errors not included by default
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,8 +22,8 @@
 -->
 <antlib>
     <!-- Task definition -->
-    <taskdef name="signal" classname="com.nokia.helium.signal.ant.taskdefs.Signal"/>
-    <taskdef name="clearDeferredFailures" classname="com.nokia.helium.signal.ant.taskdefs.ClearDeferredFailures"/>
+    <taskdef name="signal" classname="com.nokia.helium.signal.ant.taskdefs.SignalTask"/>
+    <taskdef name="clearDeferredFailures" classname="com.nokia.helium.signal.ant.taskdefs.ClearDeferredFailuresTask"/>
     
     <!-- Type definition -->
     <typedef name="hasDeferredFailure" classname="com.nokia.helium.signal.ant.conditions.DeferredFailureCondition"/>
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/ClearDeferredFailures.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* 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.signal.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import com.nokia.helium.signal.SignalStatusList;
-
-/**
- * This class implements a task that clear all pending failure. It is quite
- * useful for testing.
- * @ant.task name="clearDeferredFailures" category="Signaling"
- */
-public class ClearDeferredFailures extends Task {
-
-    /**
-     * Does the cleaning.
-     */
-    @Override
-    public void execute() {
-        log("Clearing all pending failures.");
-        SignalStatusList.getDeferredSignalList().clearStatusList();
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/ClearDeferredFailuresTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* 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.signal.ant.taskdefs;
+
+import org.apache.tools.ant.Task;
+import com.nokia.helium.signal.SignalStatusList;
+
+/**
+ * This class implements a task that clear all pending failure. It is quite
+ * useful for testing.
+ * @ant.task name="clearDeferredFailures" category="Signaling"
+ */
+public class ClearDeferredFailuresTask extends Task {
+
+    /**
+     * Does the cleaning.
+     */
+    @Override
+    public void execute() {
+        log("Clearing all pending failures.");
+        SignalStatusList.getDeferredSignalList().clearStatusList();
+    }
+
+}
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/Signal.java	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
- * 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.signal.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Target;
-import java.util.Vector;
-import com.nokia.helium.signal.ant.SignalList;
-import com.nokia.helium.signal.ant.types.SignalNotifierInput;
-
-/**
- * This task provide a way to raise a signal.
- * If the provided result is different from 0 then the mentioned signal
- * is raised.
- * 
- * You can emit a signal based from the signal task, its behavior will get defined by the
- * nested signalInput element. e.g:
- * <pre>
- * &lt;target name=&quot;raise-signal&quot;&gt;
- *   &lt;-- Some computation that sets result property --&gt;
- *   &lt;property name=&quot;result&quot; value=&quot;1&quot;/&gt;
- *   
- *   &lt;hlm:signal name=&quot;compileSignal&quot; result=&quot;${result}&quot;&gt;
- *       &lt;-- Let's refer to some existing signal input configuration --&gt;
- *       &lt;hlm:signalInput refid=&quot;testDeferredSignalInput&quot; /&gt;
- *   &lt;/hlm:signal&gt;
- * &lt;/target&gt;
- * </pre>
- * 
- * The execution of the <code>signal</code> task will behave depending on the <code>compileSignal</code> configuration,
- * if not defined the build will fail.
- * 
- * @ant.task name="signal" category="Signaling"
- */
-public class Signal extends Task {
-
-    private String name;
-    private String message;
-    private Integer result;
-
-    private Vector<SignalNotifierInput> signalNotifierInputs = new Vector<SignalNotifierInput>();
-    
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * Helper function called by ant to create the new signalinput
-     */
-    public SignalNotifierInput createSignalNotifierInput() {
-        SignalNotifierInput input =  new SignalNotifierInput();
-        add(input);
-        return input;
-    }
-
-    public SignalNotifierInput getSignalNotifierInput() {
-        return (SignalNotifierInput)signalNotifierInputs.elementAt(0);
-    }
-    /**
-     * Helper function to add the created signalinput
-     * @param filter to be added to the filterset
-     */
-    public void add(SignalNotifierInput input) {
-        signalNotifierInputs.add(input);
-    }
-    
-    
-    /**
-     * Error message.
-     * 
-     * @ant.not-required
-     */
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Signal name to emit.
-     * 
-     * @ant.required
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * integer value representing the number of errors.
-     * 
-     * @ant.required
-     */
-    public void setResult(int result) {
-        this.result = new Integer(result);
-    }
-
-    @Override
-    public void execute() {
-        if (name == null)
-            throw new BuildException("'name' attribute is not defined.");
-        if (result == null) {
-            result = new Integer(0);
-        }
-
-        SignalList signalList = new SignalList(getProject());
-        boolean failStatus = result.intValue() != 0; 
-        if (failStatus) {
-            // keep same message as earlier.
-            log(name
-                    + ": "
-                    + name
-                    + " signal failed. Expected result was 0, actual result was "
-                    + result);
-
-            if (message == null) {
-                message = "Expected result was 0, actual result was " + result;
-            }
-        }
-        
-        // notify the user
-        String targetName = "signalExceptionTarget";  
-        Target target = this.getOwningTarget();
-        if (target != null) {
-            targetName = target.getName();
-        }
-
-        if (signalNotifierInputs.isEmpty()) {          
-            Object config = getProject().getReference(name);
-            if (config == null) {
-                throw new BuildException("Could not find signal config for signal name: " + name);
-            }
-            signalList.sendSignal(getName(), result.intValue() != 0);
-            if (result.intValue() != 0) {
-                // keep same message as earlier.
-                log(name
-                        + ": "
-                        + name
-                        + " signal failed. Expected result was 0, actual result was "
-                        + result);
-
-                if (message == null) {
-                    message = "Expected result was 0, actual result was " + result;
-                }
-                signalList.fail(getName(), this.getOwningTarget().getName(), message);
-            }
-            
-        } else {
-            signalList.processForSignal(getProject(), getSignalNotifierInput(), getName(),
-                targetName, message, failStatus);
-        }
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/taskdefs/SignalTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,172 @@
+/*
+ * 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.signal.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.Target;
+import java.util.Vector;
+import com.nokia.helium.signal.ant.SignalList;
+import com.nokia.helium.signal.ant.types.SignalNotifierInput;
+
+/**
+ * This task provide a way to raise a signal.
+ * If the provided result is different from 0 then the mentioned signal
+ * is raised.
+ * 
+ * You can emit a signal based from the signal task, its behavior will get defined by the
+ * nested signalInput element. e.g:
+ * <pre>
+ * &lt;target name=&quot;raise-signal&quot;&gt;
+ *   &lt;-- Some computation that sets result property --&gt;
+ *   &lt;property name=&quot;result&quot; value=&quot;1&quot;/&gt;
+ *   
+ *   &lt;hlm:signal name=&quot;compileSignal&quot; result=&quot;${result}&quot;&gt;
+ *       &lt;-- Let's refer to some existing signal input configuration --&gt;
+ *       &lt;hlm:signalInput refid=&quot;testDeferredSignalInput&quot; /&gt;
+ *   &lt;/hlm:signal&gt;
+ * &lt;/target&gt;
+ * </pre>
+ * 
+ * The execution of the <code>signal</code> task will behave depending on the <code>compileSignal</code> configuration,
+ * if not defined the build will fail.
+ * 
+ * @ant.task name="signal" category="Signaling"
+ */
+public class SignalTask extends Task {
+
+    private String name;
+    private String message;
+    private Integer result;
+
+    private Vector<SignalNotifierInput> signalNotifierInputs = new Vector<SignalNotifierInput>();
+    
+    public String getMessage() {
+        return message;
+    }
+
+    /**
+     * Helper function called by ant to create the new signalinput
+     */
+    public SignalNotifierInput createSignalNotifierInput() {
+        SignalNotifierInput input =  new SignalNotifierInput();
+        add(input);
+        return input;
+    }
+
+    public SignalNotifierInput getSignalNotifierInput() {
+        return (SignalNotifierInput)signalNotifierInputs.elementAt(0);
+    }
+    /**
+     * Helper function to add the created signalinput
+     * @param filter to be added to the filterset
+     */
+    public void add(SignalNotifierInput input) {
+        signalNotifierInputs.add(input);
+    }
+    
+    
+    /**
+     * Error message.
+     * 
+     * @ant.not-required
+     */
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Signal name to emit.
+     * 
+     * @ant.required
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * integer value representing the number of errors.
+     * 
+     * @ant.required
+     */
+    public void setResult(int result) {
+        this.result = new Integer(result);
+    }
+
+    @Override
+    public void execute() {
+        if (name == null)
+            throw new BuildException("'name' attribute is not defined.");
+        if (result == null) {
+            result = new Integer(0);
+        }
+
+        SignalList signalList = new SignalList(getProject());
+        boolean failStatus = result.intValue() != 0; 
+        if (failStatus) {
+            // keep same message as earlier.
+            log(name
+                    + ": "
+                    + name
+                    + " signal failed. Expected result was 0, actual result was "
+                    + result);
+
+            if (message == null) {
+                message = "Expected result was 0, actual result was " + result;
+            }
+        }
+        
+        // notify the user
+        String targetName = "signalExceptionTarget";  
+        Target target = this.getOwningTarget();
+        if (target != null) {
+            targetName = target.getName();
+        }
+
+        if (signalNotifierInputs.isEmpty()) {          
+            Object config = getProject().getReference(name);
+            if (config == null) {
+                throw new BuildException("Could not find signal config for signal name: " + name);
+            }
+            signalList.sendSignal(getName(), result.intValue() != 0);
+            if (result.intValue() != 0) {
+                // keep same message as earlier.
+                log(name
+                        + ": "
+                        + name
+                        + " signal failed. Expected result was 0, actual result was "
+                        + result);
+
+                if (message == null) {
+                    message = "Expected result was 0, actual result was " + result;
+                }
+                signalList.fail(getName(), this.getOwningTarget().getName(), message);
+            }
+            
+        } else {
+            signalList.processForSignal(getProject(), getSignalNotifierInput(), getName(),
+                targetName, message, failStatus);
+        }
+    }
+
+}
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/EMAILNotifier.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/EMAILNotifier.java	Wed Jun 16 16:51:40 2010 +0300
@@ -185,69 +185,69 @@
             String additionalRecipientsUpdated = getProject().replaceProperties(additionalRecipients);
 
             log.debug("Sending data by e-mail.");
-                EmailDataSender emailSender;
-                if (rootdnUpdated != null)
-                {
-                    String[] to = null;
-                    if (additionalRecipientsUpdated != null)
-                    {
-                        to = additionalRecipientsUpdated.split(",");
-                    }
-                    emailSender = new EmailDataSender(to, smtpUpdated, ldapUpdated, rootdnUpdated);
-                }
-                else
+            EmailDataSender emailSender;
+            if (rootdnUpdated != null)
+            {
+                String[] to = null;
+                if (additionalRecipientsUpdated != null)
                 {
-                    emailSender = new EmailDataSender(
-                        additionalRecipientsUpdated, smtpUpdated, ldapUpdated);
+                    to = additionalRecipientsUpdated.split(",");
                 }
-                if (from != null)
-                {
-                    emailSender.setFrom(from);
+                emailSender = new EmailDataSender(to, smtpUpdated, ldapUpdated, rootdnUpdated);
+            }
+            else
+            {
+                emailSender = new EmailDataSender(
+                    additionalRecipientsUpdated, smtpUpdated, ldapUpdated);
+            }
+            if (from != null)
+            {
+                emailSender.setFrom(from);
+            }
+            log.debug("EmailNotifier:arlist: " + additionalRecipientsUpdated);
+            Project subProject = getProject().createSubProject();
+            subProject.setProperty("signal.name", signalName);
+            subProject.setProperty("signal.status", "" + failStatus);
+            subProject.setProperty("signal.message", "" + message);
+            
+            emailSender.addCurrentUserToAddressList();
+            String filePath = "";
+            File fileToSend = null;
+            if (notifierInput != null) {
+                fileToSend = notifierInput.getFile(".*.html");
+                if (fileToSend != null) {
+                    filePath = fileToSend.toString();
                 }
-                log.debug("EmailNotifier:arlist: " + additionalRecipientsUpdated);
-                Project subProject = getProject().createSubProject();
-                subProject.setProperty("signal.name", signalName);
-                subProject.setProperty("signal.status", "" + failStatus);
-                subProject.setProperty("signal.message", "" + message);
                 
-                emailSender.addCurrentUserToAddressList();
-                String filePath = "";
-                File fileToSend = null;
-                if (notifierInput != null) {
-                    fileToSend = notifierInput.getFile(".*.html");
-                    if (fileToSend != null) {
-                        filePath = fileToSend.toString();
-                    }
-                    
-                } 
-                if (fileToSend == null) {
-                    File emailOutputFile;
-                    try {
-                        emailOutputFile = File.createTempFile("helium_", "email.html");
-                        emailOutputFile.deleteOnExit();
-                        log.debug("sending data by e-mail:outputDir: "
-                                + emailOutputFile.getAbsolutePath());
+            } 
+            if (fileToSend == null) {
+                File emailOutputFile;
+                try {
+                    emailOutputFile = File.createTempFile("helium_", "email.html");
+                    emailOutputFile.deleteOnExit();
+                    log.debug("sending data by e-mail:outputDir: "
+                            + emailOutputFile.getAbsolutePath());
 
-                        List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
-                        sourceList.add(new PropertiesSource("ant", getProject()
-                                .getProperties()));
-                        Hashtable<String, String> signalProperties = new Hashtable<String, String>();
-                        signalProperties.put("signal.name", signalName);
-                        signalProperties.put("signal.status", "" + failStatus);
-                        signalProperties.put("signal.message", "" + message);
-                        sourceList.add(new PropertiesSource("signaling",
-                                signalProperties));
+                    List<TemplateInputSource> sourceList = new ArrayList<TemplateInputSource>();
+                    sourceList.add(new PropertiesSource("ant", getProject()
+                            .getProperties()));
+                    Hashtable<String, String> signalProperties = new Hashtable<String, String>();
+                    signalProperties.put("signal.name", signalName);
+                    signalProperties.put("signal.status", "" + failStatus);
+                    signalProperties.put("signal.message", "" + message);
+                    sourceList.add(new PropertiesSource("signaling",
+                            signalProperties));
 
-                        templateProcessor.convertTemplate(defaultTemplate, emailOutputFile,
-                                sourceList);
-                        filePath = emailOutputFile.toString();
-                    } catch (IOException e) {
-                        log.debug("EmailNotifier: IOexception: ", e);
-                    }
+                    templateProcessor.convertTemplate(defaultTemplate, emailOutputFile,
+                            sourceList);
+                    filePath = emailOutputFile.toString();
+                } catch (IOException e) {
+                    log.debug("EmailNotifier: IOexception: ", e);
                 }
-                emailSender.sendData("signaling", filePath, 
-                        "application/html", subProject
-                        .replaceProperties(title), null);
+            }
+            emailSender.sendData("signaling", filePath, 
+                    "application/html", subProject
+                    .replaceProperties(title), null);
         }
     }
 
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/ExecuteTaskNotifier.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/ExecuteTaskNotifier.java	Wed Jun 16 16:51:40 2010 +0300
@@ -88,7 +88,7 @@
             prj.setProperty("signal.message", message );
             // Converting the list of inputs into a string.
             String inputs = "";
-            if (notifierInput != null) {
+            if (notifierInput != null && notifierInput.getFile() != null) {
                 inputs += notifierInput.getFile().toString();
             }
             prj.setProperty("signal.notifier.inputs", inputs);
--- a/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierList.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/src/com/nokia/helium/signal/ant/types/SignalNotifierList.java	Wed Jun 16 16:51:40 2010 +0300
@@ -19,7 +19,6 @@
 package com.nokia.helium.signal.ant.types;
 
 import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.BuildException;
 import com.nokia.helium.signal.Notifier;
 
 
@@ -57,9 +56,6 @@
      * @throws HlmAntLibException
      */
     public Vector<Notifier> getNotifierList() {
-        if (notifierlist.isEmpty()) {
-            throw new BuildException(" Signal notifierlist is empty.");
-        }
         return notifierlist;
     }
 }
--- a/buildframework/helium/sf/java/signaling/tests/antunit/signaling_test.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/tests/antunit/signaling_test.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -68,20 +68,20 @@
         <echo message="invalid configuration4" />
     </target>
 
-    <target name="target-invalid-config5">
-        <echo message="invalid configuration5" />
+    <target name="target-empty-notifier-list-config5">
+        <echo message="Empty signal list is a valid configuration5" />
     </target>
 
-    <target name="target-invalid-config6">
-        <echo message="invalid configuration6" />
+    <target name="target-valid-config6">
+        <echo message="Empty signal list is a valid configuration6" />
     </target>
 
-    <target name="target-invalid-config7">
-        <echo message="invalid configuration7" />
+    <target name="target-valid-config7">
+        <echo message="Empty signal list is a valid configuration7" />
     </target>
 
-    <target name="target-invalid-config8">
-        <echo message="invalid configuration8" />
+    <target name="target-valid-config8">
+        <echo message="Empty signal list is a valid configuration8" />
     </target>
 
     <target name="target-invalid-config9">
--- a/buildframework/helium/sf/java/signaling/tests/antunit/test_signaling_config.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/signaling/tests/antunit/test_signaling_config.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -20,14 +20,14 @@
 
 ============================================================================
 -->
-<project name="test-signaling-config" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+<project name="test-signaling-config" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" xmlns:cond="antlib:org.apache.tools.ant.types.conditions">
     <description>
         signalInput and notifierList test configuration
     </description>
     <dirname property="project.dir.signaling" file="${ant.file.test-signaling-config}" />
 
     <property name="build.summary.file" location="${project.dir.signaling}/../data/ido_tedo_mcl_devlon52_ec_MCL.52.105_summary.log.xml" />
-    <taskdef resource="org/apache/tools/ant/types/conditions/antlib.xml" />
+    
     <taskdef resource="com/nokia/helium/signal/ant/antlib.xml" uri="http://www.nokia.com/helium" />
 
     <hlm:notifierList id="defaultsignalnotifier">
@@ -62,9 +62,9 @@
             <signalInput refid="compilesignalinput" />
         </signalNotifierInput>
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -95,17 +95,17 @@
     </hlm:signallist-->
 
     <!--Invalid configurations -->
-    <hlm:notifierList id="invalid-notifier1" />
+    <hlm:notifierList id="empty-notifier1" />
 
-    <hlm:notifierList id="invalid-notifier2">
+    <hlm:notifierList id="empty-notifier2">
         <!--hlm:notifier type="test" senderlist="${env.username}" /-->
     </hlm:notifierList>
 
-    <hlm:notifierList id="invalid-notifier3">
+    <hlm:notifierList id="empty-notifier3">
         <!--hlm:notifier type="email" /-->
     </hlm:notifierList>
 
-    <hlm:notifierList id="invalid-notifier4">
+    <hlm:notifierList id="empty-notifier4">
         <!--hlm:notifier senderlist="${env.username}" /-->
     </hlm:notifierList>
 
@@ -115,19 +115,19 @@
     </hlm:signalInput>
 
     <hlm:signalInput id="invalid-input3" failbuild="never">
-        <hlm:notifierListRef refid="invalid-notifier1" />
+        <hlm:notifierListRef refid="empty-notifier1" />
     </hlm:signalInput>
 
-    <hlm:signalInput id="invalid-input4" failbuild="never">
-        <hlm:notifierListRef refid="invalid-notifier2" />
+    <hlm:signalInput id="valid-input4" failbuild="never">
+        <hlm:notifierListRef refid="empty-notifier2" />
     </hlm:signalInput>
 
-    <hlm:signalInput id="invalid-input5" failbuild="never">
-        <hlm:notifierListRef refid="invalid-notifier3" />
+    <hlm:signalInput id="valid-input5" failbuild="never">
+        <hlm:notifierListRef refid="empty-notifier3" />
     </hlm:signalInput>
 
-    <hlm:signalInput id="invalid-input6" failbuild="never">
-        <hlm:notifierListRef refid="invalid-notifier4" />
+    <hlm:signalInput id="valid-input6" failbuild="never">
+        <hlm:notifierListRef refid="empty-notifier4" />
     </hlm:signalInput>
 
     <hlm:signalListenerConfig id="noreferenceSignal" target="target-invalid-config1" message="Errors happened during compilation">
@@ -135,9 +135,9 @@
             <hlm:signalInput refid="noreference" />
         </signalNotifierInput>
         <targetCondition>
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -148,54 +148,54 @@
     <hlm:signalListenerConfig id="invalidInputSignal" target="target-invalid-config4" message="Errors happened during compilation">
         <!-- <hlm:signalInput refid="invalid-input2" /> -->
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="invalidInput3" target="target-invalid-config5" message="Errors happened during compilation">
+    <hlm:signalListenerConfig id="invalidInput3" target="target-empty-notifier-list-config5" message="Errors happened during compilation">
         <signalNotifierInput>
-            <signalInput refid="invalid-input3" />
+            <signalInput refid="empty-input3" />
         </signalNotifierInput>
-        <targetCondition >
-            <not>
+        <targetCondition>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="invalidInput4" target="target-invalid-config6" message="Errors happened during compilation">
+    <hlm:signalListenerConfig id="invalidInput4" target="target-valid-config6" message="Errors happened during compilation">
         <signalNotifierInput>
-            <signalInput refid="invalid-input4" />
+            <signalInput refid="valid-input4" />
         </signalNotifierInput>
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="invalidInput5" target="target-invalid-config7" message="Errors happened during compilation">
+    <hlm:signalListenerConfig id="validInput5" target="target-valid-config7" message="Errors happened during compilation">
         <signalNotifierInput>
-            <signalInput refid="invalid-input5" />
+            <signalInput refid="valid-input5" />
         </signalNotifierInput>
 
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
-    <hlm:signalListenerConfig id="invalidInput6" target="target-invalid-config8" message="Errors happened during compilation">
+    <hlm:signalListenerConfig id="validInput6" target="target-valid-config8" message="Errors happened during compilation">
         <signalNotifierInput>
-            <signalInput refid="invalid-input6" />
+            <signalInput refid="valid-input6" />
         </signalNotifierInput>
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -204,9 +204,9 @@
             <signalInput refid="invalid-input7" />
         </signalNotifierInput>
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -239,7 +239,7 @@
             <signalInput refid="validSignalInput" />
         </signalNotifierInput>
         <targetCondition >
-            <!-- <not><equals arg1="0" arg2="${number.of.error}"/></not> -->
+            <!-- <cond:not><equals arg1="0" arg2="${number.of.error}"/></cond:not> -->
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -248,7 +248,7 @@
             <signalInput refid="validSignalInput" />
         </signalNotifierInput>
         <targetCondition >
-            <!--<not><equals arg1="0" arg2="0"/></not> -->
+            <!--<cond:not><equals arg1="0" arg2="0"/></cond:not> -->
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -257,9 +257,9 @@
             <signalInput refid="input-fail-build-now" />
         </signalNotifierInput>
         <targetCondition>
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="0" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -268,9 +268,9 @@
             <signalInput refid="input-fail-build-now" />
         </signalNotifierInput>
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -286,9 +286,9 @@
             <signalInput refid="input-fail-build-defer" />
         </signalNotifierInput>
         <targetCondition >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="0" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -297,9 +297,9 @@
             <signalInput refid="input-fail-build-defer" />
         </signalNotifierInput>
         <targetCondition>
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -309,9 +309,9 @@
         </signalNotifierInput>
 
         <targetCondition>
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="0" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
@@ -321,9 +321,9 @@
         </signalNotifierInput>
 
         <targetCondition  >
-            <not>
+            <cond:not>
                 <equals arg1="0" arg2="${number.of.errors}" />
-            </not>
+            </cond:not>
         </targetCondition>
     </hlm:signalListenerConfig>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="helium-synergy">
+    <description>Helium Antlib Legacy build file.</description>
+    
+    <import file="${builder.dir}/java/macros.ant.xml" />
+    
+</project>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+============================================================================ 
+Name        : ivy.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================  
+-->
+<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+    <info
+        organisation="com.nokia.helium"
+        module="helium-synergy"
+        status="integration" />
+        
+  <dependencies>
+    <dependency org="com.nokia.helium" name="helium-core" rev="latest.integration" conf="default" />
+  </dependencies>
+</ivy-module>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : antlib.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<antlib>
+    <taskdef name="deconfigure" classname="com.nokia.helium.synergy.ant.taskdefs.DeconfigureTask"/>
+    <taskdef name="rebaseline" classname="com.nokia.helium.synergy.ant.taskdefs.RebaselineTask"/>
+    <taskdef name="rebaseanddeconf" classname="com.nokia.helium.synergy.ant.taskdefs.RBTTask"/>
+</antlib>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/AbstractScmBaseTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,465 @@
+/*
+ * 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.synergy.ant.taskdefs;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.Execute;
+import org.apache.tools.ant.taskdefs.LogStreamHandler;
+import org.apache.tools.ant.taskdefs.condition.Os;
+
+import com.nokia.helium.core.FileUtils;
+
+/**
+ * <code>AbstractScmBaseTask</code> is an abstract class for GSCM related tasks
+ * such as rebaseline and deconfigure.
+ * 
+ * @ant.task category="SCM"
+ * 
+ */
+public abstract class AbstractScmBaseTask extends Task {
+
+    // common attributes
+    private String database; // -d dbname = Database name (or database path)
+    private String password; // -U password = UNIX password
+    private String ccmProject; // -p projectname = Project name (incompatible
+    // with -B)
+
+    private Integer verbosity;
+
+    private StringBuffer commandString = new StringBuffer();
+    private List<SCMCommandArgument> commands = new ArrayList<SCMCommandArgument>();
+
+    /**
+     * Return the Synergy project name.
+     * 
+     * @return the Synergy project name.
+     */
+    public String getCcmProject() {
+        return ccmProject;
+    }
+
+    /**
+     * Set Synergy Project Name to be used.
+     * 
+     * @param ccmProject
+     *            is the Synergy project name to set
+     * @ant.required
+     */
+    public void setCcmProject(String ccmProject) {
+        this.ccmProject = ccmProject;
+        log("Set ccmProject to " + ccmProject);
+    }
+
+    /**
+     * Return the database name.
+     * 
+     * @return the database name.
+     */
+    public String getDatabase() {
+        return database;
+    }
+
+    /**
+     * Set Synergy Database name to be used.
+     * 
+     * @param database
+     *            is the name of the Synergy database to set.
+     * @ant.required
+     */
+    public void setDatabase(String database) {
+        this.database = database;
+        log("Set database to " + database);
+    }
+
+    /**
+     * Return the Synergy password.
+     * 
+     * @return the Synergy password.
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * Set Synergy Password to be used.
+     * 
+     * @param password
+     *            is the password to set.
+     * @ant.required
+     */
+    public void setPassword(String password) {
+        this.password = password;
+        log("Set password to ****** ");
+    }
+
+    /**
+     * Return the verbosity.
+     * 
+     * @return the verbosity.
+     */
+    public Integer getVerbosity() {
+        return verbosity;
+    }
+
+    /**
+     * Set verbosity level to be used. Verbosity level ( 0 - quiet, 1 - verbose,
+     * 2 - very verbose). Exception will be raised for any other value.
+     * 
+     * @param verbosity
+     *            is the verbosity level to set.
+     * @ant.not-required
+     */
+    public void setVerbosity(Integer verbosity) {
+        this.verbosity = verbosity;
+        log("Set verbosity to " + verbosity);
+    }
+
+    /**
+     * Method executes the current task.
+     * 
+     */
+    @Override
+    public void execute() {
+        // Set execution script
+        String script = getExecutionScript();
+        String systemPath = System.getenv("PATH");
+        String[] pathDirs = systemPath.split(File.pathSeparator);
+        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
+            // Under windows it is not in the path...
+            String[] customPathDirs = new String[pathDirs.length + 1];
+            System.arraycopy(pathDirs, 0, customPathDirs, 0, pathDirs.length);
+            customPathDirs[customPathDirs.length - 1] = "C:\\apps\\base-apps\\bin";
+            pathDirs = customPathDirs;
+        } else {
+            // Under Linux environment it is a perl script...
+            script = script + ".pl";
+        }
+        
+        File scriptFile = FileUtils
+                .findExecutableOnPath(script, pathDirs);
+        if (scriptFile == null) {
+            throw new BuildException("Could not find " + script
+                    + " application in the path.");
+        }
+        appendToCommandLine(scriptFile.getAbsolutePath());
+
+        // Build command argument list
+        buildCommandList();
+
+        // handle the command arguments
+        handleCommandArguments();
+
+        // configure verbosity
+        configureVerbosity();
+
+        // Execute the command-line launching as a separate process
+        runCommand();
+        log("Completed successfully.");
+    }
+
+    /**
+     * Method appends the given prefix and the command to the command string if
+     * the input cmd string is not null.
+     * 
+     * @param prefix
+     *            is the prefix of the cmd string input.
+     * @param cmd
+     *            is the cmd string to be appended to main command string.
+     */
+    protected void appendToCommandLine(String prefix, Object cmd) {
+        if (cmd != null) {
+            commandString.append(prefix);
+            commandString.append(" ");
+            commandString.append(cmd);
+            commandString.append(" ");
+        }
+    }
+
+    /**
+     * Method appends the given prefix to the command string if the boolean
+     * value input is set true.
+     * 
+     * @param prefix
+     *            is the prefix to be appended to the command string.
+     * @param bool
+     *            indicates whether to append the prefix or not.
+     */
+    protected void appendToCommandLine(String prefix, Boolean bool) {
+        if (bool != null && bool) {
+            appendToCommandLine(prefix);
+        }
+    }
+
+    /**
+     * Method appends the given cmd to the command string.
+     * 
+     * @param cmd
+     *            is the command string to be appended.
+     */
+    protected void appendToCommandLine(String cmd) {
+        commandString.append(cmd);
+        commandString.append(" ");
+    }
+
+    /**
+     * Add the given command argument to the command list.
+     * 
+     * @param fieldName
+     *            is the name of the task field.
+     * @param cmdArg
+     *            is the command argument to be added to the command list.
+     * @param required
+     *            indicates whether the command argument is mandatory or not.
+     * @param fieldValue
+     *            is the value of the given field
+     */
+    protected void addCommandArg(String fieldName, String cmdArg,
+            Boolean required, Object fieldValue) {
+        SCMCommandArgument cmdObj = new SCMCommandArgument(fieldName, cmdArg,
+                required, fieldValue);
+        commands.add(cmdObj);
+    }
+
+    /**
+     * Add the given command argument to the command list. By default, the input
+     * command argument will be optional.
+     * 
+     * @param fieldName
+     *            is the name of the task field.
+     * @param cmdArg
+     *            is the command argument to be added to the command list.
+     * @param fieldValue
+     *            is the value of the given field
+     */
+    protected void addCommandArg(String fieldName, String cmdArg,
+            Object fieldValue) {
+        addCommandArg(fieldName, cmdArg, false, fieldValue);
+    }
+
+    /**
+     * Method validates the given arguments.
+     */
+    protected abstract void validateArguments();
+
+    /**
+     * Get the name of the script to execute
+     * 
+     * @return the script name to execute
+     */
+    protected abstract String getExecutionScript();
+
+    /**
+     * Build a command list consisting of all the required and optional command
+     * arguments of the current task.
+     */
+    protected abstract void buildCommandList();
+
+    /**
+     * Method returns the correct verbosity level for the input choice.
+     * 
+     * @param choice
+     *            is the verbosity choice set by user.
+     * @return the verbosity level to set.
+     */
+    protected abstract String getVerbosity(int choice);
+
+    // ----------------------------------- PRIVATE METHODS
+    // --------------------------------------
+
+    /**
+     * Method returns the requested {@link Field} object from the input
+     * {@link Class}. If the requested field is not found in the given
+     * {@link Class} then all its super classes are searched recursively.
+     * 
+     * @param clazz
+     *            is the {@link Class} of which the field is requested.
+     * @param fieldName
+     *            is the name of the requested field.
+     * @return the requested field.
+     */
+    private Field getField(Class<?> clazz, String fieldName) {
+        Field field = null;
+        if (clazz != null) {
+            try {
+                field = clazz.getDeclaredField(fieldName);
+            } catch (NoSuchFieldException nsfe) {
+                field = getField(clazz.getSuperclass(), fieldName);
+            }
+        }
+        return field;
+    }
+
+    /**
+     * Method process the command arguments set in the command list.
+     * 
+     * @throws Exception
+     *             if any error occurs while processing the command arguments.
+     */
+    private void handleCommandArguments() {
+        StringBuffer missingArgs = new StringBuffer();
+        Field field = null;
+        for (SCMCommandArgument cmdObj : commands) {
+            field = getField(getClass(), cmdObj.fieldName);
+            if (field != null) {
+                Object fieldValue = field.getType().cast(cmdObj.fieldValue);
+                check4MandatoryCmdArguments(cmdObj, fieldValue, missingArgs);
+                buildCommand(cmdObj, fieldValue);
+            }
+        }
+        // handle missing args if any
+        handleMissingArguments(missingArgs);
+        validateArguments();
+    }
+
+    /**
+     * Method checks for the mandatory command arguments.
+     * 
+     * @param cmdObj
+     *            is the {@link SCMCommandArgument} used in verification
+     * @param fieldValue
+     *            is the field value to verify
+     * @param missingArgs
+     *            contains the mandatory command arguments which are missing.
+     */
+    private void check4MandatoryCmdArguments(SCMCommandArgument cmdObj,
+            Object fieldValue, StringBuffer missingArgs) {
+        if (cmdObj.required && fieldValue == null) {
+            missingArgs.append(cmdObj.fieldName);
+            missingArgs.append(" ");
+        }
+    }
+
+    /**
+     * Method is used to construct an executable command string.
+     * 
+     * @param cmdObj
+     *            is the {@link SCMCommandArgument}
+     * @param fieldValue
+     *            is the fieldValue containing the actual command argument.
+     */
+    private void buildCommand(SCMCommandArgument cmdObj, Object fieldValue) {
+        if (fieldValue instanceof Boolean) {
+            appendToCommandLine(cmdObj.commandArgument, (Boolean)fieldValue);
+        } else {
+            appendToCommandLine(cmdObj.commandArgument, fieldValue);
+        }
+    }
+
+    /**
+     * Method throws a {@link BuildException} if any mandatory command arguments
+     * are missing.
+     * 
+     * @param missingArgs
+     *            is the {@link StringBuffer} consisting of mandatory command
+     *            arguments which are missing.
+     */
+    private void handleMissingArguments(StringBuffer missingArgs) {
+        if (missingArgs.length() > 0) {
+            throw new BuildException("Error: mandatory attributes are not defined - "
+                    + missingArgs.toString());
+        }
+    }
+
+    /**
+     * Configure the verbosity set by the user.
+     */
+    private void configureVerbosity() {
+        if (verbosity != null) {
+            appendToCommandLine(getVerbosity(verbosity));
+        }
+    }
+
+    /**
+     * Execute the specified command.
+     * 
+     * @throws Exception
+     *             if execution fails or any error occurs while execution of the
+     *             command.
+     */
+    private void runCommand() {
+        String[] cmdline = commandString.toString().split(" ");
+        /*
+         * Note: static method call to Execute.runCommand does not run the given
+         * script here due to the setting of vmLauncher which acutally
+         * tries executing the script using Runtime.getRuntime().exec() method
+         * and this method cannot run the script without reference to the cmd or
+         * shell. (Similar with ExecTask)
+         * 
+         * So creating an instance of Execute class helps to disable the
+         * vmLauncher and an OS dependent shellLauncher will be available for
+         * the execution of the script.
+         */
+        // Make sure we replace the password on the command line before printing.
+        log("Executing: " + commandString.toString().replace(" " + password + " ", " *** "));
+        Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO,
+                Project.MSG_ERR));
+        exe.setAntRun(getProject());
+        exe.setCommandline(cmdline);
+        exe.setVMLauncher(false);
+        try {
+            int retval = exe.execute();
+            if (Execute.isFailure(retval)) {
+                throw new BuildException("Error: Script execution failure.");
+            }
+        } catch (IOException th) {
+            th.printStackTrace();
+            throw new BuildException("Error: Script execution failure.");
+        }
+    }
+
+    // ************************************* PRIVATE CLASSES
+    // ***************************************
+
+    /**
+     * <code>SCMCommandArgument</code> is a private class and represents a
+     * normal java bean which is used to hold the information related to SCM
+     * command arguments.
+     */
+    private class SCMCommandArgument {
+
+        private String fieldName;
+        private Object fieldValue;
+        private String commandArgument;
+        private Boolean required;
+
+        /**
+         * Create an instance of {@link SCMCommandArgument}.
+         * 
+         * @param fieldName
+         *            is the name of the task field
+         * @param commandArg
+         *            is the SCM command argument
+         * @param reqd
+         *            indicates the input command argument is mandatory or not.
+         */
+        protected SCMCommandArgument(String fieldName, String commandArg,
+                Boolean reqd, Object fieldValue) {
+            this.fieldName = fieldName;
+            this.commandArgument = commandArg;
+            this.required = reqd;
+            this.fieldValue = fieldValue;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/DeconfigureTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,106 @@
+/*
+ * 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.synergy.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * ANT wrapper task for the GSCM deconfigure.pl script.
+ * 
+ * @ant.task name="deconfigure" category="SCM"
+ */
+public class DeconfigureTask extends AbstractScmBaseTask {
+    // The attributes of this task
+    private Boolean considerBranchReleases;
+
+    /**
+     * Return the considerBranchReleases.
+     * 
+     * @return the considerBranchReleases.
+     */
+    public Boolean getConsiderBranchReleases() {
+        return considerBranchReleases;
+    }
+
+    /**
+     * Set if we want deconfigure.pl script to check for branch differences
+     * based on the 'included_releases' attribute of project.
+     * 
+     * @param considerBranchReleases
+     * @ant.not-required Default is no.
+     */
+    public void setconsiderBranchReleases(Boolean considerBranchReleases) {
+        this.considerBranchReleases = considerBranchReleases;
+        log("Set considerBranchReleases to " + considerBranchReleases);
+    }
+
+    /**
+     * Build a command list consisting of all the required and optional command
+     * arguments of the current task.
+     */
+    protected void buildCommandList() {
+        addCommandArg("database", "-d", true, getDatabase());
+        addCommandArg("password", "-P", true, getPassword());
+        addCommandArg("ccmProject", "-p", true, getCcmProject());
+        addCommandArg("considerBranchReleases", "-b",
+                getConsiderBranchReleases());
+    }
+
+    /**
+     * Method validates the given arguments.
+     */
+    protected void validateArguments() {
+        // Do nothing
+    }
+
+    /**
+     * Set the execution script.
+     * 
+     */
+    protected String getExecutionScript() {
+        return "deconfigure";
+    }
+
+    /**
+     * Method returns the correct verbosity level for the input choice.
+     * 
+     * @param choice
+     *            is the verbosity choice set by user.
+     * @return the verbosity level to set.
+     */
+    protected String getVerbosity(int choice) {
+        String cmd = "";
+        switch (choice) {
+            case 0 :
+                cmd = "-q ";
+                break;
+            case 1 :
+                cmd = "-V ";
+                break;
+            case 2 :
+                cmd = "-W ";
+                break;
+            default :
+                throw new BuildException(
+                        "Error: Verbosity level is not recognised. "
+                                + "Legal values are: 0 - quiet, 1 - verbose or 2 - very verbose");
+        }
+        return cmd;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/RBTTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,510 @@
+/*
+ * 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.synergy.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * ANT wrapper task for the GSCM rbt.pl script.
+ * 
+ * <pre>
+ * Deconfigure Only:
+ * 
+ * Usage: &lt;hlm:rebaseanddeconf database=&quot;${dbname}&quot;
+ *                              password=&quot;${UNIX-password}&quot; 
+ *                              verbosity=&quot;${0-3}&quot;
+ *                              ccmProject=&quot;${ccm.project.name}&quot; 
+ *                              release=&quot;${release.name}&quot;
+ *                              deconfigure=&quot;yes&quot; /&gt;
+ * </pre>
+ * 
+ * <pre>
+ * Rebaseline Only:
+ * 
+ * Usage:   &lt;hlm:rebaseanddeconf database=&quot;${dbname}&quot;
+ *                              password=&quot;${UNIX-password}&quot; 
+ *                              verbosity=&quot;${0-3}&quot;
+ *                              ccmProject=&quot;${ccm.project.name}&quot;
+ *                              release=&quot;${release.name}&quot; 
+ *                              releaseBaseline=&quot;yes&quot; 
+ *                              skipDeconfigure=&quot;yes&quot; /&gt;
+ * </pre>
+ * 
+ * <pre>
+ * Rebaseline with deconfigure:
+ * 
+ * Usage:   &lt;hlm:rebaseanddeconf database=&quot;${dbname}&quot;
+ *                              password=&quot;${UNIX-password}&quot; 
+ *                              verbosity=&quot;${0-3}&quot;
+ *                              ccmProject=&quot;${ccm.project.name}&quot;
+ *                              release=&quot;${release.name}&quot; 
+ *                              releaseBaseline=&quot;yes&quot; 
+ *                              deconfigure=&quot;yes&quot; /&gt;
+ * </pre>
+ * 
+ * @ant.task name="rebaseanddeconf" category="SCM"
+ */
+public class RBTTask extends AbstractScmBaseTask {
+
+    // The attributes of this task
+    private String baseline; // -B baselinename = Four-part name of existing
+    // baseline (incompatible with -p and -n)
+    private String version; // -v version = New project hierarchy version
+    private String release; // -r release = New release object name (Two-part
+    // name)
+    private String newBaselineName; // -n name = New baseline name
+
+    private Boolean releaseBaseline; // -R = Release the newly created baseline
+    private Boolean publish; // -P = Publish the newly created baseline
+    private Boolean deconfigure; // -s = Replace subprojects only (NO
+    // REBASELINE)
+    private Boolean leaveFoldersWritable; // -F = Don't freeze folders (Leave
+    // folders writable)
+    private Boolean enableTaskRebadgingGenericRelease; // -t = Enable task
+    // rebadging (associated
+    // modifiable tasks with
+    // generic release only)
+    private Boolean enableTaskRebadging; // -T = Enable task rebadging (all
+    // associated modifiable tasks)
+    private Boolean rebadgeObjectVersions; // -o = Rebadge object versions
+    // (requires ccm_admin)
+    private Boolean createBaselineForRollingReleaseTag; // -i = Create
+    // additional
+    // integration baseline
+    // for rolling-release
+    // tag
+    private Boolean skipDeconfigure; // -S = Do NOT replace subprojects (NO
+    // DECONFIGURE)
+    private Boolean active; // -a = Specified release remains active
+    private Boolean useBranchReleaseMethodology; // -b = Utilize branch release
+
+    // methodology
+
+    /**
+     * Return the baseline.
+     * 
+     * @return the baseline.
+     */
+    public String getBaseline() {
+        return baseline;
+    }
+
+    /**
+     * Set four-part name of existing baseline (incompatible with 'projectName'
+     * and 'baselineName' attributes) to be used by rebaseline.pl script.
+     * 
+     * @param baseline
+     *            is the baseline to set
+     * @ant.not-required
+     */
+    public void setBaseline(String baseline) {
+        this.baseline = baseline;
+        log("Set baseline to " + baseline);
+    }
+
+    /**
+     * Return the version.
+     * 
+     * @return the version.
+     */
+    public String getVersion() {
+        return version;
+    }
+
+    /**
+     * Set version of new project created.
+     * 
+     * @param version
+     *            is the version to set.
+     * @ant.not-required
+     */
+    public void setVersion(String version) {
+        this.version = version;
+        log("Set version to " + version);
+    }
+
+    /**
+     * Return the leaveFoldersWritable.
+     * 
+     * @return the leaveFoldersWritable.
+     */
+    public Boolean getLeaveFoldersWritable() {
+        return leaveFoldersWritable;
+    }
+
+    /**
+     * Set whether to leave the folders writable in the baseline project
+     * created.
+     * 
+     * @param leaveFoldersWritable
+     *            indicates whether to leave folders writable.
+     * @ant.not-required Default is no.
+     */
+    public void setLeaveFoldersWritable(Boolean leaveFoldersWritable) {
+        this.leaveFoldersWritable = leaveFoldersWritable;
+        log("Set leaveFoldersWritable to " + leaveFoldersWritable);
+    }
+
+    /**
+     * Return the rebadgeObjectVersions
+     * 
+     * @return the rebadgeObjectVersions.
+     */
+    public Boolean getRebadgeObjectVersions() {
+        return rebadgeObjectVersions;
+    }
+
+    /**
+     * Set whether to rebadge object versions in the rebaseline.pl script.
+     * 
+     * @param rebadgeObjectVersions
+     *            indicates whether to rebadge object versions to a given
+     *            release tag.
+     * @ant.not-required Default is no.
+     */
+    public void setRebadgeObjectVersions(Boolean rebadgeObjectVersions) {
+        this.rebadgeObjectVersions = rebadgeObjectVersions;
+        log("Set rebadgeObjectVersions to " + rebadgeObjectVersions);
+    }
+
+    /**
+     * Return the releaseBaseline.
+     * 
+     * @return the releaseBaseline.
+     */
+    public Boolean getReleaseBaseline() {
+        return releaseBaseline;
+    }
+
+    /**
+     * Set whether to release the newly created baseline or not.
+     * 
+     * @param releaseBaseline
+     *            indicates whether to release the newly created baseline
+     */
+    public void setReleaseBaseline(Boolean releaseBaseline) {
+        this.releaseBaseline = releaseBaseline;
+        log("Set releaseBaseline to " + releaseBaseline);
+    }
+
+    /**
+     * Return the publish.
+     * 
+     * @return the publish.
+     */
+    public Boolean getPublish() {
+        return publish;
+    }
+
+    /**
+     * Set whether to publish the newly created baseline or not.
+     * 
+     * @param publish
+     *            the publish to set
+     */
+    public void setPublish(Boolean publish) {
+        this.publish = publish;
+        log("Set publish to " + publish);
+    }
+
+    /**
+     * Return the createBaselineForRollingReleaseTag.
+     * 
+     * @return the createBaselineForRollingReleaseTag.
+     */
+    public Boolean getCreateBaselineForRollingReleaseTag() {
+        return createBaselineForRollingReleaseTag;
+    }
+
+    /**
+     * Set whether to create additional integration baseline for rolling-release
+     * tag.
+     * 
+     * @param createBaselineForRollingReleaseTag
+     * @ant.not-required Default is no.
+     */
+    public void setCreateBaselineForRollingReleaseTag(
+            Boolean createBaselineForRollingReleaseTag) {
+        this.createBaselineForRollingReleaseTag = createBaselineForRollingReleaseTag;
+        log("Set createBaselineForRollingReleaseTag to "
+                + createBaselineForRollingReleaseTag);
+    }
+
+    /**
+     * Return the enableTaskRebadgingGenericRelease.
+     * 
+     * @return the enableTaskRebadgingGenericRelease.
+     */
+    public Boolean getEnableTaskRebadgingGenericRelease() {
+        return enableTaskRebadgingGenericRelease;
+    }
+
+    /**
+     * Set enable task rebadging (associated modifiable tasks with generic
+     * release only). Not supported in rebaseline.pl
+     * 
+     * @param enableTaskRebadgingGenericRelease
+     *            the enableTaskRebadgingGenericRelease to set
+     */
+    public void setEnableTaskRebadgingGenericRelease(
+            Boolean enableTaskRebadgingGenericRelease) {
+        this.enableTaskRebadgingGenericRelease = enableTaskRebadgingGenericRelease;
+        log("Set enableTaskRebadgingGenericRelease to "
+                + enableTaskRebadgingGenericRelease);
+    }
+
+    /**
+     * Return the enableTaskRebadging
+     * 
+     * @return the enableTaskRebadging.
+     */
+    public Boolean getEnableTaskRebadging() {
+        return enableTaskRebadging;
+    }
+
+    /**
+     * Set enable task rebadging (all associated modifiable tasks). Not
+     * supported in rebaseline.pl
+     * 
+     * @param enableTaskRebadging
+     *            the enableTaskRebadging to set
+     */
+    public void setEnableTaskRebadging(Boolean enableTaskRebadging) {
+        this.enableTaskRebadging = enableTaskRebadging;
+        log("Set enableTaskRebadging to " + enableTaskRebadging);
+    }
+
+    /**
+     * Return the skipDeconfigure.
+     * 
+     * @return the skipDeconfigure.
+     */
+    public Boolean getSkipDeconfigure() {
+        return skipDeconfigure;
+    }
+
+    /**
+     * Set to skip deconfigure.
+     * 
+     * @param skipDeconfigure
+     *            the skipDeconfigure to set
+     */
+    public void setSkipDeconfigure(Boolean skipDeconfigure) {
+        this.skipDeconfigure = skipDeconfigure;
+        log("Set skipDeconfigure to " + skipDeconfigure);
+    }
+
+    /**
+     * Return the deconfigure
+     * 
+     * @return the deconfigure.
+     */
+    public Boolean getDeconfigure() {
+        return deconfigure;
+    }
+
+    /**
+     * Set deconfigure.
+     * 
+     * @param deconfigure
+     *            the deconfigure to set
+     */
+    public void setDeconfigure(Boolean deconfigure) {
+        this.deconfigure = deconfigure;
+        log("Set deconfigure to " + deconfigure);
+    }
+
+    /**
+     * Return the active.
+     * 
+     * @return the active.
+     */
+    public Boolean getActive() {
+        return active;
+    }
+
+    /**
+     * Set whether the current release is active or not.
+     * 
+     * @param active
+     *            the active to set
+     */
+    public void setActive(Boolean active) {
+        this.active = active;
+        log("Set active to " + active);
+    }
+
+    /**
+     * Return useBranchReleaseMethodology.
+     * 
+     * @return the useBranchReleaseMethodology.
+     */
+    public Boolean getUseBranchReleaseMethodology() {
+        return useBranchReleaseMethodology;
+    }
+
+    /**
+     * Set whether to utilize branch release methodology or not.
+     * 
+     * @param useBranchReleaseMethodology
+     *            is the boolean value to set.
+     * @ant.not-required Default is no.
+     */
+    public void setUseBranchReleaseMethodology(
+            Boolean useBranchReleaseMethodology) {
+        this.useBranchReleaseMethodology = useBranchReleaseMethodology;
+        log("Set useBranchReleaseMethodology to " + useBranchReleaseMethodology);
+    }
+
+    /**
+     * Return the release tag.
+     * 
+     * @return the release tag.
+     */
+    public String getRelease() {
+        return release;
+    }
+
+    /**
+     * Set release tag (Two-part name) for the release project created.
+     * 
+     * @param release
+     *            is the release tag to set
+     * @ant.not-required
+     */
+    public void setRelease(String release) {
+        this.release = release;
+        log("Set release to " + release);
+    }
+
+    /**
+     * Return the newBaselineName.
+     * 
+     * @return the newBaselineName.
+     */
+    public String getNewBaselineName() {
+        return newBaselineName;
+    }
+
+    /**
+     * Set new baseline name to use.
+     * 
+     * @param newBaselineName
+     *            is the new baseline name to set.
+     * @ant.not-required
+     */
+    public void setNewBaselineName(String newBaselineName) {
+        this.newBaselineName = newBaselineName;
+        log("Set newBaselineName to " + newBaselineName);
+    }
+
+    protected String getExecutionScript() {
+        return "rbt";
+    }
+
+    /**
+     * Build a command list consisting of all the required and optional command
+     * arguments of the current task.
+     */
+    protected void buildCommandList() {
+        addCommandArg("database", "-d", true, getDatabase());
+        addCommandArg("password", "-U", true, getPassword());
+        addCommandArg("ccmProject", "-p", getCcmProject());
+        addCommandArg("baseline", "-B", getBaseline());
+        addCommandArg("version", "-v", getVersion());
+        addCommandArg("releaseBaseline", "-R", getReleaseBaseline());
+        addCommandArg("publish", "-P", getPublish());
+        addCommandArg("deconfigure", "-s", getDeconfigure());
+        addCommandArg("leaveFoldersWritable", "-F", getLeaveFoldersWritable());
+        addCommandArg("enableTaskRebadgingGenericRelease", "-t",
+                getEnableTaskRebadgingGenericRelease());
+        addCommandArg("enableTaskRebadging", "-T", getEnableTaskRebadging());
+        addCommandArg("rebadgeObjectVersions", "-o", getRebadgeObjectVersions());
+        addCommandArg("createBaselineForRollingReleaseTag", "-i",
+                getCreateBaselineForRollingReleaseTag());
+        addCommandArg("active", "-a", getActive());
+        addCommandArg("skipDeconfigure", "-S", getSkipDeconfigure());
+        addCommandArg("useBranchReleaseMethodology", "-b",
+                getUseBranchReleaseMethodology());
+        addCommandArg("release", "-r", getRelease());
+        addCommandArg("newBaselineName", "-n", getNewBaselineName());
+    }
+
+    /**
+     * Method validates the given arguments.
+     */
+    protected void validateArguments() {
+
+        if (baseline != null
+                && (getCcmProject() != null || newBaselineName != null)) {
+            throw new BuildException(
+                    "Error: Option 'baseline' cannot be used with 'ccmProject' and 'newBaselineName'");
+        }
+
+        if (deconfigure != null && deconfigure && skipDeconfigure != null
+                && skipDeconfigure) {
+            throw new BuildException(
+                    "Error: Use option either 'deconfigure' or 'skipDeconfigure'");
+        }
+
+        if (deconfigure != null && deconfigure && release == null) {
+            throw new BuildException(
+                    "Error: Option 'release' is mandatory if 'deconfigure' is set");
+        }
+
+        if (publish != null && publish && releaseBaseline != null
+                && releaseBaseline) {
+            throw new BuildException(
+                    "Error: Use Option either 'publish' or 'releaseBaseline'");
+        }
+
+        if (enableTaskRebadging != null && enableTaskRebadging
+                && enableTaskRebadgingGenericRelease != null
+                && enableTaskRebadgingGenericRelease) {
+            throw new BuildException(
+                    "Error: Use Option either 'enableTaskRebadging' or 'enableTaskRebadgingGenericRelease'");
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected String getVerbosity(int choice) {
+        String cmd = "";
+        switch (choice) {
+            case 0 :
+                cmd = "-Q";
+                break;
+            case 1 :
+                cmd = "-V";
+                break;
+            case 2 :
+                cmd = "-I";
+                break;
+            case 3 :
+                cmd = "-W";
+                break;
+            default :
+                throw new BuildException("Error: Verbosity level is not recognised. "
+                        + "Legal values are: 0 - quiet, 1 - verbose, 2 - Interactive "
+                        + "or 3 - Walk-through Rehearsal");
+        }
+        return cmd;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/src/com/nokia/helium/synergy/ant/taskdefs/RebaselineTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,115 @@
+/*
+ * 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.synergy.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * ANT wrapper task for the GSCM rebaseline.pl script. &lt;hlm:rebaseline
+ * database="to1tobet"
+ * ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"
+ * password="test"/&gt;
+ * 
+ * @ant.task name="rebaseline" category="SCM"
+ */
+public class RebaselineTask extends RBTTask {
+    // The attributes of this task
+    private Boolean disableTaskRebadging;
+
+    /**
+     * Return disableTaskRebadging
+     * 
+     * @return the disableTaskRebadging.
+     */
+    public Boolean getDisableTaskRebadging() {
+        return disableTaskRebadging;
+    }
+
+    /**
+     * Set whether to disable task rebadging (incompatible with
+     * 'rebadgeObjectVersions' attribute) in the rebaseline.pl script.
+     * 
+     * @param disableTaskRebadging
+     * @ant.not-required Default is no.
+     */
+    public void setdisableTaskRebadging(boolean disableTaskRebadging) {
+        this.disableTaskRebadging = disableTaskRebadging;
+        log("Set disableTaskRebadging to " + disableTaskRebadging);
+    }
+
+    /**
+     * Set the execution script.
+     * 
+     */
+    protected String getExecutionScript() {
+        return "rebaseline";
+    }
+
+    /**
+     * Build a command list consisting of all the required and optional command
+     * arguments of the current task.
+     */
+    protected void buildCommandList() {
+        addCommandArg("database", "-d", true, getDatabase());
+        addCommandArg("password", "-P", true, getPassword());
+        addCommandArg("ccmProject", "-p", true, getCcmProject());
+        addCommandArg("release", "-r", getRelease());
+        addCommandArg("baseline", "-B", getBaseline());
+        addCommandArg("version", "-v", getVersion());
+        addCommandArg("newBaselineName", "-n", getNewBaselineName());
+        addCommandArg("releaseBaseline", "-R", getReleaseBaseline());
+        addCommandArg("leaveFolderswritable", "-w", getLeaveFoldersWritable());
+        addCommandArg("disableTaskRebadging", "-x", getDisableTaskRebadging());
+        addCommandArg("rebadgeObjectVersions", "-a", getRebadgeObjectVersions());
+        addCommandArg("useBranchReleaseMethodology", "-b",
+                getUseBranchReleaseMethodology());
+        addCommandArg("createBaselineForRollingReleaseTag", "-i",
+                getCreateBaselineForRollingReleaseTag());
+    }
+
+    /**
+     * Method returns the correct verbosity level for the input choice.
+     * 
+     * @param choice
+     *            is the verbosity choice set by user.
+     * @return the verbosity level to set.
+     */
+    protected String getVerbosity(int choice) {
+        String cmd = "";
+        switch (choice) {
+            case 0 :
+                cmd = "-q ";
+                break;
+            case 1 :
+                cmd = "-V ";
+                break;
+            default :
+                throw new BuildException("Error: Verbosity level is not recognised. "
+                        + "Legal values are: 0 - quiet, 1 - verbose.");
+        }
+        return cmd;
+    }
+
+    /**
+     * Method validates the given arguments.
+     */
+    protected void validateArguments() {
+        // Do nothing
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/tests/antunit/test_deconfigure_task.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_deconfigure_task.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test_deconfigure_task" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        Deconfigure testing targets for script deconfigure.pl
+    </description>
+    <property environment="env"/>
+    <taskdef resource="com/nokia/helium/synergy/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+  
+
+    <target name="test-deconfigure-no-arguments-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:deconfigure/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-deconfigure-task-database-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password ccmProject">
+            <hlm:deconfigure database="to1tobet"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+    </target>
+
+    <target name="test-deconfigure-task-ccmproject-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:deconfigure ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+    </target>
+
+    <target name="test-deconfigure-task-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database ccmProject">
+            <hlm:deconfigure password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set password to ******"/>
+    </target>
+
+    <target name="test-deconfigure-task-consider-branch-releases-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:deconfigure considerBranchReleases="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set considerBranchReleases to true"/>
+    </target>
+
+    <target name="test-deconfigure-task-verbosity-set-to-quiet-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:deconfigure verbosity="0"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 0"/>
+    </target>
+
+    <target name="test-deconfigure-task-verbosity-set-to-verbose-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:deconfigure verbosity="1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 1"/>
+    </target>
+
+    <target name="test-deconfigure-task-verbosity-set-to-very-verbose-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:deconfigure verbosity="2"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 2"/>
+    </target>
+
+    <target name="test-deconfigure-task-database-and-ccmproject-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password">
+            <hlm:deconfigure database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-deconfigure-task-database-and-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - ccmProject">
+            <hlm:deconfigure database="to1tobet" password="test"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-deconfigure-task-ccmproject-and-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database">
+            <hlm:deconfigure ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-deconfigure-task-all-mandatory-arguments-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:deconfigure database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+        <au:assertLogContains text="Set password to ******" />
+    </target>
+
+    <target name="test-deconfigure-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:deconfigure database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" considerBranchReleases="yes" verbosity="1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******" />
+        <au:assertLogContains text="Set considerBranchReleases to true" />
+        <au:assertLogContains text="Set verbosity to 1" />
+    </target>
+
+    <target name="test-deconfigure-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-and-verbosity-wrong-case">
+        <au:expectfailure expectedMessage="Error: Verbosity level is not recognised. Legal values are: 0 - quiet, 1 - verbose or 2 - very verbose">
+            <hlm:deconfigure database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" considerBranchReleases="no" verbosity="9"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1"/>
+        <au:assertLogContains text="Set password to ******" />
+        <au:assertLogContains text="Set considerBranchReleases to false" />
+        <au:assertLogContains text="Set verbosity to 9" />
+    </target>
+
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/tests/antunit/test_rebaseanddeconf_task.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_rebaseanddeconf_task.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test_rebaseanddeconf_task" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        Rebaseline and Deconfigure testing targets for script rbt.pl
+    </description>
+    <property environment="env"/>
+    <taskdef resource="com/nokia/helium/synergy/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+
+    <target name="test-rebaseanddeconf-no-arguments-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseanddeconf-task-database-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password">
+            <hlm:rebaseanddeconf database="to1tobet"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-ccmproject-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database">
+            <hlm:rebaseanddeconf password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set password to ******" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-release-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf release="tony/test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set release to tony/test" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-baseline-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-version-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf version="RnD_2007wk49"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set version to RnD_2007wk49" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-releasebaseline-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf releaseBaseline="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set releaseBaseline to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-leavefolders-writable-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf leaveFoldersWritable="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set leaveFoldersWritable to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-enabletask-rebadging-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf enableTaskRebadging="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set enableTaskRebadging to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-enabletask-rebadging-generic-release-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf enableTaskRebadgingGenericRelease="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set enableTaskRebadgingGenericRelease to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-rebadge-object-versions-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf rebadgeObjectVersions="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set rebadgeObjectVersions to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-newbaselinename-set-to-quiet-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf newBaselineName="shoephone-RnD_2007wk49_01project:co1train#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set newBaselineName to shoephone-RnD_2007wk49_01project:co1train#1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-use-branchrelease-methodology-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf useBranchReleaseMethodology="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set useBranchReleaseMethodology to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-create-baseline-for-rollingreleasetag-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf createBaselineForRollingReleaseTag="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set createBaselineForRollingReleaseTag to true" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-verbosity-set-to-quiet-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf verbosity="0"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 0" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-verbosity-set-to-verbose-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseanddeconf verbosity="1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-database-and-ccmproject-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password">
+            <hlm:rebaseanddeconf database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseanddeconf-task-database-and-baseline-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password">
+            <hlm:rebaseanddeconf database="to1tobet" baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+    </target>
+    
+    <target name="test-rebaseanddeconf-task-ccmproject-and-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database">
+            <hlm:rebaseanddeconf ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseanddeconf-task-baseline-and-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database">
+            <hlm:rebaseanddeconf baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+        <au:assertLogContains text="Set password to ******" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-with-ccmproject-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:rebaseanddeconf database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+        <au:assertLogContains text="Set password to ******" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-with-baseline-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:rebaseanddeconf database="to1tobet" baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+        <au:assertLogContains text="Set password to ******" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:rebaseanddeconf database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******"/>
+        <au:assertLogContains text="Set verbosity to 1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-and-verbosity-wrong-case">
+        <au:expectfailure expectedMessage="Error: Verbosity level is not recognised. Legal values are: 0 - quiet, 1 - verbose, 2 - Interactive or 3 - Walk-through Rehearsal">
+            <hlm:rebaseanddeconf database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="9"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******"/>
+        <au:assertLogContains text="Set verbosity to 9" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-database-password-ccmproject-and-baseline-set-case">
+        <au:expectfailure expectedMessage="Error: Option 'baseline' cannot be used with 'ccmProject' and 'newBaselineName'">
+            <hlm:rebaseanddeconf database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="1"
+                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******"/>
+        <au:assertLogContains text="Set verbosity to 1" />
+        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-database-password-baseline-newbaselineName-set-case">
+        <au:expectfailure expectedMessage="Error: Option 'baseline' cannot be used with 'ccmProject' and 'newBaselineName'">
+            <hlm:rebaseanddeconf database="to1tobet" password="test" verbosity="1"
+                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" newBaselineName="shoephone-RnD_2007wk49_01project:co1train#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******"/>
+        <au:assertLogContains text="Set verbosity to 1" />
+        <au:assertLogContains text="Set newBaselineName to shoephone-RnD_2007wk49_01project:co1train#1" />
+    </target>
+
+    <target name="test-rebaseanddeconf-task-database-password-baseline-enabletaskrebadging-and-enabletaskrebadginggenericrelease-set-case">
+        <au:expectfailure expectedMessage="Error: Use Option either 'enableTaskRebadging' or 'enableTaskRebadgingGenericRelease'">
+            <hlm:rebaseanddeconf database="to1tobet" password="test" verbosity="1"
+                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" enableTaskRebadging="yes" enableTaskRebadgingGenericRelease="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******" />
+        <au:assertLogContains text="Set verbosity to 1" />
+        <au:assertLogContains text="Set enableTaskRebadging to true" />
+        <au:assertLogContains text="Set enableTaskRebadgingGenericRelease to true" />
+    </target>
+    
+    <target name="test-rebaseanddeconf-task-database-password-baseline-replacesubprojects-and-dontreplacesubprojects-set-case">
+        <au:expectfailure expectedMessage="Error: Use option either 'deconfigure' or 'skipDeconfigure'">
+            <hlm:rebaseanddeconf database="to1tobet" password="test" verbosity="1"
+                      baseline="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" deconfigure="yes" skipDeconfigure="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set baseline to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******"/>
+        <au:assertLogContains text="Set verbosity to 1" />
+        <au:assertLogContains text="Set deconfigure to true" />
+        <au:assertLogContains text="Set skipDeconfigure to true" />
+    </target>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/tests/antunit/test_rebaseline_task.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_rebaseline_task.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test_rebaseline_task" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        Rebaseline testing targets for script rebaseline.pl
+    </description>
+    <property environment="env"/>
+    <taskdef resource="com/nokia/helium/synergy/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+
+
+    <target name="test-rebaseline-no-arguments-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseline-task-database-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password ccmProject">
+            <hlm:rebaseline database="to1tobet"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+    </target>
+
+    <target name="test-rebaseline-task-ccmproject-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password">
+            <hlm:rebaseline ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+    </target>
+
+    <target name="test-rebaseline-task-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database ccmProject">
+            <hlm:rebaseline password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set password to ******" />
+    </target>
+
+    <target name="test-rebaseline-task-release-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline release="tony/test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set release to tony/test" />
+    </target>
+
+    <target name="test-rebaseline-task-baseline-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline baseline="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set baseline to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+    </target>
+
+    <target name="test-rebaseline-task-version-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline version="RnD_2007wk49"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set version to RnD_2007wk49" />
+    </target>
+
+    <target name="test-rebaseline-task-releasebaseline-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline releaseBaseline="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set releaseBaseline to true" />
+    </target>
+
+    <target name="test-rebaseline-task-leavefolders-writable-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline leaveFoldersWritable="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set leaveFoldersWritable to true" />
+    </target>
+
+    <target name="test-rebaseline-task-disable-taskrebadging-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline disableTaskRebadging="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set disableTaskRebadging to true" />
+    </target>
+
+    <target name="test-rebaseline-task-rebadgeobjectversions-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline rebadgeObjectVersions="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set rebadgeObjectVersions to true" />
+    </target>
+
+    <target name="test-rebaseline-task-newbaselineName-set-to-quiet-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline newBaselineName="shoephone-RnD_2007wk49_01project:co1train#1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set newBaselineName to shoephone-RnD_2007wk49_01project:co1train#1" />
+    </target>
+
+    <target name="test-rebaseline-task-usebranchrelease-methodology-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline useBranchReleaseMethodology="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set useBranchReleaseMethodology to true" />
+    </target>
+
+    <target name="test-rebaseline-task-create-baseline-for-rollingreleasetag-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline createBaselineForRollingReleaseTag="yes"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set createBaselineForRollingReleaseTag to true" />
+    </target>
+
+    <target name="test-rebaseline-task-verbosity-set-to-quiet-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline verbosity="0"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 0" />
+    </target>
+
+    <target name="test-rebaseline-task-verbosity-set-to-verbose-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database password ccmProject">
+            <hlm:rebaseline verbosity="1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set verbosity to 1" />
+    </target>
+
+    <target name="test-rebaseline-task-database-and-ccmproject-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - password">
+            <hlm:rebaseline database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseline-task-database-and-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - ccmProject">
+            <hlm:rebaseline database="to1tobet" password="test"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseline-task-ccmproject-and-password-set-case">
+        <au:expectfailure expectedMessage="Error: mandatory attributes are not defined - database">
+            <hlm:rebaseline ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+    </target>
+
+    <target name="test-rebaseline-task-all-mandatory-arguments-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:rebaseline database="to1tobet" ccmProject="helium-to1tobet#helium_4.49:project:vc1s60p1#1" password="test"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to helium-to1tobet#helium_4.49:project:vc1s60p1#1" />
+        <au:assertLogContains text="Set password to ******"/>
+    </target>
+
+    <target name="test-rebaseline-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-case">
+        <au:expectfailure expectedMessage="Error: Script execution failure.">
+            <hlm:rebaseline database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="1"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******" />
+        <au:assertLogContains text="Set verbosity to 1" />
+    </target>
+
+    <target name="test-rebaseline-task-all-mandatory-arguments-and-optional-arguments-given-but-password-wrong-and-verbosity-wrong-case">
+        <au:expectfailure expectedMessage="Error: Verbosity level is not recognised. Legal values are: 0 - quiet, 1 - verbose.">
+            <hlm:rebaseline database="to1tobet" ccmProject="symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" password="test" verbosity="9"/>
+        </au:expectfailure>
+        <au:assertLogContains text="Set database to to1tobet" />
+        <au:assertLogContains text="Set ccmProject to symbiantools-to1tobet#symbiantools_08_w34:project:ccm51#1" />
+        <au:assertLogContains text="Set password to ******" />
+        <au:assertLogContains text="Set verbosity to 9" />
+    </target>
+
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/tests/bld.sh	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+#
+# Copyright (c) 2009 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: 
+#
+
+if [ -f ~/.bashrc ] ; then
+    . ~/.bashrc
+fi
+ant $*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/tests/build.bat	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,31 @@
+@echo off
+
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: 
+rem
+
+setlocal
+if not defined JAVA_6_HOME (
+set TESTED_JAVA=C:\Apps\j2sdk_1.6.0_02
+) ELSE  set TESTED_JAVA=%JAVA_6_HOME%
+if exist %TESTED_JAVA% (set JAVA_HOME=%TESTED_JAVA%)
+call ant %*
+if "%ERRORLEVEL%" neq "0" (goto error)
+endlocal
+goto :eof
+
+:error
+endlocal
+if "%OS%"=="Windows_NT" color 00
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/synergy/tests/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="helium-synergy" xmlns:au="antlib:org.apache.ant.antunit">
+    <description>Helium antlib legacy tests.</description>
+    
+    <import file="${builder.dir}/java/test-macros.ant.xml"/>
+</project>
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageMap.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/PackageMap.java	Wed Jun 16 16:51:40 2010 +0300
@@ -47,20 +47,20 @@
      * @throws PackageMapParsingException in case of error
      */
     public PackageMap(File file) throws PackageMapParsingException {
-         try {
-             DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-             Document doc = builder.parse(file);
-             if (!doc.getDocumentElement().getNodeName().equals("PackageMap")) {
-                 throw new PackageMapParsingException("Invalid XML format for " + file.getAbsolutePath() + " root element must be PackageMap");
-             }
-             if (!doc.getDocumentElement().hasAttribute("root")) {
-                 throw new PackageMapParsingException("root attribute under element " + doc.getDocumentElement().getTagName() + " is missing in file: " + file);
-             }
-             if (!doc.getDocumentElement().hasAttribute("layer")) {
-                 throw new PackageMapParsingException("layer attribute under element " + doc.getDocumentElement().getTagName() + " is missing in file: " + file);
-             }
-             setRoot(doc.getDocumentElement().getAttribute("root"));
-             setLayer(doc.getDocumentElement().getAttribute("layer"));
+        try {
+            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+            Document doc = builder.parse(file);
+            if (!doc.getDocumentElement().getNodeName().equals("PackageMap")) {
+               throw new PackageMapParsingException("Invalid XML format for " + file.getAbsolutePath() + " root element must be PackageMap");
+            }
+            if (!doc.getDocumentElement().hasAttribute("root")) {
+               throw new PackageMapParsingException("root attribute under element " + doc.getDocumentElement().getTagName() + " is missing in file: " + file);
+            }
+            if (!doc.getDocumentElement().hasAttribute("layer")) {
+               throw new PackageMapParsingException("layer attribute under element " + doc.getDocumentElement().getTagName() + " is missing in file: " + file);
+            }
+            setRoot(doc.getDocumentElement().getAttribute("root"));
+            setLayer(doc.getDocumentElement().getAttribute("layer"));
         } catch (ParserConfigurationException e) {
             throw new PackageMapParsingException("Error from the XML parser configuration: " + e.getMessage(), e);
         } catch (SAXException e) {
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -27,6 +27,8 @@
     <taskdef name="downgradeSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.DowngradeTask"/>
     <taskdef name="createPackageMapping" classname="com.nokia.helium.sysdef.ant.taskdefs.CreatePackageMappingTask"/>
     <taskdef name="createRootSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.CreateRootSysdefTask"/>
+    <taskdef name="filterSysdef" classname="com.nokia.helium.sysdef.ant.taskdefs.FilterTask"/>
     
     <!-- Type definition -->
+    <typedef name="sysdefFilterSet" classname="com.nokia.helium.sysdef.ant.types.FilterSet"/>
 </antlib>
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreatePackageMappingTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreatePackageMappingTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -76,7 +76,6 @@
     private Map<File, File> pkgMapping = new HashMap<File, File>();
     private File epocroot;
     private File destFile;
-    private Map<File, File> pkgQualityMapping = new HashMap<File, File>();
     private String filteredDirSet;
 
     /**
@@ -84,75 +83,50 @@
      * @param pkgMapFile a pointer to a package map file.
      * @throws PackageMapParsingException 
      */
-    protected void retrievePackageMapping(File pkgMapFile) throws PackageMapParsingException {
+    protected void retrievePackageMapping(File pkgMapFile, List<File> filterDirs) throws PackageMapParsingException {
         PackageMap parser = new PackageMap(pkgMapFile);
-        log("parent file: " + pkgMapFile.getParentFile());
+        log("parent file: " + pkgMapFile.getParentFile(), Project.MSG_DEBUG);
         log("parent file: " + getEpocroot() + parser.getRoot() + "/" + parser.getLayer() +
-                "/" + pkgMapFile.getParentFile().getName());
-        pkgMapping.put(pkgMapFile.getParentFile(), 
-                new File(getEpocroot(), parser.getRoot() + "/" + parser.getLayer() +
+                "/" + pkgMapFile.getParentFile().getName(), Project.MSG_DEBUG);
+        if (filterDirs == null) {
+            pkgMapping.put(pkgMapFile.getParentFile(), 
+                    new File(getEpocroot(), parser.getRoot() + "/" + parser.getLayer() +
                         "/" + pkgMapFile.getParentFile().getName()));
+        } else {
+            for (File dir : filterDirs) {
+                if (pkgMapFile.getParentFile().equals(dir)) {
+                    pkgMapping.put(pkgMapFile.getParentFile(), 
+                            new File(getEpocroot(), parser.getRoot() + "/" + parser.getLayer() +
+                                "/" + pkgMapFile.getParentFile().getName()));
+                    return;
+                }
+            }
+        }
     }
 
-    protected void createIniFile() throws IOException {
-        File baseQualityMappingFolder = destFile.getParentFile();
-        if (!baseQualityMappingFolder.exists()) {
-            throw new BuildException("Folder not exists: " 
-                    + baseQualityMappingFolder);
-        }
+    @SuppressWarnings("unchecked")
+    protected List<File> getFilterDir() throws IOException {
         if (filteredDirSet != null) {
-            Hashtable references = getProject().getReferences();
+            Hashtable<String, Object> references = getProject().getReferences();
             Object filteredDirSetObject = references.get(filteredDirSet);
-            log("filteredDirSetObject: " + filteredDirSetObject);
             if (filteredDirSetObject != null) {
-                if (! (filteredDirSetObject instanceof DirSet)) {
-                    throw new BuildException ("filteredDirSet is not of type "
-                            + "fileset");
+                if (!(filteredDirSetObject instanceof DirSet)) {
+                    throw new BuildException("filteredDirSet is not of type "
+                            + "dirset");
                 }
                 List<File> fileList = new ArrayList<File>();
                 DirSet dset = (DirSet)filteredDirSetObject;
                 DirectoryScanner ds = dset.getDirectoryScanner(getProject());
                 String[] includedFiles = ds.getIncludedDirectories();
-                log("includedFiles.size: " + includedFiles.length);
-                for ( String file : includedFiles ) {
+                for (String file : includedFiles) {
                     fileList.add(new File(ds.getBasedir(), file));
-                    log("includedfile: " + file);
                 }
-                Properties properties = new Properties();
-                for (File qualityDir : fileList) {
-                    log("qualityDir: " + qualityDir, 
-                            Project.MSG_DEBUG);
-                    for (File key : pkgMapping.keySet()) {
-                        log("pkgMapping:key: " + key, 
-                                Project.MSG_DEBUG);
-                        if ((qualityDir.getAbsolutePath()).equals(key.getAbsolutePath())) {
-                            String replacedKey = key.getAbsolutePath().replace('\\', '/');
-                            String replacedValue = 
-                                pkgMapping.get(key).getAbsolutePath().replace('\\', '/');
-                            properties.setProperty(replacedKey, 
-                                    replacedValue);
-                        }
-                    }
-                }
-                if (properties.isEmpty() ) {
-                    log("No mapping found for quality dir input: " +
-                            filteredDirSet, Project.MSG_WARN);
-                    return;
-                }
-                log("Creating " + destFile);
-                FileOutputStream fos = new FileOutputStream(destFile);
-                properties.store(fos, "DO NOT EDIT - File generated automatically");
-                fos.close();
-                return;
+                return fileList;
             } else {
-                log("filteredDirSet is not valid, using default mapping", 
-                        Project.MSG_WARN);
+                throw new BuildException("Id '" + filteredDirSet + "' doesn't reference a type.");                
             }
-        } else {
-            log("filterDirSet attribute is not set, using default mapping ",
-                    Project.MSG_WARN);
-            createDefaultIniFile(destFile);
         }
+        return null;
     }
     /**
      * Generates the ini file.
@@ -160,12 +134,13 @@
      * @throws IOException in case of error while generating the file.
      */
     @SuppressWarnings("unchecked")
-    protected void createDefaultIniFile(File mappingFile) throws IOException {
+    protected void createIniFile(File mappingFile) throws IOException {
+        List<File> filterDirs = getFilterDir();
         for (ResourceCollection rc : resourceCollections) {
             Iterator<Resource> ri = (Iterator<Resource>)rc.iterator();
             while (ri.hasNext()) {
-                Resource r = ri.next();
-                File pkgFile = new File(r.toString()); // toString is representing the abs path
+                Resource resource = ri.next();
+                File pkgFile = new File(resource.toString()); // toString is representing the abs path
                 log("Checking " + pkgFile.getName(), Project.MSG_DEBUG);
                 if (pkgFile.getName().equalsIgnoreCase(PACKAGE_DEFINITION_FILENAME) 
                         && pkgFile.exists()) {
@@ -176,14 +151,15 @@
                     if (pkgMapFile.exists()) {
                         log("Found package: " + pkgFile);
                         try {
-                            retrievePackageMapping(pkgMapFile);
+                            retrievePackageMapping(pkgMapFile, filterDirs);
                         } catch (PackageMapParsingException e) {
                             log(e.getMessage(), Project.MSG_ERR);
                             if (shouldFailOnError()) {
                                 throw new BuildException(e.getMessage(), e);
                             }
                         }
-                    } else {
+                    } else if (!(new File(pkgFile.getParentFile(),
+                            "../../" + PACKAGE_MAP_FILENAME).exists())) {
                         log("Could not find: " + pkgMapFile.getAbsolutePath(), 
                                 Project.MSG_ERR);
                         if (shouldFailOnError()) {
@@ -216,6 +192,10 @@
             properties.setProperty(replacedKey, 
                     replacedValue);
         }
+        if (properties.isEmpty() && filteredDirSet != null) {
+            log("Empty mapping after filtering (filter: " +
+                    filteredDirSet + ")", Project.MSG_WARN);
+        }
         log("Creating " + mappingFile);
         FileOutputStream fos = new FileOutputStream(mappingFile);
         properties.store(fos, "DO NOT EDIT - File generated automatically");
@@ -230,14 +210,11 @@
             throw new BuildException("The 'epocroot' attribute is not defined");
         }
         if (destFile == null) {
-            throw new BuildException("destFile is must");
+            throw new BuildException("The 'destFile' attribute is not defined");
         }
         
-        
         try {
-            if (destFile != null) {
-                createIniFile();
-            }
+            createIniFile(destFile);
         } catch (FileNotFoundException e) {
             throw new BuildException("Error generating the output file: " + e.getMessage(), e);
         } catch (IOException e) {
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreateRootSysdefTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/CreateRootSysdefTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -65,6 +65,7 @@
     private Map<String, List<String>> layers = new HashMap<String, List<String>>();
     private File epocroot;
     private boolean failOnError = true;
+    private boolean checkPackageExists;
     private File template;
 
     /**
@@ -86,30 +87,55 @@
         for (ResourceCollection rc : resourceCollections) {
             Iterator<Resource> ri = (Iterator<Resource>)rc.iterator();
             while (ri.hasNext()) {
-                Resource r = ri.next();
-                File pkgDefFile = new File(r.toString());
-                log("pkgDefFile :" + pkgDefFile);
+                Resource resource = ri.next();
+                File pkgDefFile = new File(resource.toString());
+                log("Package definition file: " + pkgDefFile);
                 if (!pkgDefFile.exists() || 
                         !(pkgDefFile.getName().equalsIgnoreCase(
                                 CreatePackageMappingTask.PACKAGE_DEFINITION_FILENAME))) {
                     throw new BuildException("Missing Package Definition file");
                 }
-                File pkgDir = new File(r.toString()).getParentFile();
+                File pkgDir = pkgDefFile.getParentFile();
                 File pkgMapFile  = new File(pkgDir, CreatePackageMappingTask.PACKAGE_MAP_FILENAME);
                 try {
                     if (pkgMapFile.exists()) {
+                        log("Package map file: " + pkgMapFile);
+                        if (!checkPackageExists) {
                             addPackage(pkgMapFile, pkgDir.getName());
-                            log("Adding: " + pkgMapFile, Project.MSG_DEBUG);                        
+                        } else {
+                            PackageMap pkgMap = new PackageMap(pkgMapFile);
+                            File destPkg = new File(epocroot, pkgMap.getRoot() + File.separator +
+                                    pkgMap.getLayer() + File.separator + pkgDir.getName() + File.separator +
+                                    CreatePackageMappingTask.PACKAGE_DEFINITION_FILENAME);
+                            if (destPkg.exists()) {
+                                addPackage(pkgMapFile, pkgDir.getName());
+                            } else {
+                                log("Could not find " + destPkg.getAbsolutePath() +
+                                        " so entry is not added to the root system definition.", Project.MSG_ERR);
+                            }
+                        }
                     } else {
-                        pkgMapFile = new File(pkgDir, "/../../" + CreatePackageMappingTask.PACKAGE_MAP_FILENAME);
-                        log("pkgMapFile: " + pkgMapFile);
-                        File base1File = new File(r.toString()).getParentFile();
-                        String base1 = base1File.getName();
-                        log("base1: " + base1);
-                        String base2 = base1File.getParentFile().getName();
-                        log("base2: " + base2);
+                        pkgMapFile = new File(pkgDir.getParentFile().getParentFile(), CreatePackageMappingTask.PACKAGE_MAP_FILENAME);
+                        log("Package map file: " + pkgMapFile);
                         if (pkgMapFile.exists()) {
-                            addPackage(pkgMapFile, base2 + "/" + base1);
+                            if (!checkPackageExists) {
+                                addPackage(pkgMapFile, pkgDir.getName());
+                            } else {
+                                PackageMap pkgMap = new PackageMap(pkgMapFile);
+                                File destPkg = new File(epocroot, pkgMap.getRoot() + File.separator +
+                                        pkgMap.getLayer() + File.separator +
+                                        pkgMapFile.getParentFile().getName() + File.separator +
+                                        pkgDir.getParentFile().getName() + File.separator + pkgDir.getName() +
+                                        File.separator +
+                                        CreatePackageMappingTask.PACKAGE_DEFINITION_FILENAME);
+                                if (destPkg.exists()) {
+                                    addPackage(pkgMapFile, pkgDir.getParentFile().getName() +
+                                            File.separator + pkgDir.getName());
+                                } else {
+                                    log("Could not find " + destPkg.getAbsolutePath() +
+                                            " so entry is not added to the root system definition.", Project.MSG_ERR);
+                                }
+                            }
                         } else {
                             log("Could not find: " + pkgMapFile.toString(), Project.MSG_ERR);
                             if (shouldFailOnError()) {
@@ -133,6 +159,7 @@
 
     private void addPackage(File pkgMapFile, String pkgPath) throws 
         PackageMapParsingException {
+        log("Adding: " + pkgMapFile, Project.MSG_DEBUG);
         // Adding the package in the structure.
         PackageMap pkgMap = new PackageMap(pkgMapFile);
         if (!roots.containsKey(pkgMap.getRoot())) {
@@ -196,6 +223,16 @@
     public boolean shouldFailOnError() {
         return failOnError;
     }
+
+    /**
+     * Defines if the task should check the existence of the 
+     * target package_definition.xml under epocroot.
+     * @param checkPackageExists
+     * @ant.not-required Default false
+     */
+    public void setCheckPackageExists(boolean checkPackageExists) {
+        this.checkPackageExists = checkPackageExists;
+    }
     
     /**
      * Support of nested resource collection like path or fileset.
@@ -278,7 +315,7 @@
         String rel = getEpocroot().toURI().relativize(getDestFile().getParentFile().toURI()).getPath();
         String[] relArray = rel.split("/"); // This is an URI not a File.
         rel = "";
-        for (String e : relArray) {
+        for (String string : relArray) {
             rel += ".." + File.separatorChar; 
         }
         return rel;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/FilterTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,141 @@
+/*
+* 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.sysdef.ant.taskdefs;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.util.FileUtils;
+
+import com.nokia.helium.sysdef.ant.types.Filter;
+import com.nokia.helium.sysdef.ant.types.FilterSet;
+
+/**
+ * <p>This task allows to do the filtering operation on system definition file v3.0.</p>
+ * 
+ * <p>The following example shows how you can join the X:\layer.sysdef.xml under
+ * X:\filtered_layer.sysdef.xml.</p>
+ * 
+ * E.g:
+ * <pre>
+ *   &lt;hlm:filterSysdef epocroot=&quot;X:\&quot; srcfile=&quot;X:\layer.sysdef.xml&quot; 
+ *                      destfile=&quot;X:\filtered_layer.sysdef.xml&quot;&gt;
+ *       &lt;filterset&gt; 
+ *           &lt;filter filter=&quot;test&quot; type=&quot;has&quot; /&gt; 
+ *       &lt;/filterset&gt; 
+ *   &lt;/hlm:filterSysdef&gt;
+ * </pre>
+ *
+ * For more information about system definition file v3.0 please check 
+ * <a href="http://developer.symbian.org/wiki/index.php/System_Definition">http://developer.symbian.org/wiki/index.php/System_Definition</a>.
+ *
+ * @ant.task name="filterSysdef" category="Sysdef"
+ */
+public class FilterTask extends AbstractSydefTask {
+    private static final String XSLT = "sf/os/buildtools/bldsystemtools/sysdeftools/filtering.xsl";
+    private List<FilterSet> filterSets = new ArrayList<FilterSet>();
+    
+    /**
+     * Running the filtering operation on src file and put the result in dest file.
+     * @param src the source file
+     * @param dest the destination file
+     * @param filter the filter to use
+     * @param filterType the filter type to use (e.g has, only, with)
+     */
+    protected void filter(File src, File dest, String filter, String filterType) {
+        Map<String, String> params = new Hashtable<String, String>();
+        params.put("filter-type", filterType);
+        params.put("filter", filter);
+        transform(params);
+    }
+
+    /**
+     * Create a FilterSet object to store filters.
+     * @return a new FilterSet object
+     */
+    public FilterSet createFilterSet() {
+        FilterSet filterset = new FilterSet();
+        filterSets.add(filterset);
+        return filterset;
+    }
+
+    /**
+     * Add a FilterSet object.
+     */
+    public void add(FilterSet filterset) {
+        filterSets.add(filterset);
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void execute() {
+        check();
+        if (filterSets.isEmpty()) {
+            throw new BuildException("You must define at least one nested filterset element.");
+        }
+        log("Filtering " + this.getSrcFile());
+        for (FilterSet filterSet : filterSets) {
+            if (filterSet.isReference()) {
+                filterSet = (FilterSet)filterSet.getRefid().getReferencedObject();
+            }
+            List<File> toDelete = new ArrayList<File>();
+            try {
+                File src = this.getSrcFile();
+                File dst = null;
+                for (Filter filter : filterSet.getFilters()) {
+                    if (filter.getFilter() == null) {
+                        throw new BuildException("'filter' attribute is not defined.");
+                    }
+                    dst = File.createTempFile("sysdef", ".xml", this.getEpocroot());
+                    toDelete.add(dst);
+                    filter(src, dst, filter.getFilter(), filter.getType());
+                    // Dest is the input for next loop.
+                    src = dst;
+                }
+                if (dst != null) {
+                    log("Creating " + this.getDestFile());
+                    FileUtils.getFileUtils().copyFile(dst, getDestFile());
+                } else {
+                    // If nothing to do it is just identity, 
+                    // so copying the source file
+                    log("Creating " + this.getDestFile());
+                    FileUtils.getFileUtils().copyFile(getSrcFile(), getDestFile());
+                }
+            } catch (IOException e) {
+                throw new BuildException(e.getMessage(), e);
+            } finally {
+                for (File file : toDelete) {
+                    file.delete();
+                }
+            }
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    File getXsl() {
+        return new File(this.getEpocroot(), XSLT);
+    }
+}
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/MergeTask.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/taskdefs/MergeTask.java	Wed Jun 16 16:51:40 2010 +0300
@@ -101,8 +101,8 @@
                 for (ResourceCollection rc : resourceCollections) {
                     Iterator<Resource> ri =  (Iterator<Resource>)rc.iterator();
                     while (ri.hasNext()) {
-                        Resource r = ri.next();
-                        File rFile = new File(r.toString());
+                        Resource resource = ri.next();
+                        File rFile = new File(resource.toString());
                         if (first) {
                             log("Merging " + rFile);
                             tempFile.delete();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/Filter.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* 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.sysdef.ant.types;
+
+/**
+ * This type defines a system definition filter.
+ *
+ */
+public class Filter {
+    private String filter;
+    private String type = "has";
+
+    /**
+     * Define the filter
+     * @param filter the filter string.
+     */
+    public void setFilter(String filter) {
+        this.filter = filter;
+    }
+    
+    /**
+     * Get the filter.
+     */
+    public String getFilter() {
+        return filter;
+    }
+
+    /**
+     * Define the filter type
+     * @param type
+     * @ant.not-required Default has.
+     */
+    public void setType(SydefFilterTypeEnum type) {
+        this.type = type.getValue();
+    }
+
+    /**
+     * Get the filter type.
+     * @return
+     */
+    public String getType() {
+        return type;
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/FilterSet.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* 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.sysdef.ant.types;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.types.DataType;
+
+/**
+ * This Ant type defines a set of system definition
+ * filters.
+ *
+ */
+public class FilterSet extends DataType {
+    private List<Filter> filters = new ArrayList<Filter>();
+    
+    /**
+     * Create a new nested filter.
+     */
+    public Filter createFilter() {
+        Filter filter = new Filter();
+        filters.add(filter);
+        return filter;
+    }
+    
+    /**
+     * Get the list of filter
+     * @return a list of filters
+     */
+    public List<Filter> getFilters() {
+        return filters;
+    }
+    
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/src/com/nokia/helium/sysdef/ant/types/SydefFilterTypeEnum.java	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* 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.sysdef.ant.types;
+
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * This class defines the keyword supported by the type
+ * attribute of the Filter class.
+ *
+ * It currenly defines the following keywords: only, with, has.
+ */
+public class SydefFilterTypeEnum extends EnumeratedAttribute {
+    private String[] values = {"only", "with", "has"};
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String[] getValues() {
+        return values;
+    }
+}
--- a/buildframework/helium/sf/java/sysdef/tests/antunit/test_create_root_sysdef.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/antunit/test_create_root_sysdef.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 
 ============================================================================ 
-Name        : test_mapping_file_creation.ant.xml 
+Name        : test_create_root_sysdef.ant.xml 
 Part of     : Helium AntLib
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -64,7 +64,7 @@
         <au:expectfailure message="Must fail in case of invalid destFile">
             <hlm:createRootSysdef destFile="${epocroot.temp}/" epocroot="${epocroot}">
                 <fileset dir="${epocroot}">
-                    <include name="**/valid_package/package_definition.xml" />
+                    <include name="valid_package/package_definition.xml" />
                 </fileset>
             </hlm:createRootSysdef>
         </au:expectfailure>
@@ -84,7 +84,7 @@
     <target name="test-create-root-sysdef-single-root">
         <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot}">
             <fileset dir="${epocroot}">
-                <include name="**/valid_package/package_definition.xml" />
+                <include name="valid_package/package_definition.xml" />
             </fileset>
         </hlm:createRootSysdef>
         <au:assertFileExists file="${epocroot.temp}/sysdef_model.xml" />
@@ -102,8 +102,8 @@
     <target name="test-create-root-sysdef-dual-root">
         <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot}">
             <fileset dir="${epocroot}">
-                <include name="**/valid_package/package_definition.xml" />
-                <include name="**/valid_package_root2/package_definition.xml" />
+                <include name="valid_package/package_definition.xml" />
+                <include name="valid_package_root2/package_definition.xml" />
             </fileset>
         </hlm:createRootSysdef>
         <au:assertLogContains text="Creating ${epocroot.temp}${file.separator}sysdef_model.xml" />
@@ -122,8 +122,8 @@
         <au:expectfailure message="Must fail if an pkgdata file is invalid.">
             <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot}">
                 <fileset dir="${epocroot}">
-                    <include name="**/valid_package/package_definition.xml" />
-                    <include name="**/invalid_pkg_data/package_definition.xml" />
+                    <include name="valid_package/package_definition.xml" />
+                    <include name="invalid_pkg_data/package_definition.xml" />
                 </fileset>
             </hlm:createRootSysdef>
         </au:expectfailure>
@@ -134,8 +134,8 @@
         <au:expectfailure message="Must fail if an pkgdata file is missing.">
             <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot}">
                 <fileset dir="${epocroot}">
-                    <include name="**/valid_package/package_definition.xml" />
-                    <include name="**/missing_data_file_pkg/package_definition.xml" />
+                    <include name="/valid_package/package_definition.xml" />
+                    <include name="missing_data_file_pkg/package_definition.xml" />
                 </fileset>
             </hlm:createRootSysdef>
         </au:expectfailure>
@@ -161,7 +161,7 @@
             epocroot="${epocroot}"
             template="${epocroot}/template.txt.ftl">
             <fileset dir="${epocroot}">
-                <include name="**/valid_package/package_definition.xml" />
+                <include name="valid_package/package_definition.xml" />
             </fileset>
         </hlm:createRootSysdef>
         <au:assertFileExists file="${epocroot.temp}/sysdef_model.txt" />
@@ -177,10 +177,70 @@
             epocroot="${epocroot}" failonerror="false"
             template="${epocroot}/faulty_template.txt.ftl">
             <fileset dir="${epocroot}">
-                <include name="**/valid_package/package_definition.xml" />
+                <include name="valid_package/package_definition.xml" />
             </fileset>
         </hlm:createRootSysdef>
         <au:assertFileDoesntExist file="${epocroot.temp}/sysdef_model.txt" />
         <au:assertLogContains text="Error while creating output file: Unexpected end of file reached." />
-    </target>    
+    </target>
+    
+    <target name="test-create-root-sysdef-single-root-test-target-package">
+        <copy todir="${epocroot.temp}">
+            <fileset dir="${epocroot}/epocroot_valid" />
+        </copy>
+        <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot.temp}"
+            checkPackageExists="true">
+            <fileset dir="${epocroot}">
+                <include name="valid_package/package_definition.xml" />
+                <include name="vendor_package/**/package_definition.xml" />
+            </fileset>
+        </hlm:createRootSysdef>
+        <au:assertFileExists file="${epocroot.temp}/sysdef_model.xml" />
+        <loadfile property="pkg.root" srcfile="${epocroot.temp}/sysdef_model.xml" />
+        <au:assertTrue>
+            <and>
+                <contains string="${pkg.root}" substring="valid_package" />
+                <contains string="${pkg.root}" substring="vendor_package" />
+                <contains string="${pkg.root}" substring="nokia_vendor_package" />
+            </and>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-create-root-sysdef-single-root-test-target-package-missing">
+        <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot.temp}"
+            checkPackageExists="true">
+            <fileset dir="${epocroot}">
+                <include name="valid_package/package_definition.xml" />
+                <include name="vendor_package/**/package_definition.xml" />
+            </fileset>
+        </hlm:createRootSysdef>
+        <au:assertFileExists file="${epocroot.temp}/sysdef_model.xml" />
+        <loadfile property="pkg.root" srcfile="${epocroot.temp}/sysdef_model.xml" />
+        <au:assertTrue>
+            <not>
+                <and>
+                    <contains string="${pkg.root}" substring="valid_package" />
+                    <contains string="${pkg.root}" substring="vendor_package" />
+                    <contains string="${pkg.root}" substring="nokia_vendor_package" />
+                </and>
+            </not>
+        </au:assertTrue>
+    </target>
+
+    <target name="test-create-root-sysdef-single-root-test-vendor-package">
+        <hlm:createRootSysdef destFile="${epocroot.temp}/sysdef_model.xml" epocroot="${epocroot.temp}">
+            <fileset dir="${epocroot}">
+                <include name="vendor_package/**/package_definition.xml" />
+            </fileset>
+        </hlm:createRootSysdef>
+        <au:assertFileExists file="${epocroot.temp}/sysdef_model.xml" />
+        <loadfile property="pkg.root" srcfile="${epocroot.temp}/sysdef_model.xml" />
+        <au:assertTrue>
+            <and>
+                <contains string="${pkg.root}" substring="vendor_package" />
+                <contains string="${pkg.root}" substring="nokia_vendor_package" />
+            </and>
+        </au:assertTrue>
+    </target>
+      
 </project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/antunit/test_filter_sysdef.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_filter_sysdef.ant.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test-filter-sysdef" xmlns:au="antlib:org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>Helium antlib filter sysdef tests.</description>
+
+    <taskdef resource="com/nokia/helium/sysdef/ant/antlib.xml" uri="http://www.nokia.com/helium" />
+    <property name="epocroot" location="../../demo/data" />
+    <property name="epocroot.temp" location="${epocroot}/temp" />
+
+    <!-- is called prior to the test -->
+    <target name="setUp">
+        <delete dir="${epocroot.temp}/" failonerror="false" />
+        <mkdir dir="${epocroot.temp}" />
+    </target>
+
+    <!-- is called after the test, even if that caused an error -->
+    <target name="tearDown">
+        <delete dir="${epocroot.temp}" failonerror="false" />
+    </target>
+
+    <target name="test-noargs">
+        <au:expectfailure expectedMessage="'srcfile' attribute is not defined">
+            <hlm:filterSysdef />
+        </au:expectfailure>
+        <au:assertFileDoesntExist file="${epocroot.temp}/output.sysdef.xml" />
+    </target>
+
+    <target name="test-destfile-missing">
+        <au:expectfailure expectedMessage="'destfile' attribute is not defined">
+            <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" />
+        </au:expectfailure>
+        <au:assertFileDoesntExist file="${epocroot.temp}/output.sysdef.xml" />
+    </target>
+
+    <target name="test-no-nested-filter">
+        <au:expectfailure expectedMessage="You must define at least one nested filterset element.">
+            <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml" />
+        </au:expectfailure>
+        <au:assertFileDoesntExist file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+    <target name="test-empty-nested-filterset">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet/>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+    <target name="test-nested-filterset">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <filter filter="test" type="has" />
+                <filter filter="test_unittest" type="has" />
+            </filterSet>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+    <target name="test-nested-filterset-missing-filter-attribute">
+        <au:expectfailure expectedMessage="'filter' attribute is not defined.">
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet>
+                <filter type="has" />
+            </filterSet>
+        </hlm:filterSysdef>
+        </au:expectfailure>
+        <au:assertFileDoesntExist file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+    <target name="test-nested-filterset-refid">
+        <hlm:sysdefFilterSet id="filters.id">
+            <filter filter="test" type="has" />
+        </hlm:sysdefFilterSet>
+        <hlm:sysdefFilterSet id="filters2.id">
+            <filter filter="test_unittest" type="has" />
+        </hlm:sysdefFilterSet>
+        <hlm:filterSysdef epocroot="${epocroot}" srcfile="../data/filter/canonical_system_definition.xml" 
+            destfile="${epocroot.temp}/filtered.xml">
+            <filterSet refid="filters.id" />
+            <hlm:sysdefFilterSet refid="filters2.id"/>
+        </hlm:filterSysdef>
+        <au:assertFileExists file="${epocroot.temp}/filtered.xml" />
+    </target>
+
+</project>
\ No newline at end of file
--- a/buildframework/helium/sf/java/sysdef/tests/antunit/test_mapping_file_creation.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/sysdef/tests/antunit/test_mapping_file_creation.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -42,13 +42,15 @@
         <include name="**/valid*/"/>
     </dirset>
 
-    <target name="test-mapping-creation-invalid-dir">
-        <hlm:createPackageMapping epocroot="${epocroot}" filterDirSet="${ado.quality.dir}" destFile="${epocroot.temp}/quality.ini">
-            <fileset dir="../data/mapping">
-                <include name="**/valid_package/package_definition.xml" />
-            </fileset>
-        </hlm:createPackageMapping>
-        <au:assertLogContains text="filteredDirSet is not valid" level="warning"/>
+    <target name="test-mapping-creation-invalid-refid">
+        <au:expectfailure message="Id 'some.invalid.refid' doesn't reference a type.">
+            <hlm:createPackageMapping epocroot="${epocroot}" filterDirSet="some.invalid.refid" destFile="${epocroot.temp}/quality.ini">
+                <fileset dir="../data/mapping">
+                    <include name="**/valid_package/package_definition.xml" />
+                </fileset>
+            </hlm:createPackageMapping>
+        </au:expectfailure>
+        <au:assertFileDoesntExist file="${epocroot.temp}/quality.ini" />
     </target>
 
     <target name="test-mapping-creation-no-quality-dir">
@@ -58,11 +60,24 @@
             </fileset>
         </hlm:createPackageMapping>
         <au:assertFileExists file="${epocroot.temp}/quality.ini" />
-        <au:assertLogContains text="filterDirSet attribute is not set" level="warning"/>
+    </target>
+    
+    <target name="test-mapping-creation-filter-dir-no-selection">
+        <dirset id="filter.no.overlap" dir="../data/mapping">
+            <include name="nothing" />
+        </dirset>
+        <hlm:createPackageMapping epocroot="${epocroot}" destFile="${epocroot.temp}/quality.ini"
+            filterDirSet="filter.no.overlap">
+            <fileset dir="../data/mapping">
+                <include name="**/valid_package/package_definition.xml" />
+            </fileset>
+        </hlm:createPackageMapping>
+        <au:assertFileExists file="${epocroot.temp}/quality.ini" />
+        <au:assertLogContains text="Empty mapping after filtering" />
     </target>
 
-    <target name="test-mapping-creation-no-quality-map-file">
-        <au:expectfailure message="destFile is not defined">
+    <target name="test-mapping-creation-no-destfile">
+        <au:expectfailure message="The 'destFile' attribute is not defined">
             <hlm:createPackageMapping epocroot="${epocroot}">
                 <fileset dir="../data/mapping">
                     <include name="**/valid_package/package_definition.xml" />
@@ -89,13 +104,17 @@
                 <include name="**/valid_package/package_definition.xml" />
             </fileset>
         </hlm:createPackageMapping>
+        <dirset dir="../data/mapping" id="filter.dir">
+            <include name="valid_package" />
+        </dirset>
         <hlm:createPackageMapping epocroot="${epocroot}"
-            filterDirSet="${ado.quality.dir}" destFile="${epocroot.temp}/quality.ini">
+            filterDirSet="filter.dir" destFile="${epocroot.temp}/quality.ini">
             <fileset dir="../data/mapping">
                 <include name="**/valid_package/package_definition.xml" />
             </fileset>
         </hlm:createPackageMapping>
         <au:assertFileExists file="${epocroot.temp}/data.ini" />
+        <au:assertLogDoesntContain text="Empty mapping after filtering" />
         <loadfile property="pkg.mapping" srcfile="${epocroot.temp}/data.ini">
             <filterchain>
                 <replaceregex pattern="\\(:|\\)" replace="\1" flags="g" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/filter/canonical_system_definition.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : canonical_system_definition.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" id-namespace="http://www.symbian.org/system-definition">
+<systemModel name="sf_">
+<layer id="app" name="app">
+<package id="helloworldcons" name="helloworldcons" levels="demo">
+<collection id="helloworldcons_apps" name="helloworldcons_apps" level="demo">
+<component id="helloworldcons_app" name="helloworldcons app" purpose="development">
+<unit bldFile="/sf/app/helloworldcons/group" mrp="/sf/app/helloworldcons/"/>
+</component>
+</collection>
+</package>
+</layer>
+<layer id="mw" name="mw">
+<package id="dummytest" name="dummytest" levels="demo">
+<collection id="test_nested" name="test_nested" level="demo">
+<component id="tc1" name="tc1" purpose="development" filter="test">
+<unit bldFile="/sf/mw/dummytest/test_nested/tc1/group" mrp="/sf/mw/dummytest/"/>
+</component>
+<component id="tc2" name="tc2" purpose="development" filter="test">
+<meta rel="testbuild">
+<group name="drop_tc2_and_tc3"/>
+</meta>
+<unit bldFile="/sf/mw/dummytest/test_nested/tc2/group" mrp="/sf/mw/dummytest/"/>
+</component>
+<component id="tc3" name="tc3" purpose="development" filter="test">
+<meta rel="testbuild">
+<group name="drop_tc2_and_tc3"/>
+</meta>
+<unit bldFile="/sf/mw/dummytest/test_nested/tc3/group" mrp="/sf/mw/dummytest/"/>
+</component>
+</collection>
+</package>
+<package id="helloworldapi" name="helloworldapi" levels="demo">
+<collection id="helloworld_apis" name="helloworlds APIs" level="demo">
+<component id="helloworld_api" name="Hello World API" purpose="development">
+<unit bldFile="/sf/mw/helloworldapi/group" mrp="/sf/mw/helloworldapi/"/>
+</component>
+</collection>
+</package>
+</layer>
+</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/valid_package/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : package_definition.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" xmlns:qt="http://qt.nokia.com">
+  <package id="valid_package" name="valid_package" levels="demo">
+    <!-- the xml syntax of this file is voluntarly wrong. -->
+    <collection id="collection" name="Collection " level="demo" />
+      <component id="component" name="Component " purpose="development">
+        <unit bldFile="collection/component/group" mrp="" />
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : package_definition.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" xmlns:qt="http://qt.nokia.com">
+  <package id="valid_package" name="valid_package" levels="demo">
+    <!-- the xml syntax of this file is voluntarly wrong. -->
+    <collection id="collection" name="Collection " level="demo" />
+      <component id="component" name="Component " purpose="development">
+        <unit bldFile="collection/component/group" mrp="" />
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/package_map.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : package_data.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<PackageMap root="root" layer="layer"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/sysdef/tests/data/rootsysdef/epocroot_valid/root/layer/vendor_package/vendor_package_info/nokia_vendor_package_metadata/package_definition.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : package_definition.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<SystemDefinition schema="3.0.0" xmlns:qt="http://qt.nokia.com">
+  <package id="valid_package" name="valid_package" levels="demo">
+    <!-- the xml syntax of this file is voluntarly wrong. -->
+    <collection id="collection" name="Collection " level="demo" />
+      <component id="component" name="Component " purpose="development">
+        <unit bldFile="collection/component/group" mrp="" />
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- a/buildframework/helium/sf/python/pythoncore/ivy.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/ivy.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -39,5 +39,6 @@
       <dependency org="jinja" name="Jinja2" rev="latest.integration" conf="default" />
       <dependency org="threadpool" name="threadpool" rev="latest.integration" conf="default" />
       <dependency org="dom4j" name="dom4j" rev="latest.integration" conf="default" />
+      <dependency org="setuptools" name="setuptools" rev="0.6+" conf="default" />
   </dependencies>
 </ivy-module>
--- a/buildframework/helium/sf/python/pythoncore/lib/archive/builders.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/archive/builders.py	Wed Jun 16 16:51:40 2010 +0300
@@ -115,10 +115,23 @@
         writer.close()
 
     def getCommonUncRoots(self, uncPaths):
-        """get common UNC roots"""
+        """ Get common UNC roots.
+            The following [r'\\server1\foo\bar', r'\\server2\foo', r'\\server1\foo'] input
+            will return [r'\\server1\foo\', r'\\server2\foo'].
+        """
         commonRoots = {}
+        uncPaths = [os.path.normpath(p_path) for p_path in uncPaths]
+        # sorting the input by alphabetical order, so smaller roots 
+        # are coming first.
+        uncPaths.sort()
         for p_path in uncPaths:
-            commonRoots["\\\\" + os.sep.join(p_path[2:].split(os.sep)[0:2]) + os.sep] = 1
+            common_path = "\\\\"
+            for p_comp in p_path[2:].split(os.sep):
+                common_path = common_path + p_comp + os.sep
+                if common_path in commonRoots:
+                    break
+            else:
+                commonRoots[common_path] = 1
         return commonRoots.keys()
 
     def getPrefix(self, dir, commonUncRoots):
@@ -138,7 +151,7 @@
         # Of course this is only on windows platform
         if os.sep == '\\':
             for config in self.configs:
-                (drive, root_dir) = os.path.splitdrive(os.path.normpath(config['root.dir']))
+                (drive, root_dir) = os.path.splitdrive(os.path.abspath(os.path.normpath(config['root.dir'])))
                 _logger.debug("drive=%s, root_dir=%s" % (drive, root_dir))
                 if drive == "":
                     self.listToFindPrefix.append(root_dir)
@@ -153,14 +166,16 @@
                 substDrives.append(driveMapping[root] + os.sep)
 
             for config in self.configs:
-                (drive, root_dir) = os.path.splitdrive(os.path.normpath(config['root.dir']) + os.sep) 
+                (drive, root_dir) = os.path.splitdrive(os.path.abspath(os.path.normpath(config['root.dir'])) + os.sep) 
                 if drive == "":
                     for root in driveMapping:
                         if root_dir.startswith(root):
                             config['root.dir'] = os.path.normpath(driveMapping[root] + os.sep + root_dir[len(root):len(root_dir)])
                             _logger.info("Updated %s in %s" % (root_dir, config['root.dir']))
                             config['unsubst.dir'] = driveMapping[root]
-                            break                
+                            break
+                    else:
+                        _logger.error("Could not find root for %s." % root_dir)
                 elif drive != build_drive:
                     if config['root.dir'] not in substDrives:
                         substDrives.append(config['root.dir'])
--- a/buildframework/helium/sf/python/pythoncore/lib/archive/selectors.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/archive/selectors.py	Wed Jun 16 16:51:40 2010 +0300
@@ -141,9 +141,9 @@
                 return True
         return False
 
-SELECTORS = {'policy': lambda config: DistributionPolicySelector(config.get_list('policy.filenames', ['Distribution.Policy.S60']), config['policy.value']),
-               'symbian.policy': lambda config: SymbianPolicySelector(config.get_list('policy.filenames', ['distribution.policy']), config['policy.value']),
-             'distribution.policy.s60': lambda config: DistributionPolicySelector(['Distribution.Policy.S60'], config['distribution.policy.s60'], config['ignore.missing.policyfiles'] == 'true'),
+SELECTORS = {'policy': lambda config: DistributionPolicySelector(config.get_list('policy.filenames', ['Distribution.Policy.S60', 'distribution.policy', 'distribution.policy.pp']), config['policy.value']),
+             'symbian.policy': lambda config: SymbianPolicySelector(config.get_list('policy.filenames', ['distribution.policy']), config['policy.value']),
+             'distribution.policy.s60': lambda config: DistributionPolicySelector(['Distribution.Policy.S60', 'distribution.policy', 'distribution.policy.pp'], config['distribution.policy.s60'], config['ignore.missing.policyfiles'] == 'true'),
              }
 
 def get_selector(name, config):
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -50,41 +50,52 @@
         self._opts = opts
         c_parser = parser.CppParser()
         temp_dict = {}
-        pkg_parser = parser.PkgFileParser()
         
         # Customize some attributes from how optparse leaves them.
-        self.build_drive = path(self._opts.build_drive)
+        if hasattr(self._opts, 'build_drive'):
+            self.build_drive = path(self._opts.build_drive)
         self.file_store = path(self._opts.file_store)
         self.flash_images = split_paths(self._opts.flash_images)
-        self.sis_files = split_paths(self._opts.sis_files)
-        self.config_file = self._opts.config
-        self.obey_pkgfiles = to_bool(self._opts.obey_pkgfiles)
-        self.hti = to_bool(self._opts.hti)
-        self.specific_pkg = self._opts.specific_pkg
-        if self.specific_pkg == '':
-            self.specific_pkg = None
+        if hasattr(self._opts, 'sis_files'):
+            self.sis_files = split_paths(self._opts.sis_files)
+        if hasattr(self._opts, 'config'):
+            self.config_file = self._opts.config
+        if hasattr(self._opts, 'obey_pkgfiles'):
+            self.obey_pkgfiles = to_bool(self._opts.obey_pkgfiles)
+        if hasattr(self._opts, 'hti'):
+            self.hti = to_bool(self._opts.hti)
+        if hasattr(self._opts, 'test_type'):
+            self.test_type = self._opts.test_type
+        if hasattr(self._opts, 'specific_pkg'):
+            self.specific_pkg = self._opts.specific_pkg
+            if self.specific_pkg == '':
+                self.specific_pkg = None
         self.tsrc_paths_dict = {}
-
-        ats_nd = self._opts.ctc_run_process_params.strip()
-        if ats_nd != "":
-            ats_nd = ats_nd.split("#")[0].strip()
-            if ats_nd == "":
-                self._opts.ctc_run_process_params = ""
-                _logger.warning("Property \'ats.ctc.host\' is not set. Code coverage measurement report(s) will not be created.")
+        if hasattr(self._opts, 'ctc_run_process_params'):
+            ats_nd = self._opts.ctc_run_process_params.strip()
+            if ats_nd != "":
+                ats_nd = ats_nd.split("#")[0].strip()
+                if ats_nd == "":
+                    self._opts.ctc_run_process_params = ""
+                    _logger.warning("Property \'ats.ctc.host\' is not set. Code coverage measurement report(s) will not be created.")
                 
         main_comps = []
                 
         for tsrc in tsrc_paths:
             hrh = os.path.join(self.build_drive + os.sep, 'epoc32', 'include', 'feature_settings.hrh')
-            if os.path.exists(hrh):
-                temp_dict = c_parser.get_cpp_output(path(tsrc), "d", hrh)
+            if os.path.exists(tsrc):
+                if os.path.exists(hrh):
+                    temp_dict = c_parser.get_cpp_output(path(tsrc), "d", hrh)
+                else:
+                    temp_dict = c_parser.get_cpp_output(path(tsrc), "d")
+                for t_key, t_value in temp_dict.items():
+                    self.tsrc_paths_dict[t_key] = t_value
             else:
-                temp_dict = c_parser.get_cpp_output(path(tsrc), "d")
-            for t_key, t_value in temp_dict.items():
-                self.tsrc_paths_dict[t_key] = t_value
+                _logger.error(tsrc + ' not found')
         
         #preparing a list of main components
         for main_component in self.tsrc_paths_dict.keys():
+            pkg_parser = parser.PkgFileParser(main_component)
             if self.obey_pkgfiles == "True":
                 if pkg_parser.get_pkg_files(main_component) != []:
                     main_comps.append(main_component)
@@ -126,27 +137,48 @@
 
     def __init__(self, config):
         self.diamonds_build_url = config.diamonds_build_url
-        self.ctc_run_process_params = config.ctc_run_process_params
+        if hasattr(config, 'ctc_run_process_params'):
+            self.ctc_run_process_params = config.ctc_run_process_params
         self.testrun_name = config.testrun_name
-        self.harness = config.harness
+        if hasattr(config, 'harness'):
+            self.harness = config.harness
         self.device_type = config.device_type
-        self.device_hwid = config.device_hwid
-        self.plan_name = config.plan_name
+        if hasattr(config, 'device_hwid'):
+            self.device_hwid = config.device_hwid
+        if hasattr(config, 'plan_name'):
+            self.plan_name = config.plan_name
         self.report_email = config.report_email
+        self.report_type = 'ATS3_REPORT'
+        if hasattr(config, 'report_type'):
+            self.report_type = config.report_type
         self.file_store = config.file_store
         self.test_timeout = config.test_timeout
-        self.eunitexerunner_flags = config.eunitexerunner_flags
+        if hasattr(config, 'eunitexerunner_flags'):
+            self.eunitexerunner_flags = config.eunitexerunner_flags
         self.sets = []
         self.src_dst = []
         self.pmd_files = []
         self.trace_activation_files = []
-        self.trace_enabled = to_bool(config.trace_enabled)
-        self.ctc_enabled = to_bool(config.ctc_enabled)
-        self.multiset_enabled = to_bool(config.multiset_enabled)
-        self.monsym_files = config.monsym_files
-        self.hti = config.hti
+        self.trace_enabled = 'False'
+        if hasattr(config, 'trace_enabled'):
+            self.trace_enabled = to_bool(config.trace_enabled)
+        self.ctc_enabled = 'False'
+        if hasattr(config, 'ctc_enabled'):
+            self.ctc_enabled = to_bool(config.ctc_enabled)
+        if hasattr(config, 'multiset_enabled'):
+            self.multiset_enabled = to_bool(config.multiset_enabled)
+        if hasattr(config, 'monsym_files'):
+            self.monsym_files = config.monsym_files
+        if hasattr(config, 'hti'):
+            self.hti = config.hti
+        if hasattr(config, 'custom_template'):
+            self.custom_template = config.custom_template
         self.component_path = ""
         self.custom_dir = None
+        if hasattr(config, 'flash_images'):
+            self.flash_images = config.flash_images
+        if hasattr(config, 'test_type'):
+            self.test_type = config.test_type
     
     def insert_set(self, data_files=None, config_files=None, 
                    engine_ini_file=None,  image_files=None, sis_files=None,
@@ -206,6 +238,7 @@
         eunit = False
         stif = False
         stifunit = False
+        generic = False
         for setd in self.sets:
             if setd["test_harness"] == "STIF":
                 stif = True
@@ -213,8 +246,12 @@
                 eunit = True
             elif setd["test_harness"] == "STIFUNIT":
                 stifunit = True
+            else:
+                generic = True
                 
-        if eunit and stif:
+        if stif and generic:
+            self.harness = "MULTI_HARNESS_GENERIC_STIF"
+        elif eunit and stif:
             self.harness = "MULTI_HARNESS"
         elif eunit:
             self.harness = "EUNIT"
@@ -259,14 +296,14 @@
 
             email_action = ("SendEmailAction", 
                             (("subject", self.EMAIL_SUBJECT),
-                             ("type", "ATS3_REPORT"),
+                             ("type", self.report_type),
                              ("send-files", "true"),
                              ("additional-description", email_url),
                              ("to", self.report_email)))
         else:
             email_action = ("SendEmailAction", 
                             (("subject", self.EMAIL_SUBJECT),
-                             ("type", "ATS3_REPORT"),
+                             ("type", self.report_type),
                              ("send-files", "true"),
                              ("to", self.report_email)))
         ats3_report = ("FileStoreAction", 
@@ -427,6 +464,8 @@
                    default="")
     cli.add_option("--report-email", help="Email notification receivers", 
                    default="")
+    cli.add_option("--report-type", help="Email notification type", 
+                   default="")
     cli.add_option("--plan-name", help="Name of the test plan", 
                    default="plan")
     cli.add_option("--sis-files", help="Paths to the sis files",
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/aste.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/aste.py	Wed Jun 16 16:51:40 2010 +0300
@@ -446,7 +446,6 @@
     if opts.verbose:
         _logger.setLevel(logging.DEBUG)
         logging.basicConfig(level=logging.DEBUG)
-    _ = tempfile.mkdtemp()
     config = Configuration(opts)
     create_drop(config)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/custom.py	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,62 @@
+#============================================================================ 
+#Name        : custom.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 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:
+#===============================================================================
+
+import ats3
+import ats3.dropgenerator as adg
+from optparse import OptionParser
+from path import path # pylint: disable-msg=F0401
+import logging
+_logger = logging.getLogger('ats')
+
+def create_drop(config):
+    """Create a test drop."""
+    test_plan = ats3.Ats3TestPlan(config)
+    test_plan.set_plan_harness()
+    flash_images = [path(p) for p in config.flash_images]
+    test_plan.insert_set(image_files=flash_images)
+    generator = adg.Ats3TemplateTestDropGenerator()
+    _logger.info("generating drop file: %s" % config.drop_file)
+    generator.generate(test_plan, output_file=config.drop_file, config_file=config.config_file)
+
+def main():
+    cli = OptionParser(usage="%prog [options]")
+    cli.add_option("--device-type", help="Device type (e.g. 'PRODUCT')", default="unknown")
+    cli.add_option("--diamonds-build-url", help="Diamonds build url", default='')
+    cli.add_option("--drop-file", help="Name for the final drop zip file", default="ATS3Drop.zip")
+    cli.add_option("--file-store", help="Destination path for reports.", default="")
+    cli.add_option("--flash-images", help="Paths to the flash image files", default="")     
+    cli.add_option("--report-email", help="Email notification receivers", default="")
+    cli.add_option("--testrun-name", help="Name of the test run", default="run")
+    cli.add_option("--config", help="Path to the config file", default="")
+    cli.add_option("--test-timeout", help="Test execution timeout value (default: %default)", default="60")
+    cli.add_option("--custom-template", help="Path to the ats template file")
+    cli.add_option("--ats4-enabled", help="ATS4 enabled", default="True")
+    cli.add_option("--verbose", help="Increase output verbosity", action="store_true", default=True)
+    cli.add_option("--test-type", help="Name of test harness")
+    opts, _ = cli.parse_args()
+    
+    if opts.verbose:
+        _logger.setLevel(logging.DEBUG)
+        logging.basicConfig(level=logging.DEBUG)
+    
+    config = ats3.Configuration(opts, [])
+    create_drop(config)
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/dropgenerator.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/dropgenerator.py	Wed Jun 16 16:51:40 2010 +0300
@@ -818,6 +818,8 @@
     harness = test_plan["harness"]
     if harness == "MULTI_HARNESS":
         input_targets(test_plan, root, ["STIF", "EUNIT"])
+    elif harness == "MULTI_HARNESS_GENERIC_STIF":
+        input_targets(test_plan, root, ["STIF", "GENERIC"])
     elif harness == "STIF":
         input_targets(test_plan, root, ["STIF"])
     elif harness == "EUNIT":
@@ -983,7 +985,11 @@
         
         loader = jinja2.ChoiceLoader([jinja2.PackageLoader(__name__, 'templates')] + customdirs)
         env = jinja2.Environment(loader=loader)
-        template = env.from_string(pkg_resources.resource_string(__name__, 'ats4_template.xml'))# pylint: disable-msg=E1101
+        
+        if hasattr(test_plan, 'custom_template'):
+            template = env.from_string(open(test_plan.custom_template).read())
+        else:
+            template = env.from_string(pkg_resources.resource_string(__name__, 'ats4_template.xml'))# pylint: disable-msg=E1101
 
         xmltext = template.render(test_plan=test_plan, os=os, atspath=atspath, atsself=self).encode('ISO-8859-1')
         return et.ElementTree(et.XML(xmltext))
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/parsers.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/parsers.py	Wed Jun 16 16:51:40 2010 +0300
@@ -143,8 +143,7 @@
         a dictionary (or nested dictionary) of paths and their dependencies.
         """
         bld_parser = BldFileParser()
-        pkg_parser = PkgFileParser()
-        mmp_parser = MmpFileParser()
+        pkg_parser = PkgFileParser(bldpath=path_to_bld)
         
         temp_path = os.getcwd()
         parent = os.getcwd()
@@ -186,6 +185,7 @@
                             break
                         
         for t_case in test_cases:
+            mmp_parser = MmpFileParser(t_case[1])
             if t_case[0] == t_case[1] and (not bld_parser.get_test_mmp_files(t_case[1])):
                 del t_case
             elif t_case[0] in main_level:
@@ -376,9 +376,10 @@
     - libraries listed in the mmp
     """
 
-    def __init__(self):
+    def __init__(self, bldpath):
         self.mmp_files = []
         self.path_to_mmp = ""
+        self.bldpath = bldpath
 
     def get_target_filetype(self, path_to_mmp = None):
         """
@@ -464,10 +465,9 @@
                 self.path_to_mmp = path(self.path_to_mmp)
                 if not ".mmp" in str(self.path_to_mmp).lower():
                     bld_parser = BldFileParser()
-                    self.mmp_files = bld_parser.get_test_mmp_files(self.path_to_mmp, False)
-    
-                    for mpath in self.mmp_files:
-                        lst_mmp_paths.append(os.path.join(self.path_to_mmp, mpath))
+                    self.mmp_files = bld_parser.get_test_mmp_files(self.bldpath)
+                    if self.mmp_files:
+                        lst_mmp_paths = lst_mmp_paths + self.mmp_files
                 else:
                     lst_mmp_paths.append(self.path_to_mmp)
 
@@ -545,18 +545,19 @@
     for every file in the pkg file
     """
 
-    def __init__(self, platform = None, specific_pkg = None):
+    def __init__(self, bldpath, platform = None, specific_pkg = None, drive=''):
         self.platform = platform
         self.build_platform = None
         if self.platform is not None and "_" in self.platform:
             plat_tar = re.search(r"(.*)_(.*).pkg", self.platform)
             self.build_platform, self.build_target = plat_tar.groups() 
-        self.drive = ""
+        self.drive = drive
         self._files = []
         self.pkg_files = []
         self.pkg_file_path = None
         self.exclude = ""
         self.location = None
+        self.bldpath = bldpath
         self.specific_pkg = specific_pkg
         if specific_pkg:
             self.platform = specific_pkg + '.pkg'
@@ -636,11 +637,11 @@
                 for p_file in self.get_pkg_files(self.location, True):
                     self._files.append(p_file)
 
-        return self.__read_pkg_file(self._files)
+        return self.read_pkg_file(self._files)
 
     def __map_pkg_path(self, pkg_line, pkg_file_path, pkg_file):
         """Parse package file to get the src and dst paths" for installing files"""
-        mmp_parser = MmpFileParser()
+        mmp_parser = MmpFileParser(self.bldpath)
         ext = ""
         val1 = ""
         val2 = ""
@@ -669,7 +670,7 @@
                 val1 = val1.lower().replace("$(target)", self.build_target)
 
             if path.isabs(path(val1).normpath()):
-                map_src = str(path.joinpath(self.drive, val1).normpath())
+                map_src = os.path.normpath(os.path.join(self.drive, val1))
             elif re.search(r"\A\w", val1, 1):
                 map_src = str(path.joinpath(self.pkg_file_path + os.sep, os.path.normpath(val1)).normpath())
             else:
@@ -684,10 +685,10 @@
         map_dst = map_dst.replace("$:", "c:")
         map_dst = re.sub(r'^(\w)', r'\1', map_dst).strip()
         indx = map_dst.rsplit(".")
-        try:
+        if len(indx) > 1:
             ext = indx[1]
-        except IndexError:
-            _logger.warning("Index Error in map_pkg_path()")
+        else:
+            _logger.warning("File extension not found for " + map_dst)
 
         _test_type_ = ""
         _target_filename_ = ""
@@ -738,10 +739,12 @@
 
         if not map_src or map_src == "." or not map_dst or map_dst == ".":
             return None
-
+        if not os.path.exists(map_src):
+            _logger.error(map_src + ' not found')
+            return None
         return path(map_src).normpath(), path(map_dst).normpath(), file_type, pkg_file
 
-    def __read_pkg_file(self, pkg_files):
+    def read_pkg_file(self, pkg_files):
         """Reads contents of PKG file"""
         pkg_paths = []
         for pkg_file in pkg_files:
@@ -755,7 +758,7 @@
                 except UnicodeError:
                     file1 = open(pkg_file, 'r')
                     lines = file1.readlines()
-                pkg_file_path = path((pkg_file.rsplit(os.sep, 1))[0])
+                pkg_file_path = path(os.path.dirname(pkg_file))
                 for line in lines:
                     pkg_path = self.__map_pkg_path(line, pkg_file_path, os.path.basename(pkg_file))
                     if pkg_path is None:
--- a/buildframework/helium/sf/python/pythoncore/lib/ats3/testconfigurator.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ats3/testconfigurator.py	Wed Jun 16 16:51:40 2010 +0300
@@ -45,10 +45,7 @@
     def __init__(self, config):
         
         self.target_platform = config.target_platform
-        self.pkg_parser = parser.PkgFileParser(self.target_platform.replace(" ", "_")+".pkg", config.specific_pkg)
-        
         self.bld_parser = parser.BldFileParser()
-        self.mmp_parser = parser.MmpFileParser()
         
         self.data_dirs = config.data_dir
         self.flash_images = [path(p) for p in config.flash_images]
@@ -61,6 +58,7 @@
         self.trace_enabled = config.trace_enabled
         self.excludable_dlls = []
         self.custom_dir = None
+        self.specific_pkg = config.specific_pkg
 
     def insert_testset_stif(self, src_dst, pkg_paths):
         """Inserts test set data to test plan for stif"""
@@ -109,13 +107,14 @@
             self.custom_dir = self.tsrc_dir.joinpath("custom")
             _logger.debug("using customized testing from %s" % self.custom_dir)
             if os.path.exists(self.tsrc_bld_dir.joinpath("group","bld.inf")):
-                mmp_files = self.bld_parser.get_test_mmp_files(self.tsrc_bld_dir.joinpath("group","bld.inf"))                
+                bldinf = self.tsrc_bld_dir.joinpath("group","bld.inf")
             else:
-                mmp_files = self.bld_parser.get_test_mmp_files(self.tsrc_bld_dir.joinpath("bld.inf"))
-                
-            test_harness = self.mmp_parser.get_harness(mmp_files)
-            
-            pkg_paths = self.pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
+                bldinf = self.tsrc_bld_dir.joinpath("bld.inf")
+            mmp_files = self.bld_parser.get_test_mmp_files(bldinf)
+            mmp_parser = parser.MmpFileParser(bldinf)
+            test_harness = mmp_parser.get_harness(mmp_files)
+            pkg_parser = parser.PkgFileParser(bldinf, self.target_platform.replace(" ", "_")+".pkg", self.specific_pkg)
+            pkg_paths = pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
             if self.trace_enabled == "True":
                 try:
                     pmd_files = self.tsrc_pmd_files()
@@ -135,7 +134,7 @@
                         
             elif test_harness == "EUNIT":
                 try:
-                    src_dst  = self.pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
+                    src_dst  = pkg_parser.get_data_files(self.tsrc_pkg_files(_paths_dict_), self.build_drive)
 
                 except OSError:
                     _logger.warning("No pkg file found in the directory ( %s )" % self.tsrc_pkg_dir)
@@ -148,7 +147,7 @@
 
                 for dll_file in testmodule_files:
                     if not self.check_dll_duplication(dll_file.name, src_dst):
-                        _dll_type_ = self.mmp_parser.get_dll_type(self.tsrc_bld_dir)
+                        _dll_type_ = mmp_parser.get_dll_type(self.tsrc_bld_dir)
 
                         if dll_file.name in self.excludable_dlls:
                             src_dst.append((dll_file, path(r"c:\sys\bin").joinpath(dll_file.name), "data:%s" % _dll_type_))
--- a/buildframework/helium/sf/python/pythoncore/lib/atsant.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/atsant.py	Wed Jun 16 16:51:40 2010 +0300
@@ -31,11 +31,12 @@
 
 class IConfigATS(object):
     """ Class used to read configuration file iconfig.xml """
-    def __init__(self, imagesdir):
+    def __init__(self, imagesdir, productname):
         self.imagesdir = imagesdir
+        self.productname = productname
         self.config = self.getconfig()
         
-    def getconfig(self, type=None):
+    def getconfig(self, type=None, productname=None):
         """get configuration"""
         noncust = None
         for root, _, files in os.walk(self.imagesdir, topdown=False):
@@ -45,8 +46,8 @@
                     configBuilder = configuration.NestedConfigurationBuilder(open(filePath, 'r'))
                     configSet = configBuilder.getConfiguration()
                     for config in configSet.getConfigurations():
-                        if type:
-                            if type in config.type:
+                        if type and productname:
+                            if type in config.type and config['PRODUCT_NAME'] in productname:
                                 return config
                         else:
                             noncust = config
@@ -68,7 +69,7 @@
         """find images"""
         output = ''
         for imagetype, imagetypename in [('core', 'CORE'), ('langpack', 'ROFS2'), ('cust', 'ROFS3'), ('udaerase', 'UDAERASE')]:
-            iconfigxml = self.getconfig(imagetype)
+            iconfigxml = self.getconfig(imagetype, self.productname)
             if iconfigxml == None:
                 iconfigxml = self.config
 
@@ -83,14 +84,25 @@
                     raise Exception(image + ' not found')
             else:
                 if imagetype == 'core':
-                    raise Exception(imagetypename + '_FLASH not found in iconfig.xml')
+                    raise Exception(imagetypename + '_FLASH not found in iconfig.xml in ' + self.imagesdir)
                 print imagetypename + '_FLASH not found in iconfig.xml'
         return output
 
-def files_to_test(canonicalsysdeffile, excludetestlayers, idobuildfilter, builddrive):
+def get_boolean(string_val):
+    """if parameter passed in is not present in the project it will produce 'none'
+       as a result so this will be converted to boolean false as will all values
+        except true."""
+    retVal = False
+    if (string_val == 'true'):
+        retVal = True
+    return retVal
+
+
+def files_to_test(canonicalsysdeffile, excludetestlayers, idobuildfilter, builddrive, createmultipledropfiles):
     """list the files to test"""
     sdf = sysdef.api.SystemDefinition(canonicalsysdeffile)
-
+    
+    single_key = 'singledropfile'       #default single drop file name
     modules = {}
     for layr in sdf.layers:
         if re.match(r".*_test_layer$", layr):
@@ -104,8 +116,12 @@
 
             layer = sdf.layers[layr]
             for mod in layer.modules:
-                if mod.name not in modules:
+                if get_boolean(createmultipledropfiles):  #creating single drop file?
+                    if single_key not in modules:       #have we already added the key to the dictionary?
+                        modules[single_key] = []        #no so add it
+                elif mod.name not in modules:
                     modules[mod.name] = []
+                    single_key = mod.name               #change the key name to write to modules
                 for unit in mod.units:
                     include_unit = True
                     if idobuildfilter != None:
@@ -128,6 +144,6 @@
                                 if len(unit.filters) == 0:
                                     include_unit = True
                     if include_unit:
-                        modules[mod.name].append(os.path.join(builddrive + os.sep, unit.path))
+                        modules[single_key].append(os.path.join(builddrive + os.sep, unit.path))
+    return modules
 
-    return modules
--- a/buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ccm/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -1201,7 +1201,7 @@
         result = self._session.execute("finduse \"%s\"" % self, FinduseResult(self))
         return result.output
     
-    def delete(self, recurse=False):
+    def delete(self, recurse=False, scope=None):
         """ Delete a synergy project. """
         args = ""
         if recurse:
@@ -1209,8 +1209,10 @@
         parg = ""
         if self.type == "project":
             parg = "-project"
+        if scope:
+            args = args + ' -scope "' + scope + '"'
         result = self._session.execute("delete %s %s \"%s\"" % (args, parg, self))
-        if result.status != 0 and result.status != None:
+        if (result.status != 0 and result.status != None) or (result.output.strip().startswith('Cannot use')):
             raise CCMException("An error occurred while deleting object %s (error status: %s)\n%s" % (self, result.status, result.output), result)
         return result
 
@@ -1440,6 +1442,46 @@
             raise CCMException("Error checking out project %s,\n%s" % (self.objectname, result.output), result)
         return result
     
+    def create_release_tag(self, release, new_tag):
+        """ creates new release tag """
+        role = self._session.role
+        
+        if role is None:
+            self._session.role = "developer"
+            role = self._session.role
+
+        args = "release -create %s -from %s -bl %s -active -allow_parallel_check_out" % (new_tag, release, release)
+        self._session.role = "build_mgr"
+
+        result = self._session.execute(" %s" \
+                                  % (args), Result(self._session))
+        self._session.role = role
+
+        return result.output
+
+    def delete_release_tag(self, release, new_tag):
+        """ deletes new release tag """
+
+        role = self._session.role
+        if role is None:
+            self._session.role = "developer"
+            role = self._session.role
+        
+
+        self._session.role = "build_mgr"
+
+        result = self._session.execute("pg -l -r %s -u" \
+                                  % (new_tag), Result(self._session))
+        result = self._session.execute("pg -d \"%s\" -m" \
+                                  % (result.output), Result(self._session))
+        result = self._session.execute("release -d %s -force" \
+                                  % (new_tag), Result(self._session))
+
+        self._session.role = role
+
+        return result.output
+        
+        
     def work_area(self, maintain, recursive=None, relative=None, path=None, pst=None, wat=False):
         """ Configure the work area. This allow to enable it or disable it, set the path, recursion... """
         args = ""
@@ -1980,5 +2022,5 @@
 # The location of the ccm binary must be located to know where the _router.adr file is, to support
 # switching databases.
 CCM_BIN = fileutils.which("ccm")
-if os.sep == '\\':
-    CCM_BIN = fileutils.which("ccm.exe")
+if CCM_BIN:
+    CCM_BIN = os.path.normcase(CCM_BIN)
--- a/buildframework/helium/sf/python/pythoncore/lib/ccm/extra.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ccm/extra.py	Wed Jun 16 16:51:40 2010 +0300
@@ -133,7 +133,7 @@
         _logger.error( "Exception occured in request #%s: %s\n%s" % (request.requestID, exc_info[1], traceback.format_exception(exc_info[0], exc_info[1], exc_info[2])))
         exceptions.append(exc_info[1])
     
-    def handle_result(result):
+    def handle_result(request, result):
         """append  the result"""
         results.append(result)
 
--- a/buildframework/helium/sf/python/pythoncore/lib/fileutils.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/fileutils.py	Wed Jun 16 16:51:40 2010 +0300
@@ -361,17 +361,25 @@
 def which(executable):
     """ Search for executable in the PATH."""
     pathlist = os.environ['PATH'].split(os.pathsep)
+    pathexts = ['']
+    if os.sep == '\\':
+        pathexts = os.environ['PATHEXT'].split(os.pathsep)
+
     for folder in pathlist:
-        filename = os.path.join(folder, executable)
-        try:
-            status = os.stat(filename)
-        except os.error:
-            continue
-        # Check if the path is a regular file
-        if stat.S_ISREG(status[stat.ST_MODE]):
-            mode = stat.S_IMODE(status[stat.ST_MODE])
-            if mode & 0111:
-                return os.path.normpath(filename)
+        for pathext in pathexts:
+            exename = executable
+            if os.sep == '\\' and not exename.lower().endswith(pathext.lower()):
+                exename = exename + pathext
+            filename = os.path.join(folder, exename)
+            try:
+                status = os.stat(filename)
+            except os.error:
+                continue
+            # Check if the path is a regular file
+            if stat.S_ISREG(status[stat.ST_MODE]):
+                mode = stat.S_IMODE(status[stat.ST_MODE])
+                if mode & 0111:
+                    return os.path.normpath(filename)
     return None
 
 
@@ -467,14 +475,18 @@
         
 def getmd5(fullpath, chunk_size=2**16):
     """ returns the md5 value"""
-    file_handle = open(fullpath, "rb")
-    md5 = hashlib.md5()
-    while 1:
-        chunk = file_handle.read(chunk_size)
-        if not chunk:
-            break
-        md5.update(chunk)
-    file_handle.close()
+    for trial in range(3):
+        try:
+            file_handle = open(fullpath, "rb")
+            md5 = hashlib.md5()
+            while 1:
+                chunk = file_handle.read(chunk_size)
+                if not chunk:
+                    break
+                md5.update(chunk)
+            file_handle.close()
+        except Exception, exc:
+            LOGGER.warning("Error happened on %d trial: %s" % (trial, str(exc)))
     return md5.hexdigest()
 
 def read_symbian_policy_content(filename):
--- a/buildframework/helium/sf/python/pythoncore/lib/getVariantConfiguration.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/getVariantConfiguration.py	Wed Jun 16 16:51:40 2010 +0300
@@ -1,5 +1,5 @@
 #============================================================================ 
-#Name        : getVariantConfiguration.py 
+#Name        : getvariantconfiguration.py 
 #Part of     : Helium 
 
 #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+"""get variant configuration"""
 
 import configuration
 import sys
@@ -66,9 +67,9 @@
                     alreadyDone[variant['PRODUCT_NAME']] = {}
                 if variant.type not in alreadyDone[variant['PRODUCT_NAME']] and variant['PRODUCT_NAME'] == product:
                     alreadyDone[variant['PRODUCT_NAME']][variant.type] = True
-                    v = VariantInfo(variant['ROFS2_DIR'])
-                    if len(str(v)) > 0:
-                        outfile.write(str(v)+"\n")
+                    v_info = VariantInfo(variant['ROFS2_DIR'])
+                    if len(str(v_info)) > 0:
+                        outfile.write(str(v_info)+"\n")
         outfile.close()
     except Exception, exc:
         print "ERROR: %s" % exc
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/logger.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/logger.py	Wed Jun 16 16:51:40 2010 +0300
@@ -17,13 +17,11 @@
 #Description:
 #===============================================================================
 
-##
-# Logger module
-# Description : Port to python of the ISIS::Logger3 perl module
-#
-# 1.0.0 (13/12/2006)
-#  - First version of the module.
-##
+""" Port to python of the ISIS::Logger3 perl module
+
+ 1.0.0 (13/12/2006)
+  - First version of the module.
+"""
 
 # pylint: disable-msg=E1101,E1103
 
@@ -32,42 +30,35 @@
 import datetime
 import traceback
 
-#
-# This is an Internal helper call. 
-#
 class _CustomizePrint(object):
+    """ This is an Internal helper call. """
     
-    ##
-    # Initialise the instance content 
-    # @param logger a Logger instance
-    # @param name method name (e.g. Print, Error), could be any strings
     def __init__(self, logger, name):
+        """Initialise the instance content 
+        @param logger a Logger instance
+        @param name method name (e.g. Print, Error), could be any strings"""
         self.__logger = logger
         self.__name = name
     
-    ##
-    # Make this object callable. Call _print from the logger instance.
-    # @params *args a list of arguments
     def __call__(self, *args):
-        self.__logger._print(self.__name, args)        
-    
-##
-# The Logger enables to create xml logging in Python.
-#
+        """Make this object callable. Call _print from the logger instance.
+        @params *args a list of arguments"""
+        self.__logger._print(self.__name, args)
+
+
 class Logger(object):
     """ Logger class used to create xml logging in python """
-    ##
-    # Constructor of the Logger.
     def __init__(self):
+        """Constructor of the Logger."""
         self.__step = 1
         self.__doc = xml.dom.minidom.Document()
-        self.__lognode = self.__doc.createElementNS("", "__log")        
+        self.__lognode = self.__doc.createElementNS("", "__log")
         self.__header = self.__doc.createElementNS("", "__header")
         self.__footer = self.__doc.createElementNS("", "__footer")
         self.__summary = self.__doc.createElementNS("", "__summary")
         self.__lognode.appendChild(self.__header)
         self.__lognode.appendChild(self.__summary)
-        self.__lognode.appendChild(self.__footer)        
+        self.__lognode.appendChild(self.__footer)
         self.__lognode.setAttributeNS("", "date", "%s" % datetime.datetime.now().ctime())
         self.__footer.setAttributeNS("", "title", "")
         self.__footer.setAttributeNS("", "subtitle", "")
@@ -79,117 +70,106 @@
         self.__verbose = True
         #<__log date="Wed Dec  6 03:07:25 2006">
 
-    ##
-    # Set the url of interface to use.
     def SetInterface(self, url):
+        """Set the url of interface to use."""
         self.__lognode.setAttributeNS("", "interface", url)
 
-    ##
-    # Enable/Disable shell output
-    # @param v boolean to set the logger output
     def SetVerbose(self, v):
+        """Enable/Disable shell output
+        @param v boolean to set the logger output"""
         self.__verbose = v
     
-    ##
-    # Set the title of the document
-    # @param title the title to set
-    def SetTitle(self, title):        
+    def SetTitle(self, title):
+        """Set the title of the document
+        @param title the title to set"""
         self.__header.setAttributeNS("", "title", title)
         
-    ##
-    # Set the subtitle of the document
-    # @param subtitle the subtitle to set
-    def SetSubTitle(self, title):        
+    def SetSubTitle(self, title):
+        """Set the subtitle of the document
+        @param subtitle the subtitle to set"""
         self.__header.setAttributeNS("", "subtitle", title)
 
-    ##
-    # Set the sumamry title
-    # @param title the title to set
     def SetSummaryTitle(self, title):
+        """Set the sumamry title
+        @param title the title to set"""
         self.__summary.setAttributeNS("", "title", title)
         
-    ##
-    # Creates a summary couple.
-    # @param tag the description
-    # @param value the value
     def AddSummaryElement(self, tag, value):
-        e = self.__doc.createElementNS("", "__elmt")
-        e.setAttributeNS("", "tag", tag)
-        e.setAttributeNS("", "val", value)
-        self.__summary.appendChild(e)
+        """Creates a summary couple.
+        @param tag the description
+        @param value the value"""
+        elem = self.__doc.createElementNS("", "__elmt")
+        elem.setAttributeNS("", "tag", tag)
+        elem.setAttributeNS("", "val", value)
+        self.__summary.appendChild(elem)
         
         
-    ##
-    # Open a MainContent section.
-    # @param title title of the MainContent section
     def OpenMainContent(self, title=""):
+        """Open a MainContent section.
+        @param title title of the MainContent section"""
         self.__stack.append(self.__current_node)
-        n = self.__doc.createElementNS("", "task")
-        n.setAttributeNS("", "name", title)
-        n.setAttributeNS("", "type", "maincontent")
-        n.setAttributeNS("", "time", datetime.datetime.now().ctime())
-        self.__current_node.appendChild(n)
-        self.__current_node = n
+        node = self.__doc.createElementNS("", "task")
+        node.setAttributeNS("", "name", title)
+        node.setAttributeNS("", "type", "maincontent")
+        node.setAttributeNS("", "time", datetime.datetime.now().ctime())
+        self.__current_node.appendChild(node)
+        self.__current_node = node
         if self.__verbose:
             print ("---------------------------------------------------------------------")
             print ("  %s" % title)
             print ("---------------------------------------------------------------------")
 
         
-    ##
-    # Close the current main content section.
-    # Make sure you have closed other Event/Section first
     def CloseMainContent(self):
+        """ Close the current main content section.
+        Make sure you have closed other Event/Section first"""
         if self.__current_node.nodeName != "task" and not (self.__current_node.attributes.has_key('type') and self.__current_node.attributes['type']=="maincontent"):
             raise Exception("not closing a 'maincontent' typed node")
         self.__current_node = self.__stack.pop()
         
         
-    ##
-    # Create an Event section (can be opened/closed)
-    # @param title title of the MainContent section
     def OpenEvent(self, title=""):
+        """Create an Event section (can be opened/closed)
+        @param title title of the MainContent section"""
         self.__stack.append(self.__current_node)
-        n = self.__doc.createElementNS("", "task")
-        n.setAttributeNS("", "name", title)
-        n.setAttributeNS("", "type", "event")
-        n.setAttributeNS("", "time", datetime.datetime.now().ctime())
-        self.__current_node.appendChild(n)
-        self.__current_node = n
+        node = self.__doc.createElementNS("", "task")
+        node.setAttributeNS("", "name", title)
+        node.setAttributeNS("", "type", "event")
+        node.setAttributeNS("", "time", datetime.datetime.now().ctime())
+        self.__current_node.appendChild(node)
+        self.__current_node = node
         if self.__verbose:
             print ("---------------------------------------------------------------------")
             print (" + %s" % title)
 
     def SetCustomOutputer(self, type, classname, config = None):
-        n = self.__doc.createElementNS("", "__customoutputer")
-        n.setAttributeNS("", "type", type)
-        n.setAttributeNS("", "module", classname)
+        """set custom out puter"""
+        node = self.__doc.createElementNS("", "__customoutputer")
+        node.setAttributeNS("", "type", type)
+        node.setAttributeNS("", "module", classname)
         if config != None:
-            n.appendChild(config)
-        self.__lognode.appendChild(n)
+            node.appendChild(config)
+        self.__lognode.appendChild(node)
         
-    ##
-    # Close the current Event
-    # Make sure you have closed other Event/Section first
     def CloseEvent(self):
+        """# Close the current Event
+        Make sure you have closed other Event/Section first"""
         if self.__current_node.nodeName != "task" and (self.__current_node.attributes.has_key('type') and self.__current_node.attributes['type']=="event"):
             raise Exception("not closing a 'event' typed node")
         self.__current_node = self.__stack.pop()
     
-    ##
-    # __getattribute__ has been overrided to enable dynamic messaging.
-    # @param attr the name of the method (or attribute...)
     def __getattribute__(self, attr):
+        """__getattribute__ has been overrided to enable dynamic messaging.
+        @param attr the name of the method (or attribute...)"""
         try:
             return object.__getattribute__(self, attr)  
         except AttributeError:
             return _CustomizePrint(self, attr)        
-            
-    ##
-    # Generic method that handle the print in the XML document
-    # @param kind type of output
-    # @param *args a list of arguments (must be strings)
+
     def _print(self, kind, *args):
+        """Generic method that handle the print in the XML document
+            @param kind type of output
+            @param *args a list of arguments (must be strings)"""
         output = u"".join(map(lambda x: u"%s" % x, list(*args)))
         nodetype = kind.lower()
         msgtype = ""
@@ -197,13 +177,12 @@
             msgtype = "%s:" % nodetype.upper()
         if self.__verbose:
             print "%s %s" % (msgtype, output.encode('utf-8'))
-        
-                
-        n = self.__doc.createElementNS("", "message")
-        n.setAttributeNS("", "priority", nodetype)
+
+        node = self.__doc.createElementNS("", "message")
+        node.setAttributeNS("", "priority", nodetype)
         #n.setAttributeNS("", "time", datetime.datetime.now().ctime())
-        n.appendChild(self.__doc.createCDATASection(output))
-        self.__current_node.appendChild(n)
+        node.appendChild(self.__doc.createCDATASection(output))
+        self.__current_node.appendChild(node)
 #        nodetype = kind.lower()
 #        if kind.lower() != "print" and kind.lower() != "printraw":
 #            nodename = kind.lower()
@@ -220,22 +199,22 @@
 #            self.__current_node.appendChild(n)
     
     
-    ##
-    #
     def SetFooterTitle(self, title):
+        """set footer title"""
         self.__footer.attributes['title'] = title
         
     def SetFooterSubTitle(self, subtitle):
+        """set footer sub title"""
         self.__footer.attributes['subtitle'] = subtitle
     
     def Die(self, title, subtitle, exception):
+        """Die - kill it off?"""
         self.SetFooterTitle(title)
         self.SetFooterSubTitle("%s\nException raised: %s\n%s" % (subtitle, exception, traceback.format_exc()))
 
-    ##
-    # Write the DOM tree into a file.
-    # @param filename the file to write in.
-    def WriteToFile(self, filename):        
+    def WriteToFile(self, filename):
+        """Write the DOM tree into a file.
+         @param filename the file to write in."""
         file_object = open(filename, "w")
         file_object.write(codecs.BOM_UTF8)
         file_object.write(self.__doc.toprettyxml(encoding = "utf-8"))
@@ -245,5 +224,5 @@
     ##
     # Write the DOM tree into a file.
     # @param filename the file to write in.
-    def __str__(self):        
+    def __str__(self):
         return self.__doc.toprettyxml(encoding="utf-8")
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/output/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/output/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,4 +16,4 @@
 #
 #Description:
 #===============================================================================
-
+""" init file for XML component handler"""
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/output/widgets.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/output/widgets.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,7 +16,7 @@
 #
 #Description:
 #===============================================================================
-
+""" handles components in XML documents"""
 
 # pylint: disable-msg=E1101
 
@@ -27,6 +27,7 @@
         pass
     
     def getDOMContainer(self):
+        """get DOM container"""
         pass
     
     
@@ -34,28 +35,30 @@
     """ A widget of type Box """
     def __init__(self, doc, container, divId = "mb", divClass = "mc"):
         Widget.__init__(self)
-        d1 = doc.createElementNS("", "div")
-        d1.setAttributeNS("", "id", divId)
-        container.appendChild(d1)
-        mc = doc.createElementNS("", "div")
-        mc.setAttributeNS("", "class", divClass)
-        d1.appendChild(mc)        
+        doc_1 = doc.createElementNS("", "div")
+        doc_1.setAttributeNS("", "id", divId)
+        container.appendChild(doc_1)
+        m_c = doc.createElementNS("", "div")
+        m_c.setAttributeNS("", "class", divClass)
+        doc_1.appendChild(m_c)
         self.__doc = doc
         self.__title = None
-        self.__mc = mc
+        self.__mc = m_c
         
     def setTitle(self, title=""):
+        """set the title"""
         if self.__title == None:
-            t = self.__doc.createElementNS("", "h1")
-            self.__mc.insertBefore(t, self.__mc.firstChild)            
+            t_doc = self.__doc.createElementNS("", "h1")
+            self.__mc.insertBefore(t_doc, self.__mc.firstChild)
             self.__title = self.__doc.createTextNode(title)
-            t.appendChild(self.__title)
+            t_doc.appendChild(self.__title)
         self.__title.data = title
 
     def getDOMContainer(self):
+        """get DOM container"""
         return self.__mc
     
-class Summary(Box):    
+class Summary(Box):
     """ A widget representing a summary component """
     def __init__(self, doc, container):
         Box.__init__(self, doc, container, divId = "s_mb", divClass = "s_mc")
@@ -74,33 +77,35 @@
 
     
     def addElement(self, tag, value):
+        """add Element"""
         row = self._Box__doc.createElementNS("", "tr")
         #Tag
-        td = self._Box__doc.createElementNS("", "td")
-        td.setAttributeNS("", "valign", "top")
-        td.setAttributeNS("", "nowrap", "nowrap")        
+        t_d = self._Box__doc.createElementNS("", "td")
+        t_d.setAttributeNS("", "valign", "top")
+        t_d.setAttributeNS("", "nowrap", "nowrap")
         div = self._Box__doc.createElementNS("", "div")
         div.setAttributeNS("", "class", "s_tag")
         div.appendChild(self._Box__doc.createTextNode(tag))
-        td.appendChild(div)        
-        row.appendChild(td)
+        t_d.appendChild(div)
+        row.appendChild(t_d)
         
         # Value
-        td = self._Box__doc.createElementNS("", "td")
-        td.setAttributeNS("", "width", "100%")        
+        t_d = self._Box__doc.createElementNS("", "td")
+        t_d.setAttributeNS("", "width", "100%")        
         div = self._Box__doc.createElementNS("", "div")
         div.setAttributeNS("", "class", "s_val")
         div.appendChild(self._Box__doc.createTextNode(value))
-        td.appendChild(div)
-        row.appendChild(td)
+        t_d.appendChild(div)
+        row.appendChild(t_d)
 
         self.__table.appendChild(row)
 
     def addStatistics(self, type, value):
+        """add Statistics"""
         if self.__table_stat == None:
-            h1 = self._Box__doc.createElementNS("", "h1")
-            h1.appendChild(self._Box__doc.createTextNode("Global Statistics"))
-            self.getDOMContainer().appendChild(h1)
+            head1 = self._Box__doc.createElementNS("", "h1")
+            head1.appendChild(self._Box__doc.createTextNode("Global Statistics"))
+            self.getDOMContainer().appendChild(head1)
                             
             div = self._Box__doc.createElementNS("", "div")
             div.setAttributeNS("", "class", "t_wrapper")
@@ -116,12 +121,12 @@
             self.__table_stat.appendChild(row)
             self.__table_stat = row
 
-        td = self._Box__doc.createElementNS("", "td")
+        t_d = self._Box__doc.createElementNS("", "td")
         div = self._Box__doc.createElementNS("", "div")
         div.setAttributeNS("", "class", "gbl_cnt_" + type)
         div.appendChild(self._Box__doc.createTextNode("%d %ss" % (value, type)))
-        td.appendChild(div)
-        self.__table_stat.appendChild(td)
+        t_d.appendChild(div)
+        self.__table_stat.appendChild(t_d)
           
     
     
@@ -172,7 +177,7 @@
         # append container
         node_head.appendChild(showall)
         node_head.appendChild(hideall)
-        node_head.appendChild(self.__togglenode)        
+        node_head.appendChild(self.__togglenode)
 
         contentx = doc.createElementNS("", "div")
         contentx.setAttributeNS("", "id", "Content%d" % id)
@@ -186,9 +191,11 @@
         self.__node_info = None
         
     def setTitle(self, title = ""):
+        """set Title"""
         self.__title.data = title
 
     def addStatistics(self, type, value):
+        """add Statistics"""
         if self.__node_info == None:
             self.__node_info = self.__doc.createElementNS("", "span")
             self.__node_info.setAttributeNS("", "class", "node_info")
@@ -202,6 +209,7 @@
           #</span>
 
     def getDOMContainer(self):
+        """get DOM Container"""
         return self.__container
 
 
@@ -217,27 +225,30 @@
         h_wrapper.appendChild(h_elmt)
         container.appendChild(h_wrapper)
         #title
-        t = self.__doc.createElementNS("", "div")
+        t_elem = self.__doc.createElementNS("", "div")
         self.__title = doc.createTextNode("")
-        t.appendChild(self.__title)
-        t.setAttributeNS("", "class", "h_title")
-        h_elmt.appendChild(t)
+        t_elem.appendChild(self.__title)
+        t_elem.setAttributeNS("", "class", "h_title")
+        h_elmt.appendChild(t_elem)
         #subtitle
-        t = self.__doc.createElementNS("", "div")
+        t_elem = self.__doc.createElementNS("", "div")
         self.__subtitle = doc.createTextNode("")
-        t.appendChild(self.__subtitle)
-        t.setAttributeNS("", "class", "h_subtitle")
-        h_elmt.appendChild(t)
+        t_elem.appendChild(self.__subtitle)
+        t_elem.setAttributeNS("", "class", "h_subtitle")
+        h_elmt.appendChild(t_elem)
         
         
         
-    def setTitle(self, title):            
+    def setTitle(self, title):
+        """set Title"""
         self.__title.data = title
         
-    def setSubTitle(self, title):            
+    def setSubTitle(self, title):
+        """set Sub Title"""
         self.__subtitle.data = title
 
     def getDOMContainer(self):
+        """get DOM Container"""
         return None
 
 class Footer(Widget):
@@ -252,22 +263,24 @@
         h_wrapper.appendChild(h_elmt)
         container.appendChild(h_wrapper)
         #title
-        t = self.__doc.createElementNS("", "div")
+        t_elem = self.__doc.createElementNS("", "div")
         self.__title = doc.createTextNode("")
-        t.appendChild(self.__title)
-        t.setAttributeNS("", "class", "f_title")
-        h_elmt.appendChild(t)
+        t_elem.appendChild(self.__title)
+        t_elem.setAttributeNS("", "class", "f_title")
+        h_elmt.appendChild(t_elem)
         #subtitle
-        t = self.__doc.createElementNS("", "div")
+        t_elem = self.__doc.createElementNS("", "div")
         self.__subtitle = doc.createTextNode("")
-        t.appendChild(self.__subtitle)
-        t.setAttributeNS("", "class", "f_subtitle")
-        h_elmt.appendChild(t)
+        t_elem.appendChild(self.__subtitle)
+        t_elem.setAttributeNS("", "class", "f_subtitle")
+        h_elmt.appendChild(t_elem)
         
-    def setTitle(self, title):            
+    def setTitle(self, title):
+        """set Title"""
         self.__title.data = title
         
-    def setSubTitle(self, title):            
+    def setSubTitle(self, title):
+        """set Sub Title"""
         self.__subtitle.data = title
     
 class Text(Widget):
@@ -280,20 +293,25 @@
         container.appendChild(self.__div)
     
     def setIcon(self, name):
+        """set Icon"""
         self.__div.setAttributeNS("", "class", name)
 
-    def appendText(self, text):            
+    def appendText(self, text):
+        """append Text"""
         def pushContent(arg):
+            """push Content"""
             self.getDOMContainer().appendChild(self.__doc.createTextNode(arg))
             self.getDOMContainer().appendChild(self.__doc.createElementNS("","br"))
-        map(pushContent, text.strip().split("\n"))            
+        map(pushContent, text.strip().split("\n"))
 
     def getDOMContainer(self):
+        """get DOM Container"""
         return self.__div
 
 class RawText(Text):
     """ This class represents a raw text component """
     def appendText(self, text):
+        """append Text"""
         for child in xml.dom.minidom.parseString("<xhtml>" + text.strip() + "</xhtml>").documentElement.childNodes:
             self.getDOMContainer().appendChild(child.cloneNode(True))
 
@@ -305,6 +323,5 @@
         self._Text__div.appendChild(self.__bold)
         
     def getDOMContainer(self):
+        """get DOM COntainer"""
         return self.__bold
-    
-    
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/helium/outputer.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/helium/outputer.py	Wed Jun 16 16:51:40 2010 +0300
@@ -17,13 +17,11 @@
 #Description:
 #===============================================================================
 
-##
-# Outputer module
-# Description : Port to python of the ISIS::Logger3::XML2HTML perl module
-#
-# 1.0.0 (13/12/2006)
-#  - First version of the module.
-##
+"""Port to python of the ISIS::Logger3::XML2HTML perl module
+
+1.0.0 (13/12/2006)
+ - First version of the module."""
+
 import codecs
 import xml.dom.minidom
 from helium.output.widgets import *
@@ -35,31 +33,36 @@
 class Configuration:
     """ Class  for isis Configuration """
     def __init__(self, url):
-        f = urllib2.urlopen(url)#
-        data = f.read()
-        f.close()
+        url_file = urllib2.urlopen(url)#
+        data = url_file.read()
+        url_file.close()
         self.__xml = amara.parse(data)
         
     def getClass(self, type, default = None):
+        """get Class"""
         return self._getValue(type, "class", default)
 
     def getImg(self, type, default = None):
+        """ get Image"""
         return self._getValue(type, "img", default)
     
     def getWidth(self, type, default = None):
+        """get Width"""
         return self._getValue(type, "width", default)
     
     def getHeight(self, type, default = None):
+        """get height"""
         return self._getValue(type, "height", default)
     
     def _getValue(self, type, attr, default = None):
-        r = self.__xml.xml_xpath("/htmloutput/icons/icon[@type='%s']" % type)
-        if len(r) == 0:
+        """get value"""
+        r_attr = self.__xml.xml_xpath("/htmloutput/icons/icon[@type='%s']" % type)
+        if len(r_attr) == 0:
             if default == None:
                 raise Exception("Not found")
             else:
                 return default
-        return r[0][attr]
+        return r_attr[0][attr]
     
 class XML2XHTML:
     """ This class is used to generate an html file from the given xml """
@@ -77,7 +80,7 @@
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")
         self.__doc = dom.createDocument(None, "html", doctype)
         self.__xhtml = self.__doc.getElementsByTagName("html")[0]
-        self.__xhtml.setAttributeNS("", "xmlns", "http://www.w3.org/1999/xhtml")        
+        self.__xhtml.setAttributeNS("", "xmlns", "http://www.w3.org/1999/xhtml")
         self.__id = 0
         self.__xhtml_summary = None
         self.__tags = {}
@@ -92,47 +95,51 @@
                           '__event' : XML2XHTML.forname('helium.output.widgets.Event')}
     
     def _getId(self):
+        """get ID"""
         self.__id += 1
         return self.__id
 
     def addCSSLink(self, url):
+        """add CSS Link"""
         self.__css.append(url)
         
     def addJScriptLink(self, url):
+        """add Script Link"""
         self.__javascript.append(url)
         
     def _generateCSSLinks(self, container):
+        """generate CSS Links"""
         for link in self.__css:
-            l = self.__doc.createElementNS("", "link")
+            l_link = self.__doc.createElementNS("", "link")
             if self.__usedataurl:
-                l.setAttributeNS("", "href", dataurl.from_url(link))
+                l_link.setAttributeNS("", "href", dataurl.from_url(link))
             else:
-                l.setAttributeNS("", "href", link)
-            l.setAttributeNS("", "rel", "stylesheet")
-            l.setAttributeNS("", "type", "text/css")
-            container.appendChild(l)
-            
+                l_link.setAttributeNS("", "href", link)
+            l_link.setAttributeNS("", "rel", "stylesheet")
+            l_link.setAttributeNS("", "type", "text/css")
+            container.appendChild(l_link)
+
     def _generateJScriptLink(self, container):
+        """generate J Script Link"""
         for link in self.__javascript:
-            l = self.__doc.createElementNS("", "script")
+            l_link = self.__doc.createElementNS("", "script")
             if self.__usedataurl:
-                l.setAttributeNS("", "src", dataurl.from_url(link))
+                l_link.setAttributeNS("", "src", dataurl.from_url(link))
             else:
-                l.setAttributeNS("", "src", link)
-            l.setAttributeNS("", "type", "text/javascript")
-            l.appendChild(self.__doc.createTextNode(""))
-            container.appendChild(l)
-        
-        
+                l_link.setAttributeNS("", "src", link)
+            l_link.setAttributeNS("", "type", "text/javascript")
+            l_link.appendChild(self.__doc.createTextNode(""))
+            container.appendChild(l_link)
+
     def generate(self):
+        """generate"""
         root = self.__srcdoc.documentElement
         if root.tagName != "__log":
             raise Exception("Invalid document must be __log.")
 
-        for c in root.getElementsByTagName("__customoutputer"):
-            self.__factory[c.attributes['type'].value] = XML2XHTML.forname(c.attributes['module'].value)
+        for cust_out in root.getElementsByTagName("__customoutputer"):
+            self.__factory[cust_out.attributes['type'].value] = XML2XHTML.forname(cust_out.attributes['module'].value)
 
-        
         head = self.__doc.createElementNS("", "head")
         title = self.__doc.createElementNS("", "title")
         self.__title = self.__doc.createTextNode("")
@@ -145,72 +152,76 @@
         body = self.__doc.createElementNS("", "body") 
         self.__xhtml.appendChild(head)
         self.__xhtml.appendChild(body)
-        
-                    
-        for c in root.childNodes:            
-            if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__header":
-                self._handleHeader(c, body)
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__summary":
-                self._handleSummary(c, body)
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__maincontent":
-                self._handleMainContent(c, body)
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "build":
-                self._handleBuild(c, body)
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'] == "maincontent":
-                self._handleMainContent(c, body)
+
+        for child in root.childNodes:
+            if child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "__header":
+                self._handleHeader(child, body)
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "__summary":
+                self._handleSummary(child, body)
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "__maincontent":
+                self._handleMainContent(child, body)
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "build":
+                self._handleBuild(child, body)
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "task" and child.attributes.has_key('type') and child.attributes['type'] == "maincontent":
+                self._handleMainContent(child, body)
 
         try:
             footer = root.getElementsByTagName("__footer")[0]
-            f = self.__factory["__footer"](self.__doc, body)
+            f_foot = self.__factory["__footer"](self.__doc, body)
             if footer.attributes.has_key("title"):
-                f.setTitle(footer.attributes['title'].value)
+                f_foot.setTitle(footer.attributes['title'].value)
             if footer.attributes.has_key("subtitle"):
-                f.setSubTitle(footer.attributes['subtitle'].value)
-        except Exception:            
+                f_foot.setSubTitle(footer.attributes['subtitle'].value)
+        except Exception:
             pass
         # Generate summary
         self._createSummary()
 
     def _handleHeader(self, node, container):
-        h = self.__factory["__header"](self.__doc, container)
+        """handle Header"""
+        header = self.__factory["__header"](self.__doc, container)
         if node.attributes.has_key('title'):
             self.__title.data = node.attributes['title'].value
-            h.setTitle(node.attributes['title'].value)        
+            header.setTitle(node.attributes['title'].value)
         if node.attributes.has_key("subtitle"):
-            h.setSubTitle(node.attributes['subtitle'].value)
+            header.setSubTitle(node.attributes['subtitle'].value)
         
     def _handleSummary(self, node, container):
+        """handle Summary"""
         box = self.__factory["__summary"](self.__doc, container)
         if node.attributes.has_key('title'):
             box.setTitle(node.attributes["title"].value)
         
-        for c in node.getElementsByTagName("__elmt"):           
-            box.addElement(c.attributes['tag'].value, c.attributes['val'].value)
+        for c_tag in node.getElementsByTagName("__elmt"):
+            box.addElement(c_tag.attributes['tag'].value, c_tag.attributes['val'].value)
         self.__xhtml_summary = box
     
     def _handleBuild(self, node, container):
-        for c in node.childNodes:
-            if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'].value == 'maincontent':
-                self._handleMainContent(c, container)
+        """handle Build"""
+        for child in node.childNodes:
+            if child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "task" and child.attributes.has_key('type') and child.attributes['type'].value == 'maincontent':
+                self._handleMainContent(child, container)
                 
 
     def _handleMainContent(self, node, container):
+        """handle Main Content"""
         box = self.__factory["__maincontent"](self.__doc, container)
         if node.attributes.has_key("title"):
             box.setTitle(node.attributes["title"].value)
         if node.attributes.has_key("name"):
             box.setTitle(node.attributes["name"].value)
-        for c in node.childNodes:
-            if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__event":
-                self._handleEvent(c, box.getDOMContainer())
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'].value == 'event':
-                self._handleEvent(c, box.getDOMContainer())
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "message":
-                self._handleMessage(c, box.getDOMContainer())
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE:
-                self._handlePrint(c, box.getDOMContainer())
+        for child in node.childNodes:
+            if child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "__event":
+                self._handleEvent(child, box.getDOMContainer())
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "task" and child.attributes.has_key('type') and child.attributes['type'].value == 'event':
+                self._handleEvent(child, box.getDOMContainer())
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "message":
+                self._handleMessage(child, box.getDOMContainer())
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE:
+                self._handlePrint(child, box.getDOMContainer())
 
     def _handleEvent(self, node, container):
+        """hnadle Event"""
         tags = self.__tags
         self.__tags = {}
         event = self.__factory["__event"](self.__doc, container, self._getId())
@@ -218,59 +229,62 @@
             event.setTitle(node.attributes['title'].value)
         elif node.attributes.has_key('name'):
             event.setTitle(node.attributes['name'].value)
-        for c in node.childNodes:            
-            if c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "__event":
-                self._handleEvent(c, event.getDOMContainer())
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "task" and c.attributes.has_key('type') and c.attributes['type'].value == 'event':
-                self._handleEvent(c, event.getDOMContainer())
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE and c.tagName == "message":
-                self._handleMessage(c, event.getDOMContainer())
-            elif c.nodeType == xml.dom.Node.ELEMENT_NODE:
-                self._handlePrint(c, event.getDOMContainer())
+        for child in node.childNodes:            
+            if child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "__event":
+                self._handleEvent(child, event.getDOMContainer())
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "task" and child.attributes.has_key('type') and child.attributes['type'].value == 'event':
+                self._handleEvent(child, event.getDOMContainer())
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE and child.tagName == "message":
+                self._handleMessage(child, event.getDOMContainer())
+            elif child.nodeType == xml.dom.Node.ELEMENT_NODE:
+                self._handlePrint(child, event.getDOMContainer())
                 
         keys = self.__tags.keys()
         keys.sort()
-        for name in keys:         
+        for name in keys:
             event.addStatistics(name.replace("__", ""), self.__tags[name])
         self.__tags = self._mergeStatistics(tags, self.__tags)
         
     def _handleMessage(self, node, container):
+        """ handle Message"""
         if node.attributes['priority'].value == "printraw":
-            t = self.__factory["__printraw"](self.__doc, container)
-            for n in node.childNodes:
-                if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE:
-                    t.appendText(n.data)
+            t_print = self.__factory["__printraw"](self.__doc, container)
+            for n_node in node.childNodes:
+                if n_node.nodeType == xml.dom.Node.CDATA_SECTION_NODE:
+                    t_print.appendText(n_node.data)
         else:
-            t = self.__factory["__print"](self.__doc, container)
-            for n in node.childNodes:
-                if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE:
-                    t.appendText(n.data)
+            t_print = self.__factory["__print"](self.__doc, container)
+            for n_node in node.childNodes:
+                if n_node.nodeType == xml.dom.Node.CDATA_SECTION_NODE:
+                    t_print.appendText(n_node.data)
             if node.attributes['priority'].value != "print":
-                t.setIcon(self.__config.getClass(node.attributes['priority'].value, "icn_dft"))
+                t_print.setIcon(self.__config.getClass(node.attributes['priority'].value, "icn_dft"))
                 if self.__tags.has_key(node.attributes['priority'].value):
                     self.__tags[node.attributes['priority'].value] += 1
                 else:
                     self.__tags[node.attributes['priority'].value] = 1
 
     def _handlePrint(self, node, container):
+        """handle print"""
         if node.tagName == "__printraw":
-            t = self.__factory["__printraw"](self.__doc, container)
-            for n in node.childNodes:
-                if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE or n.nodeType == xml.dom.Node.TEXT_NODE:
-                    t.appendText(n.data)
+            t_print = self.__factory["__printraw"](self.__doc, container)
+            for n_node in node.childNodes:
+                if n_node.nodeType == xml.dom.Node.CDATA_SECTION_NODE or n_node.nodeType == xml.dom.Node.TEXT_NODE:
+                    t_print.appendText(n_node.data)
         else:
-            t = self.__factory["__print"](self.__doc, container)
-            for n in node.childNodes:
-                if n.nodeType == xml.dom.Node.CDATA_SECTION_NODE or n.nodeType == xml.dom.Node.TEXT_NODE:
-                    t.appendText(n.data)
+            t_print = self.__factory["__print"](self.__doc, container)
+            for n_node in node.childNodes:
+                if n_node.nodeType == xml.dom.Node.CDATA_SECTION_NODE or n_node.nodeType == xml.dom.Node.TEXT_NODE:
+                    t_print.appendText(n_node.data)
             if node.tagName != "__print":
-                t.setIcon(self.__config.getClass(node.tagName, "icn_dft"))
+                t_print.setIcon(self.__config.getClass(node.tagName, "icn_dft"))
                 if self.__tags.has_key(node.tagName):
                     self.__tags[node.tagName] += 1
                 else:
                     self.__tags[node.tagName] = 1
 
     def _createSummary(self):
+        """create Summary"""
         # pylint: disable-msg=E1101
         if self.__xhtml_summary == None:
             self.__xhtml_summary = Summary(self.__doc, self.__body)
@@ -279,29 +293,30 @@
         keys.sort()
         for name in keys:
             self.__xhtml_summary.addStatistics(name.replace("__", ""), self.__tags[name])
+        # pylint: enable-msg=E1101
 
-   
     def _mergeStatistics(self, tags, newTags):
+        """merge Statistics"""
         for name in newTags.keys():
             if tags.has_key(name):
                 tags[name] += newTags[name]
             else:
                 tags[name] = newTags[name]
         return tags
-        
-    def WriteToFile(self, filename):        
+
+    def WriteToFile(self, filename):
+        """write to file"""
         file_object = open(filename, "w")
         file_object.write(codecs.BOM_UTF8)
         file_object.write(self.__doc.toprettyxml(encoding="utf-8"))
         file_object.close()
-    
-    
+
+
     @staticmethod
     def forname(classname):
-        r = re.match("^(?P<modname>(?:\w+\.?)*)\.(?P<classname>(\w+?))$", classname)
-        if r != None:
-            return getattr(__import__(r.groupdict()['modname'], [], [], r.groupdict()['classname']), r.groupdict()['classname'])
+        """forname"""
+        result = re.match("^(?P<modname>(?:\w+\.?)*)\.(?P<classname>(\w+?))$", classname)
+        if result != None:
+            return getattr(__import__(result.groupdict()['modname'], [], [], result.groupdict()['classname']), result.groupdict()['classname'])
         else:
             raise Exception("Error retreiving module and classname for %s" % classname)
-        
-
--- a/buildframework/helium/sf/python/pythoncore/lib/heliumlogging.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/heliumlogging.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,14 +16,16 @@
 #
 #Description:
 #===============================================================================
+""" helium logging file"""
 
 import os
 import logging
 import logging.config
+
 if os.environ.has_key("HELIUM_CACHE_DIR"):
-    logconf = os.path.join(os.environ['HELIUM_CACHE_DIR'], "logging." + os.environ['PID'] + ".conf")
+    _logconf = os.path.join(os.environ['HELIUM_CACHE_DIR'], "logging." + os.environ['PID'] + ".conf")
 else:
-    logconf = os.path.join(os.getcwd(), "logging.conf")
+    _logconf = os.path.join(os.getcwd(), "logging.conf")
 
-if os.path.exists(logconf):
-    logging.config.fileConfig(logconf)
\ No newline at end of file
+if os.path.exists(_logconf):
+    logging.config.fileConfig(_logconf)
--- a/buildframework/helium/sf/python/pythoncore/lib/iadinfo.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/iadinfo.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" IAD info """
 
 import sys, os
 import struct
@@ -26,20 +27,22 @@
 try :
     from pyasn1.codec.der import decoder
     from pyasn1.type import base
-except :
+except ImportError:
     PyASN1Availabe = False
 
 def _findItem(item, itemParent, index, objectIdentifier) :
+    """find Item"""
     if isinstance(item, base.AbstractSimpleAsn1Item) :
         if item == objectIdentifier :
             return itemParent[index + 1]
     else:
-        for i in range(len(item)) :
-            found = _findItem(item[i], item, i, objectIdentifier)
+        for i_item in range(len(item)) :
+            found = _findItem(item[i_item], item, i_item, objectIdentifier)
             if found: 
                 return found
 
 def findItem(decodedCert, objectIdentifier) :
+    """find item"""
     return _findItem(decodedCert, None, 0, objectIdentifier)
 
 
@@ -49,6 +52,7 @@
         pass
     
     def parse(self, decodedCert) :
+        """parse certificate Organisation"""
         self.commonName = findItem(decodedCert, (2, 5, 4, 3))
         self.countryCode = findItem(decodedCert, (2, 5, 4, 6))
         self.locality = findItem(decodedCert, (2, 5, 4, 7))
@@ -57,6 +61,7 @@
         self.organization = findItem(decodedCert, (2, 5, 4, 10))
 
     def readableStr(self) :
+        """readable String"""
         buf = ""
         if self.commonName :
             buf += self.commonName.prettyPrint() + "\n"
@@ -78,6 +83,7 @@
         pass
         
     def parse(self, decodedCert) :
+        """parse"""
         self.issuer = CertificateOrganization()
         self.issuer.parse(decodedCert[0][3])
         
@@ -85,10 +91,11 @@
         self.signer.parse(decodedCert[0][5])
         
     def readableStr(self) :
+        """readable String"""
         buf = "Signer:\n      " + "\n      ".join(self.signer.readableStr().split('\n')) + "\n"
         buf += "Issuer:\n      " + "\n      ".join(self.issuer.readableStr().split('\n')) + "\n"
         return buf
-            
+
 
 class SISFileHeader :
     """ Class SIS File header """
@@ -106,6 +113,7 @@
         self.subFields = []
         
     def readFieldLength(self, fileReader) :
+        """read Field Length"""
         length = fileReader.readBytesAsUint(4)
         if length & 0x80000000 > 0 :
             length = length << 32
@@ -113,6 +121,7 @@
         return length
         
     def findField(self, fieldType, startIndex=0) :
+        """find Field"""
         result = None
         index = startIndex
         
@@ -124,9 +133,11 @@
         return (result, index)
         
     def readableStr(self) :
+        """readable String"""
         return ""
     
     def traverse(self, handler, depth=0) :
+        """ traverse"""
         handler.handleField(self, depth)
         for field in self.subFields :
             field.traverse(handler, depth + 1)
@@ -137,6 +148,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialisation From File"""
         self.length = self.readFieldLength(fileReader)
         fileReader.readPlainBytes(self.length)
 
@@ -147,6 +159,7 @@
         self.data = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         buf = fileReader.readPlainBytes(self.length)
         self.data = u""
@@ -156,6 +169,7 @@
             self.data += unichr(ord(temp[0]) | ord(temp[1]) << 8)
         
     def readableStr(self) :
+        """readable String"""
         return self.data
         
 class SISArrayField(SISField) :
@@ -164,18 +178,19 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         type = fileReader.readBytesAsInt(4)
-        l = self.length - 4
-        while l > 0 :
+        l_len = self.length - 4
+        while l_len > 0 :
             field = SISFieldTypes[type]()
             field.type = type
             field.initFromFile(fileReader)
             self.subFields.append(field)
             
-            l -= field.length + 4 # field length + the length field
+            l_len -= field.length + 4 # field length + the length field
             padding = fileReader.skipPadding()
-            l -= padding
+            l_len -= padding
 
 class SISCompressedField(SISField) :
     """ Class SIS CompressedField """
@@ -186,6 +201,7 @@
         self.data = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.algorithm = fileReader.readBytesAsUint(4)
         self.uncompressedDataSize = fileReader.readBytesAsUint(8)
@@ -202,6 +218,7 @@
         self.version = (- 1, - 1, - 1)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         major = fileReader.readBytesAsInt(4)
         minor = fileReader.readBytesAsInt(4)
@@ -209,6 +226,7 @@
         self.version = (major, minor, build)
         
     def readableStr(self) :
+        """readable string"""
         return str(self.version)
     
 class SISVersionRangeField(SISField) :
@@ -219,6 +237,7 @@
         self.toVersion = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.fromVersion = fieldParser.parseField(fileReader)
@@ -234,12 +253,14 @@
         self.day = None
         
     def initFromFile(self, fileReader) :
+        """initialise from File"""
         self.length = self.readFieldLength(fileReader)
         self.year = fileReader.readBytesAsUint(2)
         self.month = fileReader.readBytesAsUint(1)
         self.day = fileReader.readBytesAsUint(1)
     
     def readableStr(self) :
+        """readable string"""
         return str(self.year) + "." + str(self.month) + "." + str(self.day)
     
 class SISTimeField(SISField) :
@@ -251,12 +272,14 @@
         self.seconds = None
         
     def initFromFile(self, fileReader) :
+        """initialise from File"""
         self.length = self.readFieldLength(fileReader)
         self.hours = fileReader.readBytesAsUint(1)
         self.minutes = fileReader.readBytesAsUint(1)
         self.seconds = fileReader.readBytesAsUint(1)
     
     def readableStr(self) :
+        """readable String"""
         return str(self.hours) + ":" + str(self.minutes) + ":" + str(self.seconds)
     
 class SISDateTimeField(SISField) :
@@ -267,6 +290,7 @@
         self.time = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.date = fieldParser.parseField(fileReader)
@@ -279,10 +303,12 @@
         self.uid = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.uid = fileReader.readBytesAsUint(4)
         
     def readableStr(self) :
+        """readable String"""
         return hex(self.uid)
     
 class SISLanguageField(SISField) :
@@ -292,10 +318,12 @@
         self.language = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.language = fileReader.readBytesAsUint(4)
         
     def readableStr(self) :
+        """readable String"""
         return str(self.language)
     
 class SISContentsField(SISField) :
@@ -304,6 +332,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         field = fieldParser.parseField(fileReader)
@@ -320,6 +349,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         bufferReader = SISBufferReader(fileReader.readPlainBytes(self.length))
@@ -336,6 +366,7 @@
         self.installFlags = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # UID
@@ -353,6 +384,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # languages
@@ -363,6 +395,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # options
@@ -373,6 +406,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # target devices
@@ -385,6 +419,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # UID
@@ -402,6 +437,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # properties
@@ -414,13 +450,13 @@
         self.value = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.key = fileReader.readBytesAsInt(4)
         self.value = fileReader.readBytesAsInt(4)
     
-# There is a type for this field, but there is no definition of the field contents
 class SISSignaturesField(SISUnsupportedField) :
-    """ Class SISSignaturesField """
+    """ Class SISSignaturesField There is a type for this field, but there is no definition of the field contents"""
     pass
     
 class SISCertificateChainField(SISField) :
@@ -429,6 +465,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # certificate data
@@ -439,6 +476,7 @@
         SISField.__init__(self)
 
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # logo file
@@ -454,6 +492,7 @@
         self.fileIndex = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         
@@ -471,6 +510,7 @@
         self.fileIndex = fileReader.readBytesAsUint(4)
         
     def readableStr(self) :
+        """readable string"""
         return "index: " + str(self.fileIndex)
     
 class SISHashField(SISField) :
@@ -480,6 +520,7 @@
         self.algorithm = None
 
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.algorithm = fileReader.readBytesAsUint(4)
@@ -491,6 +532,7 @@
         SISField.__init__(self)
 
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # expression
@@ -503,6 +545,7 @@
         SISField.__init__(self)
 
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # expression
@@ -517,6 +560,7 @@
         self.ifBlocks = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader))
@@ -531,6 +575,7 @@
         self.integerValue = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.operator = fileReader.readBytesAsUint(4)
@@ -549,6 +594,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # data units
@@ -559,6 +605,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # file data
@@ -569,6 +616,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # raw file data
@@ -579,6 +627,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # names
@@ -590,6 +639,7 @@
         self.checksum = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.checksum = fileReader.readBytesAsUint(2)
     
@@ -600,6 +650,7 @@
         self.checksum = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.checksum = fileReader.readBytesAsUint(2)
     
@@ -609,6 +660,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # signature algorithm
@@ -621,6 +673,7 @@
         self.data = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.data = fileReader.readPlainBytes(self.length)
     
@@ -630,6 +683,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # algorithm identifier
@@ -640,6 +694,7 @@
         SISField.__init__(self)
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         fieldParser = SISFieldParser()
         self.subFields.append(fieldParser.parseField(fileReader)) # signatures
@@ -652,6 +707,7 @@
         self.dataIndex = None
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.dataIndex = fileReader.readBytesAsUint(4)
 
@@ -663,6 +719,7 @@
         self.readableCaps = []
         
     def initFromFile(self, fileReader) :
+        """initialise From File"""
         self.length = self.readFieldLength(fileReader)
         self.capabilities = fileReader.readBytesAsUint(self.length)
         
@@ -671,6 +728,7 @@
                 self.readableCaps.append(CapabilityNames[i])
                 
     def readableStr(self) :
+        """readable string"""
         return " ".join(self.readableCaps)
     
 SISFieldTypes = { 
@@ -841,44 +899,49 @@
         self.bytesRead = 0
         
     def readUnsignedBytes(self, numBytes) :
+        """read Unsigned bytes"""
         buf = self.readPlainBytes(numBytes)
         if len(buf) < numBytes :
             return []
             
         format = ""
-        for i in range(numBytes) :
+        for _ in range(numBytes) :
             format += "B"
         return struct.unpack(format, buf)
     
     def readSignedBytes(self, numBytes) :
+        """read signed bytes"""
         buf = self.readPlainBytes(numBytes)
         if len(buf) < numBytes :
             return []
             
         format = ""
-        for i in range(numBytes) :
+        for _ in range(numBytes) :
             format += "b"
         return struct.unpack(format, buf)
         
     def readBytesAsUint(self, numBytes) :
+        """read bytes as Unit"""
         result = 0
         bytes = self.readUnsignedBytes(numBytes)
         if len(bytes) == numBytes :
-            for i in range(numBytes) :
-                result |= bytes[i] << (i * 8)
+            for i_byte in range(numBytes) :
+                result |= bytes[i_byte] << (i_byte * 8)
         
         return result
         
     def readBytesAsInt(self, numBytes) :
+        """read bytes as Integer"""
         result = 0
         bytes = self.readSignedBytes(numBytes)
         if len(bytes) == numBytes :
-            for i in range(numBytes) :
-                result |= bytes[i] << (i * 8)
+            for i_byte in range(numBytes) :
+                result |= bytes[i_byte] << (i_byte * 8)
         
         return result
         
     def skipPadding(self) :
+        """skip padding"""
         result = 0
         if self.bytesRead % 4 != 0 :
             paddingLength = 4 - self.bytesRead % 4
@@ -888,6 +951,7 @@
         return result
 
     def readPlainBytes(self, numBytes) :
+        """read plain bytes"""
         pass
 
 class SISFileReader(SISReader) : 
@@ -899,6 +963,7 @@
         self.bytesRead = 0
 
     def readPlainBytes(self, numBytes) :
+        """read Plain byytes"""
         if self.eof :
             return ""
             
@@ -916,6 +981,7 @@
         return buf
 
     def isEof(self) :
+        """is it End of File"""
         return self.eof
         
 class SISBufferReader(SISReader) :
@@ -925,6 +991,7 @@
         self.bytesRead = 0
         
     def readPlainBytes(self, numBytes) :
+        """read Plain bytes"""
         if self.isEof() :
             return ""
             
@@ -938,6 +1005,7 @@
         return result
             
     def isEof(self) :
+        """is it End of File"""
         return self.bytesRead >= len(self.buffer)
         
 class SISFieldParser :
@@ -967,18 +1035,21 @@
         self.fileHeader = SISFileHeader()
         
     def parse(self, filename) :
+        """parse"""
         fin = open(filename, 'rb')
         fileReader = SISFileReader(fin)
         self.parseHeader(fileReader)
         self.parseSISFields(fileReader)
         
     def parseHeader(self, fileReader) :
+        """parse Holder"""
         self.fileHeader.uid1 = fileReader.readBytesAsUint(4)
         self.fileHeader.uid2 = fileReader.readBytesAsUint(4)
         self.fileHeader.uid3 = fileReader.readBytesAsUint(4)
         self.fileHeader.uidChecksum = fileReader.readBytesAsUint(4)
         
     def parseSISFields(self, fileReader) :
+        """parse SIS Fileds"""
         parser = SISFieldParser()
         while not fileReader.isEof() :
             self.subFields.append(parser.parseField(fileReader))
@@ -990,7 +1061,8 @@
         self.fileDatas = []
         self.signatureCertificateChains = []
         
-    def handleField(self, field, depth) :
+    def handleField(self, field, _) :
+        """handle Field"""
         if field.type == FileDescriptionField :
             self.files.append(field)
         elif field.type == FileDataField :
@@ -999,31 +1071,32 @@
             self.signatureCertificateChains.append(field)
 
     def execute(self, options) :
-        for f in self.files :
+        """execute"""
+        for f_file in self.files :
             if options.info :
-                buf = "   " + f.findField(StringField)[0].readableStr()
-                caps = f.findField(CapabilitiesField)[0]
+                buf = "   " + f_file.findField(StringField)[0].readableStr()
+                caps = f_file.findField(CapabilitiesField)[0]
                 if caps :
-                    buf += " [" + " ".join(f.findField(CapabilitiesField)[0].readableCaps) + "]"
+                    buf += " [" + " ".join(f_file.findField(CapabilitiesField)[0].readableCaps) + "]"
                 print buf
             if options.extract :
-                parts = f.findField(StringField)[0].readableStr().split("\\")
+                parts = f_file.findField(StringField)[0].readableStr().split("\\")
                 if len(parts[len(parts) - 1]) > 0 :
                     path = os.path.abspath(options.extract)
                     path += os.sep + os.sep.join(parts[1: - 1])
                     if not os.path.exists(path) :
                         os.makedirs(path)
                     newFile = file(path + os.sep + parts[len(parts) - 1], "wb")
-                    newFile.write(self.fileDatas[f.fileIndex].findField(CompressedField)[0].data)
+                    newFile.write(self.fileDatas[f_file.fileIndex].findField(CompressedField)[0].data)
                     newFile.close()
-        for s in self.signatureCertificateChains :
+        for sig in self.signatureCertificateChains :
             if options.certificate:
-                buf = s.findField(CertificateChainField)[0].subFields[0].data
+                buf = sig.findField(CertificateChainField)[0].subFields[0].data
                 print "Certificate chain:"
-                i = 1
+                i_num = 1
                 while len(buf) > 0 :
-                    print "   Certificate " + str(i) + ":"
-                    i += 1
+                    print "   Certificate " + str(i_num) + ":"
+                    i_num += 1
                     decoded = decoder.decode(buf)
                     cer = CertificateInfo()
                     cer.parse(decoded[0])
@@ -1032,13 +1105,14 @@
                     buf = decoded[1]
             
 class ContentPrinter :
-    """ A handler class which prints the field contents """        
+    """ A handler class which prints the field contents """
     def __init__(self) :
         pass
         
     def handleField(self, field, depth) :
+        """handle Field"""
         buf = ""
-        for i in range(depth) :
+        for _ in range(depth) :
             buf += "  "
         buf += FieldNames[field.type] + " "
         if len(field.readableStr()) > 0 :
@@ -1060,21 +1134,23 @@
         self.installFlags = 0
         
     def handleDependency(self, field) :
+        """handle dependancy"""
         dep = [0, - 1, - 1, - 1, - 1, - 1, - 1]
         dep[0] = field.subFields[0].uid
         if field.subFields[1] and field.subFields[1].type == VersionRangeField :
-            r = field.subFields[1]
-            if r.fromVersion != None :
-                dep[1] = r.fromVersion.version[0]
-                dep[2] = r.fromVersion.version[1]
-                dep[3] = r.fromVersion.version[2]
-            if r.toVersion != None :
-                dep[4] = r.toVersion.version[0]
-                dep[5] = r.toVersion.version[1]
-                dep[6] = r.toVersion.version[2]
+            res = field.subFields[1]
+            if res.fromVersion != None :
+                dep[1] = res.fromVersion.version[0]
+                dep[2] = res.fromVersion.version[1]
+                dep[3] = res.fromVersion.version[2]
+            if res.toVersion != None :
+                dep[4] = res.toVersion.version[0]
+                dep[5] = res.toVersion.version[1]
+                dep[6] = res.toVersion.version[2]
         return dep
         
-    def handleField(self, field, depth) :
+    def handleField(self, field, _) :
+        """handle Field"""
         if field.type == InfoField :
             self.packageVersion = field.subFields[4].version
             self.packageVersionField = field.subFields[4]
@@ -1089,14 +1165,15 @@
         elif field.type == LanguageField :
             self.languages.append(field.language)
         elif field.type == PrerequisitiesField :
-            for f in field.subFields[0].subFields :
-                dependency = self.handleDependency(f)
+            for f_field in field.subFields[0].subFields :
+                dependency = self.handleDependency(f_field)
                 self.platformDependencies.append(dependency)
-            for f in field.subFields[1].subFields :
-                dependency = self.handleDependency(f)
+            for f_field in field.subFields[1].subFields :
+                dependency = self.handleDependency(f_field)
                 self.packageDependencies.append(dependency)
         
     def getInfo (self, fileName) :
+        """get Info"""
         sisInfo = SISInfo()
         sisInfo.parse(fileName)
         handler = IADHandler()
@@ -1142,5 +1219,5 @@
         return info
 
 if __name__ == "__main__" :
-    handler = IADHandler()
-    print (handler.getInfo (sys.argv[1]))
+    _handler = IADHandler()
+    print (_handler.getInfo (sys.argv[1]))
--- a/buildframework/helium/sf/python/pythoncore/lib/icf2txt.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/icf2txt.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" icf 2 text"""
 
 import sys
 import amara
@@ -33,6 +34,7 @@
     return result
 
 def main():
+    """main method in the file"""
     if len(sys.argv) != 3:
         print "Usage: icf2txt.py bom.xml out.txt"
         sys.exit(1)
--- a/buildframework/helium/sf/python/pythoncore/lib/ido.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/ido.py	Wed Jun 16 16:51:40 2010 +0300
@@ -44,7 +44,7 @@
     """ This function returns a datetime object representing the monday from closest
         odd week.
     """
-    isoyear, isoweek, isoday = now.isocalendar()
+    _, isoweek, isoday = now.isocalendar()
     week = isoweek - 1
     day = isoday - 1
     monday = now - datetime.timedelta(days=day + week.__mod__(2) * 7)
--- a/buildframework/helium/sf/python/pythoncore/lib/idoprep.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/idoprep.py	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
 import ido
 
 logging.basicConfig(level=logging.INFO)
-logger = logging.getLogger("check_latest_release")
+_logger = logging.getLogger("check_latest_release")
 
 def validate(grace, service, product, release):
     """ Validate s60 grace server, s60 grace service, s60 grace product and 
@@ -50,7 +50,7 @@
         revision = rev
 
     if cachefilename:
-        logger.info(str("Using cache file: %s" % cachefilename))
+        _logger.info(str("Using cache file: %s" % cachefilename))
     
     checkmd5 = False
     if s60gracecheckmd5 != None:
@@ -64,10 +64,10 @@
     result = []
     for rel in os.listdir(branch):
         relpath = os.path.join(branch, rel)
-        logger.info("Checking: %s" % str(relpath))
+        _logger.info("Checking: %s" % str(relpath))
         res = re.match(r"%s%s$" % (release, revision), rel, re.I)
         if res != None:
-            logger.info("Found: %s" % str(relpath))
+            _logger.info("Found: %s" % str(relpath))
             result.append(relpath)
     result.sort(reverse=True)
     use_tickler = False
@@ -79,22 +79,22 @@
         try:
             metadata_filename = symrec.find_latest_metadata(str(rel))
             if metadata_filename is not None and os.path.exists(metadata_filename):
-                logger.info(str("Validating: %s" % metadata_filename))
+                _logger.info(str("Validating: %s" % metadata_filename))
                 if (use_tickler):
                     validator = symrec.ValidateTicklerReleaseMetadata(metadata_filename, cachefilename)
                 else:
                     validator = symrec.ValidateReleaseMetadataCached(metadata_filename, cachefilename)
                 if validator.is_valid(checkmd5):
-                    logger.info(str("%s is valid." % rel))
+                    _logger.info(str("%s is valid." % rel))
                     validresults.append(rel)
                     break
                 else:
-                    logger.info(str("%s is not a valid release." % rel))
+                    _logger.info(str("%s is not a valid release." % rel))
             elif metadata_filename is None:
-                logger.info(str("Could not find the release metadata file under %s" % rel))
-        except Exception, e:
-            logger.warning(str("WARNING: %s: %s" % (rel , e)))
-            logger.warning(("%s is not a valid release." % rel))
+                _logger.info(str("Could not find the release metadata file under %s" % rel))
+        except Exception, exc:
+            _logger.warning(str("WARNING: %s: %s" % (rel , exc)))
+            _logger.warning(("%s is not a valid release." % rel))
             traceback.print_exc()
     
     result = validresults
@@ -108,13 +108,13 @@
     vfile = os.path.join(buiddrive + os.sep, 's60_version.txt')
     version = None
     if (os.path.exists(vfile)):
-        logger.info("Are we still up-to-date compare to %s" % str(vfile))
-        f = open(str(vfile), 'r')
-        version = f.readline()
-        logger.info(str("'%s' == '%s'" % (version, resultname)))
-        f.close()
+        _logger.info("Are we still up-to-date compare to %s" % str(vfile))
+        f_file = open(str(vfile), 'r')
+        version = f_file.readline()
+        _logger.info(str("'%s' == '%s'" % (version, resultname)))
+        f_file.close()
     else:
-        logger.info("Version file not found getting new environment...")
+        _logger.info("Version file not found getting new environment...")
     return version
         
 def create_ado_mapping(sysdefconfig, adomappingfile, adoqualitymappingfile, builddrive, adoqualitydirs):
@@ -122,7 +122,6 @@
     input = open(sysdefconfig, 'r')
     output = open(adomappingfile, 'w')
     outputquality = open(adoqualitymappingfile, 'w')
-    components = {}
     for sysdef in input.readlines():
         sysdef = sysdef.strip()
         if len(sysdef) > 0:
--- a/buildframework/helium/sf/python/pythoncore/lib/integration/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/integration/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,4 +16,4 @@
 #
 #Description:
 #===============================================================================
-
+""" integration.quality and integration.ant initialisation file"""
--- a/buildframework/helium/sf/python/pythoncore/lib/integration/quality.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/integration/quality.py	Wed Jun 16 16:51:40 2010 +0300
@@ -110,14 +110,19 @@
 
 
 class PolicyValidator(object):
-    """ Validate policy files on a hierarchy. """    
-    def __init__(self, policyfiles=None, csvfile=None, ignoreroot=False):
+    """ Validate policy files on a hierarchy. """
+    def __init__(self, policyfiles=None, csvfile=None, ignoreroot=False, excludes=None):
         """The constructor """
         if policyfiles is None:
             policyfiles = ['distribution.policy.s60']
         self._policyfiles = policyfiles
         self._ids = None
         self._ignoreroot = ignoreroot
+        
+        if not excludes:
+            self._excludes = []
+        else:
+            self._excludes = excludes
 
     def load_policy_ids(self, csvfile):
         """ Load the icds from the CSV file.
@@ -125,7 +130,7 @@
         """
         self._ids = {}
         reader = csv.reader(open(csvfile, "rU"))
-        for row in reader:            
+        for row in reader:
             if len(row)>=3 and re.match(r"^\s*\d+\s*$", row[0]): 
                 self._ids[row[0]] = row
                 if row[1].lower() != "yes" and row[1].lower() != "no" and row[1].lower() != "bin":
@@ -133,7 +138,7 @@
 
     def validate_content(self, filename):
         """  Validating the policy file content. If it cannot be decoded, 
-            it reports an 'invalidencoding'.            
+            it reports an 'invalidencoding'.
             Case 'notinidlist': value is not defined under the id list.
         """
         value = None
@@ -141,7 +146,7 @@
             value = fileutils.read_policy_content(filename)
         except Exception:
             yield ["invalidencoding", filename, None]
-        if value is not None:                        
+        if value is not None:
             if self._ids != None:
                 if value not in self._ids:
                     yield ["notinidlist", filename, value]
@@ -150,9 +155,9 @@
         """ find the policy file under path using filenames under the list. """
         for filename in self._policyfiles:
             if os.sep != '\\':
-                for f in os.listdir(path):
-                    if f.lower() == filename.lower():
-                        return os.path.join(path, f)
+                for f_file in os.listdir(path):
+                    if f_file.lower() == filename.lower():
+                        return os.path.join(path, f_file)
             if os.path.exists(os.path.join(path, filename)):
                 return os.path.join(path, filename)
         return None
@@ -184,7 +189,8 @@
                 # report an error is the directory has no DP file
                 # and any files underneith.
                 for item in os.listdir(dirpath):
-                    if os.path.isfile(os.path.join(dirpath, item)):
+                    if os.path.isfile(os.path.join(dirpath, item)) \
+                        and item not in self._excludes:
                         yield ['missing', dirpath, None]
                         break
 
--- a/buildframework/helium/sf/python/pythoncore/lib/log2xml.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/log2xml.py	Wed Jun 16 16:51:40 2010 +0300
@@ -17,8 +17,8 @@
 #Description:
 #===============================================================================
 
-""" Symbian log converter.
-"""
+""" Symbian log converter."""
+
 import xml.dom.minidom
 import sys
 import os
@@ -82,6 +82,7 @@
 
 
 def find_priority(line, config):
+    """find priority"""
     keys = config.keys()
     keys.reverse()    
     for category in keys:
@@ -98,14 +99,16 @@
         self.__stack = []
   
     def pop(self):
+        """pop off the stack"""
         result = None
         try:
             result = self.__stack.pop()
-        except IndexError, e:
+        except IndexError:
             result = self.__default
         return result
   
     def push(self, item):
+        """push on the stack"""
         self.__stack.append(item)
   
     def __len__(self):
@@ -116,16 +119,16 @@
         These are the only allowed characters: #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF].
     """
     result = ""
-    for c in list(text):
-        v = ord(c)        
-        if v == 0x9 or v == 0xa or v == 0xd:
-            result += c
-        elif v>=0x20 and v <= 0xd7ff:
-            result += c
-        elif v>=0xe000 and v <= 0xfffd:
-            result += c
-        elif v>=0x10000 and v <= 0x10ffff:
-            result += c
+    for char in list(text):
+        v_char = ord(char)
+        if v_char == 0x9 or v_char == 0xa or v_char == 0xd:
+            result += char
+        elif v_char>=0x20 and v_char <= 0xd7ff:
+            result += char
+        elif v_char>=0xe000 and v_char <= 0xfffd:
+            result += char
+        elif v_char>=0x10000 and v_char <= 0x10ffff:
+            result += char
         else:
             result += " " 
     return result
@@ -142,7 +145,7 @@
         self.__intask = 0
 
     def close(self):
-        # closing open tasks...
+        """ closing open tasks"""
         while self.__intask > 0:
             self.close_task()
         self.__stream.write("\t</build>\n")
@@ -150,23 +153,25 @@
         self.__stream.close()
 
     def open_task(self, name):
+        """open taks"""
         self.__indent += "\t"
         self.__intask += 1
         self.__stream.write("%s<task name=\"%s\">\n" % (self.__indent, name))
 
     def close_task(self):
+        """close task"""
         if self.__intask > 0:
             self.__intask -= 1
             self.__stream.write("%s</task>\n" % (self.__indent))
             self.__indent = self.__indent[:-1]
     
     def message(self, priority, msg):
+        """message"""
         try:
             acdata = to_cdata(msg.decode('utf-8', 'ignore'))
             self.__stream.write("%s<message priority=\"%s\"><![CDATA[%s]]></message>\n" % (self.__indent+"\t", priority, acdata))
-        except UnicodeDecodeError, e:
-            print e
-        
+        except UnicodeDecodeError, exc:
+            print exc
 
 
 def convert(inputfile, outputfile, fulllogging=True, configuration=DEFAULT_CONFIGURATION):
@@ -324,28 +329,31 @@
 
 class ContentWriter(ContentHandler):
     """ SAX Content writer. Parse and write an XML file. """
-    def __init__(self, os, indent=""):
-        self.os = os
+    def __init__(self, op_sys, indent=""):
+        self.os = op_sys
         self.indent = indent
         self.__content = u""
     
     def startElement(self, name, attrs):
-        self.os.write(self.indent + "<" + name)        
+        """start Element"""
+        self.os.write(self.indent + "<" + name)
         if attrs.getLength() > 0:
-            self.os.write(" ")        
-        self.os.write(" ".join(map(lambda x: "%s=\"%s\"" % (x, attrs.getValue(x)), attrs.getNames())))            
+            self.os.write(" ")
+        self.os.write(" ".join(map(lambda x: "%s=\"%s\"" % (x, attrs.getValue(x)), attrs.getNames())))
         self.os.write(">\n")
         self.indent += "\t"
         self.__content = ""
     
     def endElement(self, name):
+        """end element"""
         if len(self.__content) > 0:
-            self.os.write(self.indent + self.__content + "\n")                
+            self.os.write(self.indent + self.__content + "\n")
         self.indent = self.indent[:-1]
         self.os.write("%s</%s>\n" % (self.indent, name))
         self.__content = ""
         
-    def characters(self, content):        
+    def characters(self, content):
+        """characters"""
         self.__content += unicode(escape(content.strip()))
 
 class AppendSummary(ContentWriter):
@@ -355,9 +363,11 @@
         self.xmllog = xmllog
 
     def startDocument(self):
+        """start document"""
         self.os.write('<?xml version="1.0" encoding="utf-8"?>\n')
     
     def startElement(self, name, attrs):
+        """start element"""
         ContentWriter.startElement(self, name, attrs)
         if name == "logSummary":
             parser = make_parser()
@@ -381,10 +391,11 @@
     outfile.close()
     # Updating the summary file.
     os.unlink(summary)
-    os.rename(summary + ".tmp", summary)    
+    os.rename(summary + ".tmp", summary)
     
 
 def symbian_log_header(output, config, command, dir):
+    """symbian log header"""
     output.log("===-------------------------------------------------")
     output.log("=== %s" % config)
     output.log("===-------------------------------------------------")
@@ -394,18 +405,20 @@
     output.log("++ Started at %s" % datetime.datetime.now().ctime())
     output.log("+++ HiRes Start %f" % time.time())
     output.log("Chdir %s" % dir)
-    
+
 
 def symbian_log_footer(output):
+    """symbian log footer"""
     output.log("+++ HiRes End %f" % time.time())
     output.log("++ Finished at %s" % datetime.datetime.now().ctime())
-    
-    
+
+
 if __name__ == "__main__":
     convert(sys.argv[1], "%s.xml" % sys.argv[1], fulllogging=False)
-    """ An empty summary:
-        <?xml version=\"1.0\" encoding=\"UTF-8\"?><logSummary/>
-    """
+    # An empty summary:
+    #   <?xml version=\"1.0\" encoding=\"UTF-8\"?><logSummary/>
+    #
+    
     #s = open(r"z:\summary.xml", "w")
     #s.write("""<?xml version=\"1.0\" encoding=\"UTF-8\"?><logSummary/>""")
     #s.close()
--- a/buildframework/helium/sf/python/pythoncore/lib/nokia/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/nokia/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,4 +16,4 @@
 #
 #Description:
 #===============================================================================
-
+"""python core library init file for nokia code"""
--- a/buildframework/helium/sf/python/pythoncore/lib/nokia/gscm.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/nokia/gscm.py	Wed Jun 16 16:51:40 2010 +0300
@@ -42,12 +42,12 @@
 
 def __get_gscm_info(method, dbname):
     """ Generic method that call function 'method' on GSCM wrapper script. """
-    (fd, filename) = tempfile.mkstemp()
-    f = os.fdopen(fd, 'w')
-    f.write(pkg_resources.resource_string(__name__, "get_gscm_info.pl"))# pylint: disable-msg=E1101
-    f.close()
+    (f_desc, filename) = tempfile.mkstemp()
+    f_file = os.fdopen(f_desc, 'w')
+    f_file.write(pkg_resources.resource_string(__name__, "get_gscm_info.pl"))# pylint: disable-msg=E1101
+    f_file.close()
     command = "perl " + filename
-    command += " %s %s" % (method, dbname)    
+    command += " %s %s" % (method, dbname)
     _logger.debug("Running command: %s" % command)
     (output, status) = _execute(command)
     _logger.debug("Status: %s" % status)
--- a/buildframework/helium/sf/python/pythoncore/lib/nokia/nokiaccm.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/nokia/nokiaccm.py	Wed Jun 16 16:51:40 2010 +0300
@@ -80,7 +80,7 @@
                         _logger.info('Database engine set using .netrc (%s)' % n_engine)
                         engine = n_engine
         except IOError:
-            _logger.debug('Error accessing .netrc file')
+            _logger.warning('Warning: Cannot access .netrc file')
 
     # using environment username in case username is not defined.
     if username == None:
@@ -100,6 +100,7 @@
         for current_session in current_sessions:
             if current_session.dbpath == dbpath:
                 return current_session
+        raise ccm.CCMException('No existing session found')
     else:
         if ccm.CCM_BIN == None:
             raise ccm.CCMException("Could not find CM/Synergy executable in the path.")
--- a/buildframework/helium/sf/python/pythoncore/lib/pathaddition/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pathaddition/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -17,3 +17,4 @@
 #Description:
 #===============================================================================
 
+"""python core library path addition initialisation file"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pathaddition/relative.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pathaddition/relative.py	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
 import re
 
 # matches http:// and ftp:// and mailto://
-protocolPattern = re.compile(r'^\w+://')
+_protocolPattern = re.compile(r'^\w+://')
 
 def isabs(string):
     """ 
@@ -36,7 +36,7 @@
     for addresses beginning in http:// or ftp:// or ldap:// - 
     they are considered "absolute" paths.
     """
-    if protocolPattern.match(string): 
+    if _protocolPattern.match(string): 
         return True
     return os.path.isabs(string)
 
@@ -57,48 +57,49 @@
     return os.path.abspath(retval)
     
 
-def pathsplit(p, rest=None):
+def pathsplit(p_spath, rest=None):
     """ Split path to pieces """
     if rest is None:
         rest = []
-    (h, t) = os.path.split(p)
-    if len(h) < 1: 
-        return [t]+rest
-    if len(t) < 1: 
-        return [h]+rest
-    return pathsplit(h, [t]+rest)
+    (h_folder, t_file) = os.path.split(p_spath)
+    if len(h_folder) < 1: 
+        return [t_file]+rest
+    if len(t_file) < 1: 
+        return [h_folder]+rest
+    return pathsplit(h_folder, [t_file]+rest)
 
-def commonpath(l1, l2, common=None):
+def commonpath(l_1, l_2, common=None):
     """ return the common path"""
     if common is None:
         common = []
-    if len(l1) < 1:
-        return (common, l1, l2)
-    if len(l2) < 1:
-        return (common, l1, l2)
-    if l1[0] != l2[0]:
-        return (common, l1, l2)
-    return commonpath(l1[1:], l2[1:], common+[l1[0]])
+    if len(l_1) < 1:
+        return (common, l_1, l_2)
+    if len(l_2) < 1:
+        return (common, l_1, l_2)
+    if l_1[0] != l_2[0]:
+        return (common, l_1, l_2)
+    return commonpath(l_1[1:], l_2[1:], common+[l_1[0]])
 
 
-def relpath(p1, p2):
-    (common, l1, l2) = commonpath(pathsplit(p1), pathsplit(p2))
-    p = []
-    if len(l1) > 0:
-        p = [ '../' * len(l1) ]
-    p = p + l2
-    if len(p) is 0:
+def relpath(p_1, p_2):
+    """relative path"""
+    (_, l_1, l_2) = commonpath(pathsplit(p_1), pathsplit(p_2))
+    p_path = []
+    if len(l_1) > 0:
+        p_path = [ '../' * len(l_1) ]
+    p_path = p_path + l_2
+    if len(p_path) is 0:
         return "."
-    return os.path.join( *p )
-    
-    
+    return os.path.join( *p_path )
+
+
 def abs2rel(path, base = None):
     """ @return a relative path from base to path.
     
     base can be absolute, or relative to curdir, or defaults
     to curdir.
     """
-    if protocolPattern.match(path):
+    if _protocolPattern.match(path):
         return path
     if base is None:
         base = os.curdir
@@ -116,14 +117,13 @@
     if len(paths) == 1:
         return paths[0]
 
-    def _commonprefix_internal(p1, p2):
-        c = commonpath(pathsplit(p1), pathsplit(p2))[0]
-        if len(c) == 0:
+    def _commonprefix_internal(p_1, p_2):
+        """common prefix internal"""
+        c_path = commonpath(pathsplit(p_1), pathsplit(p_2))[0]
+        if len(c_path) == 0:
             return ''
-        return os.path.join(*c)
+        return os.path.join(*c_path)
     common = _commonprefix_internal(paths[0], paths[1])
-    for p in paths[2:]:
-        common = _commonprefix_internal(common, p)
+    for p_path in paths[2:]:
+        common = _commonprefix_internal(common, p_path)
     return common
-
-    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/pkg2iby.py	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,87 @@
+#============================================================================ 
+#Name        : pkg2iby.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 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:
+#===============================================================================
+import sys
+import ats3
+import os
+
+def main():
+    if len(sys.argv) < 3:
+        print 'Usage: ' + sys.argv[0] + ' builddrive tef pkg1 pkg2 ..'
+        sys.exit(1)
+    generateromcontent(sys.argv[1], sys.argv[2], sys.argv[3:])
+
+def generateromcontent(drive, testtype, pkgs):
+    ibyfilename = os.path.join(drive + os.sep, 'epoc32', 'rom', 'include', 'atsauto.iby')
+    execfilename = os.path.join(drive + os.sep, 'epoc32', 'data', 'atsautoexec.bat')
+    rtestexecfilename = os.path.join(drive + os.sep, 'epoc32', 'data', 'atsrtestexec.bat')
+    dummyexecfilename = os.path.join(drive + os.sep, 'epoc32', 'data', 'dummy.bat')
+    pkgfilesnames = []
+    for p in pkgs:
+        pkgfilesnames.append(os.path.join(drive + os.sep, p))
+    pkg_parser = ats3.parsers.PkgFileParser(None, drive=drive)
+    pkgfiles = pkg_parser.read_pkg_file(pkgfilesnames)
+    
+    writeautoexec = False
+    
+    myiby = open(ibyfilename, 'w')
+    atsautoexec = open(execfilename, 'w')
+    atsrtestexec = open(rtestexecfilename, 'w')
+    dummyexec = open(dummyexecfilename, 'w')
+    dummyexec.close()
+    
+    myiby.write("#ifndef __ATSAUTO_IBY__\n")
+    myiby.write("#define __ATSAUTO_IBY__\n")
+    
+    atsautoexec.write(r'md c:\logs' + '\n')
+    atsautoexec.write(r'md c:\logs\testresults' + '\n')
+    atsautoexec.write(r'md c:\logs\testexecute' + '\n')
+    
+    for src, dst, filetype, _ in pkgfiles:
+        (_, dst) = os.path.splitdrive(dst)
+        dst_nodrive = 'atsdata' + dst
+        dst = r'z:\atsdata' + dst
+        myiby.write('data=' + src + ' ' + dst_nodrive + '\n')
+        if 'testscript' in filetype and testtype == 'tef':
+            atsautoexec.write('testexecute.exe ' + dst + '\n')
+            atsautoexec.write('thindump -nop c:\\logs\\testexecute\\' + os.path.basename(dst.replace('.script', '.htm')) + '\n')
+            writeautoexec = True
+        if 'testscript' in filetype and testtype == 'mtf':
+            atsautoexec.write('testframework.exe ' + dst + '\n')            
+            atsautoexec.write('thindump -nop c:\\logs\\testresults\\' + os.path.basename(dst.replace('.script', '.htm')) + '\n')
+            writeautoexec = True
+        if '.exe' in dst and testtype == 'rtest':
+            atsrtestexec.write(dst + '\n')
+            writeautoexec = True
+    if writeautoexec:
+        myiby.write("#include <thindump.iby>\n")
+        myiby.write(r'data=' + execfilename + ' autoexec.bat' + '\n')
+        if testtype == 'rtest':
+            atsautoexec.write(r'runtests \sys\bin\atsrtestexec.bat' + '\n')
+            myiby.write(r'data=' + rtestexecfilename + r' \sys\bin\atsrtestexec.bat' + '\n')
+            
+        
+        myiby.write(r'data=' + dummyexecfilename + r' z:\dummytest.txt' + '\n')
+        atsautoexec.write(r'RUNTESTS z:\dummytest.txt -p')
+    myiby.write("#endif\n")
+    myiby.close()
+    atsautoexec.close()
+    atsrtestexec.close()
+    
+if __name__ == "__main__":
+    main()
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/preparation.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/preparation.py	Wed Jun 16 16:51:40 2010 +0300
@@ -28,6 +28,8 @@
 import ccm
 import ccm.extra
 import fileutils
+from xml.dom.minidom import getDOMImplementation
+
 
 # Uncomment this line to enable logging in this module, or configure logging elsewhere
 logging.basicConfig(level=logging.INFO)
@@ -80,10 +82,15 @@
             It should implement the action to achieve.
         """
         pass
-        
+    
+    def extract_release_data(self):
+        """ This method is used to retrieve current project
+            environment data. (e.g. project name) 
+        """
+        return None
 
     def get_session(self):
-        """ Helper that retreive the session from the builder. Setting threads correctly. """
+        """ Helper that retrieve the session from the builder. Setting threads correctly. """
         if self._config.has_key('database'):
             return self._builder.session(self._config['database'], self.get_threads())
         if not self._config.has_key('host'):
@@ -240,13 +247,34 @@
             co_role = ccm.get_role_for_purpose(session, str(self._config['purpose']))
             session.role = co_role
             try:
-                delResult = result.delete(recurse=True)
+                delResult = result.delete(scope='project_and_subproject_hierarchy')
             finally:
                 session.role = role
             ccm.log_result(delResult, ccm.CHECKOUT_LOG_RULES, _logger)
-            
 
+    def extract_release_data(self):
+        """ Extracting data for a checked out project. """
+        data = None
+        session = self.get_session()
+        project = session.create(self._config.name)
         
+        session.home = self._config['dir']
+        
+        result = self.__find_project(project)
+        if (result != None) and (self._config.get_boolean('releasable', False)):
+            if  'baseline.release' in self._config:
+                data = {}
+                _logger.info("Releasing: '%s'" % result)
+                data['name'] = result.objectname
+                data['database'] = session.database()
+                data['role'] = ccm.get_role_for_purpose(session, str(self._config['purpose']))
+                data['dir'] = os.path.normpath(self._config['dir'])
+                data['pst'] = result.name
+                data['release'] = self._config['baseline.release']
+            else:
+                _logger.warning("Could not release " + result.objectname + " because the 'baseline.release' property is missing.")
+        return data
+    
     def execute(self):
         """ Creates a checkout of the project, or updates an existing checkout if one is found.
         
@@ -602,6 +630,28 @@
         
         session.role = role
 
+    def extract_release_data(self):
+        """ Extracting data for an updated project. """
+        data = None
+        session = self.get_session()
+        project = session.create(self._config.name)
+        
+        session.home = self._config['dir']
+        
+        if self._config.get_boolean('releasable', False):
+            if 'baseline.release' in self._config:
+                data = {}
+                _logger.info("Releasing: '%s'" % project)
+                data['name'] = project.objectname
+                data['database'] = session.database()
+                data['role'] = ccm.get_role_for_purpose(session, str(self._config['purpose']))
+                data['dir'] = os.path.normpath(self._config['dir'])
+                data['pst'] = project.name
+                data['release'] = self._config['baseline.release']
+            else:
+                _logger.warning("Could not release " + project + " because the 'baseline.release' property is missing.")
+        return data
+
 class PreparationBuilder(object):
     """ Creates an updated work area from a configuration. """
     def __init__(self, configs, username = None, password = None, cache=None):
@@ -635,6 +685,26 @@
         for action in self._actions:
             action.execute()
 
+    def extract_release_data(self, filename):
+        """ Extract project information into an xml file. """
+
+        impl = getDOMImplementation()
+
+        doc = impl.createDocument(None, "release", None)
+        top_element = doc.documentElement
+        
+        for action in self._actions:
+            data = action.extract_release_data()
+            if data:
+                project_node = doc.createElement('project')
+                for attr in data:
+                    project_node.setAttribute(attr, data[attr])
+                top_element.appendChild(project_node)
+        
+        f_file = open(filename, 'w+')
+        f_file.write(doc.toprettyxml(indent="  "))
+        f_file.close()
+        
     def session(self, database, size=1, engine=None, dbpath=None):
         """ Handles pool rather that sessions. """
         assert size > 0, "The pool must contains at least one session!"
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -17,3 +17,4 @@
 #Description:
 #===============================================================================
 
+"""python core library python core python tests initialisation file"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_archive.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_archive.py	Wed Jun 16 16:51:40 2010 +0300
@@ -35,7 +35,7 @@
 _logger = logging.getLogger('test.archive')
     
     
-root_test_dir = test_fileutils.root_test_dir
+_root_test_dir = test_fileutils._root_test_dir
 
 def setup_module():
     """ Creates some test data files for file-related testing. """
@@ -55,7 +55,7 @@
         builder = configuration.NestedConfigurationBuilder(os.environ['TEST_DATA'] + '/data/archive_test_input.cfg.xml')
         archiveConfigSet = builder.getConfiguration()
         archivePreBuilder = archive.ArchivePreBuilder(archiveConfigSet, "config", index=0)
-        buildFilePath = os.path.join(root_test_dir, r'archive_test.ant.xml')
+        buildFilePath = os.path.join(_root_test_dir, r'archive_test.ant.xml')
         archivePreBuilder.write(buildFilePath)
         build_file = open(buildFilePath)
         build_file_content = build_file.read()
@@ -80,9 +80,9 @@
 
     def test_manifest_files(self):
         """ A LogicalArchive can create a correct manifest. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 'manifest_test',
                   'include': 'dir1/*.txt',
                   'archive.tool': '7za'
@@ -94,10 +94,10 @@
 
         expectedPaths = [os.path.normpath('dir1/file1.txt')]
 
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
 
-        with open(includeFilePath) as f:
-            content = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
         print content
         print expectedPaths
         content = [s.strip().lower() for s in content]
@@ -105,9 +105,9 @@
     
     def test_empty_manifest_file(self):
         """ A LogicalArchive can handle empty manifest. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 'manifest_test',
                   'include': 'nothing',
                   'archive.tool': '7za'
@@ -119,27 +119,27 @@
 
         expectedPaths = []
 
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
 
-        with open(includeFilePath) as f:
-            content = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
         print content
         print expectedPaths
-        content = [s.strip().lower() for s in content]
+        content = [s_1.strip().lower() for s_1 in content]
         self.assert_(content == expectedPaths)
 
     def test_manifest_files_with_exclude_list(self):
         """ A LogicalArchive can create a correct manifest. """
-        excludelst = os.path.join(root_test_dir, 'exclude.lst')
+        excludelst = os.path.join(_root_test_dir, 'exclude.lst')
         flh = open(excludelst, 'w+')
         flh.write("/epoc32/tools/variant/variant.cfg\n")
         flh.write("\\epoc32\\tools\\abld.pl\n")
-        flh.write(os.path.join(root_test_dir, 'dir1', 'file1.txt') + "\n")
-        flh.write(os.path.join(root_test_dir, 'dir1/subdir1/subdir1_file.txt') + "\n")
+        flh.write(os.path.join(_root_test_dir, 'dir1', 'file1.txt') + "\n")
+        flh.write(os.path.join(_root_test_dir, 'dir1/subdir1/subdir1_file.txt') + "\n")
         flh.close()
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 'manifest_test',
                   'include': 'dir1/**',
                   'exclude.lst': excludelst,
@@ -157,29 +157,29 @@
                          ]
         expectedPaths.sort()
         
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
 
-        with open(includeFilePath) as f:
-            content = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
         print content
         print expectedPaths
-        content = [s.strip().lower() for s in content]
+        content = [s_1.strip().lower() for s_1 in content]
         content.sort()
         self.assert_(content == expectedPaths)
 
-    def test_manifest_files_with_exclude_list_abs_nodrive(self):
+    def test_manifestfiles_wth_xcld_lst_abs_ndrv(self):
         """ A LogicalArchive can create a correct manifest with external list and drive. """
-        rtd = os.path.splitdrive(os.path.abspath(root_test_dir))[1]
-        excludelst = os.path.join(root_test_dir, 'exclude.lst')
+        rtd = os.path.splitdrive(os.path.abspath(_root_test_dir))[1]
+        excludelst = os.path.join(_root_test_dir, 'exclude.lst')
         flh = open(excludelst, 'w+')
         flh.write("/epoc32/tools/variant/variant.cfg\n")
         flh.write("\\epoc32\\tools\\abld.pl\n")
         flh.write(os.path.join(rtd, 'dir1', 'file1.txt') + "\n")
         flh.write(os.path.join(rtd, 'dir1/subdir1/subdir1_file.txt') + "\n")
         flh.close()
-        configDict = {'root.dir': os.path.abspath(root_test_dir),
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': os.path.abspath(_root_test_dir),
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 'manifest_test',
                   'include': 'dir1/**',
                   'exclude.lst': excludelst,
@@ -197,14 +197,14 @@
                          ]
         expectedPaths.sort()
         
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
 
-        with open(includeFilePath) as f:
-            content = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
         if os.sep == '\\':
-            content = [s.strip().lower() for s in content]
+            content = [s_1.strip().lower() for s_1 in content]
         else:
-            content = [s.strip() for s in content]
+            content = [s_1.strip() for s_1 in content]
         content.sort()
         print content
         print expectedPaths
@@ -243,9 +243,9 @@
         
     def do_distribution_policy_config(self, expected_paths, policy):
         """ . """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 's60_policy_test',
                   'include': 's60/',
                   'distribution.policy.s60': policy,
@@ -256,10 +256,10 @@
 
         builder = archive.ArchivePreBuilder(configuration.ConfigurationSet([config]), "config", index=0)
         builder.build_manifest(config)
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/s60_policy_test_includefile.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_test_includefile.txt')
         
-        with open(includeFilePath) as f:
-            content = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
         if os.sep == '\\':
             content = [s.strip().lower() for s in content]
         else:
@@ -277,9 +277,9 @@
         
     def test_split_manifest_file_unicode(self):
         """ A LogicalArchive can split a manifest correctly. """
-        configDict = {'root.dir': os.path.abspath(root_test_dir),
-                  'temp.build.dir': os.path.abspath(os.path.join(root_test_dir, 'temp_build_files')),
-                  'archives.dir': os.path.abspath(root_test_dir),
+        configDict = {'root.dir': os.path.abspath(_root_test_dir),
+                  'temp.build.dir': os.path.abspath(os.path.join(_root_test_dir, 'temp_build_files')),
+                  'archives.dir': os.path.abspath(_root_test_dir),
                   'name': 'manifest_test_unicode',
                   'max.files.per.archive': '1',
                   'include': 'test_unicode/',
@@ -288,22 +288,22 @@
         config = configuration.Configuration(configDict)
 
         builder = archive.ArchivePreBuilder(configuration.ConfigurationSet([config]), "config", index=0)
-        manifest_file_path = builder.build_manifest(config)        
+        manifest_file_path = builder.build_manifest(config)
         builder.manifest_to_commands(config, manifest_file_path)
         
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/manifest_test_unicode_includefile.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/manifest_test_unicode_part01.txt')
-        includeFilePath2 = os.path.join(root_test_dir, 'temp_build_files/manifest_test_unicode_part02.txt')
-        includeFilePath3 = os.path.join(root_test_dir, 'temp_build_files/manifest_test_unicode_part03.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_unicode_includefile.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_unicode_part01.txt')
+        includeFilePath2 = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_unicode_part02.txt')
+        includeFilePath3 = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_unicode_part03.txt')
 
-        with open(includeFilePath) as f:
-            content = f.readlines()
-        with open(includeFilePath1) as f:
-            content1 = f.readlines()
-        with open(includeFilePath2) as f:
-            content2 = f.readlines()
-        with open(includeFilePath3) as f:
-            content3 = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
+        with open(includeFilePath1) as f_file:
+            content1 = f_file.readlines()
+        with open(includeFilePath2) as f_file:
+            content2 = f_file.readlines()
+        with open(includeFilePath3) as f_file:
+            content3 = f_file.readlines()
         print "content: ", content
         print "content1: ", content1
         print "content2: ", content2
@@ -316,9 +316,9 @@
 
     def test_distribution_policy_mapper_config(self):
         """ Testing the policy mapper. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 's60_policy_mapper_test',
                   'include': 's60/',
                   'archive.tool': '7za',
@@ -372,11 +372,11 @@
         if os.sep == '\\':
             for i in range(len(expected_paths9999)):
                 expected_paths9999[i] = expected_paths9999[i].lower()
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_includefile.txt')
-        includeFilePath0 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_0.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_1.txt')
-        includeFilePath9999 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_9999.txt')
-        includeFilePathInternal = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test.internal.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_includefile.txt')
+        includeFilePath0 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_0.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_1.txt')
+        includeFilePath9999 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_9999.txt')
+        includeFilePathInternal = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test.internal.txt')
         
         content = self.__read_manifest(includeFilePath)
         expected_paths.sort()
@@ -408,12 +408,14 @@
         print "Commands : ", cmds
         assert len(cmds) == 3
 
+# pylint: disable-msg=C0103
 
     def test_distribution_policy_mapper_config_no_zip2zip(self):
         """ Testing the policy mapper. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 's60_policy_mapper_test_noz2z',
                   'include': 's60/',
                   'archive.tool': '7za',
@@ -431,7 +433,7 @@
                            's60' + os.sep + 'component_private' + os.sep + 'Distribution.Policy.S60',
                            's60' + os.sep + 'component_public' + os.sep + 'component_public_file.txt',
                            's60' + os.sep + 'component_public' + os.sep + 'Distribution.Policy.S60',
-                           's60' + os.sep + 'Distribution.Policy.S60',                           
+                           's60' + os.sep + 'Distribution.Policy.S60',
                            's60' + os.sep + 'missing' + os.sep + 'subdir' + os.sep + 'another_subdir' + os.sep + 'to_be_removed_9999.txt',
                            's60' + os.sep + 'missing' + os.sep + 'subdir' + os.sep + 'Distribution.Policy.S60',
                            's60' + os.sep + 'missing' + os.sep + 'subdir' + os.sep + 'not_to_be_removed_0.txt',
@@ -468,11 +470,11 @@
                 expected_paths9999[i] = expected_paths9999[i].lower()
 
         expected_paths.sort()
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_includefile.txt')
-        includeFilePath0 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_0.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_1.txt')
-        includeFilePath9999 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_9999.txt')
-        includeFilePathInternal = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_noz2z.internal.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_includefile.txt')
+        includeFilePath0 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_0.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_1.txt')
+        includeFilePath9999 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_9999.txt')
+        includeFilePathInternal = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_noz2z.internal.txt')
         
         content = self.__read_manifest(includeFilePath)
         expected_paths.sort()
@@ -501,16 +503,17 @@
         assert os.path.exists(includeFilePathInternal) == False
         print "Commands : ", cmds
         assert len(cmds) == 1
+# pylint: enable-msg=C0103
 
 
-    def test_distribution_policy_mapper_remover_config(self):
+    def test_dist_policy_mapper_remover_config(self):
         """ Testing the policy remover mapper. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 's60_policy_mapper_test',
                   'include': 's60/',
-                  'policy.root.dir': os.path.join(root_test_dir, 's60'),
+                  'policy.root.dir': os.path.join(_root_test_dir, 's60'),
                   'archive.tool': '7za',
                   'mapper': 'policy.remover',
                   'policy.zip2zip': 'true',
@@ -556,9 +559,9 @@
             for i in range(len(expected_paths1)):
                 expected_paths1[i] = expected_paths1[i].lower()
         expected_paths1.sort()
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_includefile.txt')
-        includeFilePath0 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_0.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/s60_policy_mapper_test_1.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_includefile.txt')
+        includeFilePath0 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_0.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/s60_policy_mapper_test_1.txt')
         
         content = self.__read_manifest(includeFilePath)
         expected_paths.sort()
@@ -582,14 +585,14 @@
         assert len(cmds[3]) == 7
 
 
-    def test_distribution_policy_mapper_sf_remover_config(self):
+    def test_dist_policy_mapper_sf_remvr_config(self):
         """ Testing the policy SFL remover mapper. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 'sf_policy_sf_mapper_test',
                   'include': 'sf/',
-                  'policy.root.dir': os.path.join(root_test_dir, 'sf'),
+                  'policy.root.dir': os.path.join(_root_test_dir, 'sf'),
                   'archive.tool': '7za',
                   'mapper': 'sfl.policy.remover',
                   'policy.zip2zip': 'false',
@@ -656,12 +659,12 @@
             for i in range(len(expected_paths9)):
                 expected_paths9[i] = expected_paths9[i].lower()
  
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_includefile.txt')
-        includeFilePath0 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_0.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_1.txt')
-        includeFilePath3 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_3.txt')
-        includeFilePath7 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_7.txt')
-        includeFilePath9 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_9999.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_includefile.txt')
+        includeFilePath0 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_0.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_1.txt')
+        includeFilePath3 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_3.txt')
+        includeFilePath7 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_7.txt')
+        includeFilePath9 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_sf_mapper_test_9999.txt')
         
         
         content = self.__read_manifest(includeFilePath)
@@ -708,14 +711,14 @@
             print cmd
         assert len(cmds[1]) == len(expected_paths)-len(expected_paths3), "Remore must be equal to len(expected_paths) - len(expected_paths3)"
 
-    def test_distribution_policy_mapper_epl_remover_config(self):
+    def test_dist_policy_mapper_epl_remvr_config(self):
         """ Testing the policy EPL remover mapper. """
-        configDict = {'root.dir': root_test_dir,
-                  'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                  'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                  'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                  'archives.dir': _root_test_dir,
                   'name': 'sf_policy_epl_mapper_test',
                   'include': 'sf/',
-                  'policy.root.dir': os.path.join(root_test_dir, 'sf'),
+                  'policy.root.dir': os.path.join(_root_test_dir, 'sf'),
                   'archive.tool': '7za',
                   'mapper': 'epl.policy.remover',
                   'policy.zip2zip': 'false',
@@ -782,12 +785,12 @@
             for i in range(len(expected_paths9)):
                 expected_paths9[i] = expected_paths9[i].lower()
 
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_includefile.txt')
-        includeFilePath0 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_0.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_1.txt')
-        includeFilePath3 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_3.txt')
-        includeFilePath7 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_7.txt')
-        includeFilePath9 = os.path.join(root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_9999.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_includefile.txt')
+        includeFilePath0 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_0.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_1.txt')
+        includeFilePath3 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_3.txt')
+        includeFilePath7 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_7.txt')
+        includeFilePath9 = os.path.join(_root_test_dir, 'temp_build_files/sf_policy_epl_mapper_test_9999.txt')
         
         
         content = self.__read_manifest(includeFilePath)
@@ -836,8 +839,8 @@
 
     def __read_manifest(self, manifest):
         """ read the file and sort"""
-        with open(manifest) as f:
-            content = f.readlines()
+        with open(manifest) as f_file:
+            content = f_file.readlines()
         if os.sep == '\\':
             content = [s.strip().lower() for s in content]
         else:
@@ -848,9 +851,9 @@
 
     def test_split_manifest_file(self):
         """ A LogicalArchive can split a manifest correctly. """
-        configDict = {'root.dir': os.path.abspath(root_test_dir),
-                  'temp.build.dir': os.path.abspath(os.path.join(root_test_dir, 'temp_build_files')),
-                  'archives.dir': os.path.abspath(root_test_dir),
+        configDict = {'root.dir': os.path.abspath(_root_test_dir),
+                  'temp.build.dir': os.path.abspath(os.path.join(_root_test_dir, 'temp_build_files')),
+                  'archives.dir': os.path.abspath(_root_test_dir),
                   'name': 'manifest_test',
                   'max.files.per.archive': '1',
                   'include': 'dir/',
@@ -867,16 +870,16 @@
         expectedPaths1 = ['dir' + os.sep + 'emptysubdir1\n']
         expectedPaths2 = ['dir' + os.sep + 'emptysubdir2\n']
         
-        includeFilePath = os.path.join(root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
-        includeFilePath1 = os.path.join(root_test_dir, 'temp_build_files/manifest_test_part01.txt')
-        includeFilePath2 = os.path.join(root_test_dir, 'temp_build_files/manifest_test_part02.txt')
+        includeFilePath = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_includefile.txt')
+        includeFilePath1 = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_part01.txt')
+        includeFilePath2 = os.path.join(_root_test_dir, 'temp_build_files/manifest_test_part02.txt')
 
-        with open(includeFilePath) as f:
-            content = f.readlines()
-        with open(includeFilePath1) as f:
-            content1 = f.readlines()
-        with open(includeFilePath2) as f:
-            content2 = f.readlines()
+        with open(includeFilePath) as f_file:
+            content = f_file.readlines()
+        with open(includeFilePath1) as f_file:
+            content1 = f_file.readlines()
+        with open(includeFilePath2) as f_file:
+            content2 = f_file.readlines()
         print "content: ", content
         print "content1: ", content1
         print "content2: ", content2
@@ -892,16 +895,16 @@
     """test root drive value"""
     def test_checkRootDirValue(self):
         """ Testing the root drive value. """
-        configDict = {'root.dir': root_test_dir,
-                'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                'archives.dir': root_test_dir,
+        configDict = {'root.dir': _root_test_dir,
+                'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                'archives.dir': _root_test_dir,
                 'name': 'regular_path_test',
                 'include': 'dir1/*.txt',
                 'archive.tool': '7za'
                }
         configDictUnc = {'root.dir': "\\\\server\\share\\dir",
-                'temp.build.dir': os.path.join(root_test_dir, 'temp_build_files'),
-                'archives.dir': root_test_dir,
+                'temp.build.dir': os.path.join(_root_test_dir, 'temp_build_files'),
+                'archives.dir': _root_test_dir,
                 'name': 'unc_test',
                 'include': 'dir1/*.txt',
                 'archive.tool': '7za'
@@ -920,8 +923,8 @@
                                                '\\\\server2\\share\\somedir'])
             self.assert_(len(roots) == 3)
             self.assert_('\\\\server\\share\\' in roots)
-            self.assert_('\\\\server\\share1\\' in roots)
-            self.assert_('\\\\server2\\share\\' in roots)
+            self.assert_('\\\\server\\share1\\dir\\' in roots)
+            self.assert_('\\\\server2\\share\\somedir\\' in roots)
 
 class MockedConfigBuilder:
     """."""
@@ -942,28 +945,29 @@
     def unSubStituteDrives(self, drive):
         """ unsubstitute the drive"""
         pass
-    
+
     def rewriteXMLFile(self, xml_file, parse_xml_file):
         """re-write XML file"""
         doc = xml.dom.minidom.parse(xml_file)
         out = open(parse_xml_file, 'w')
         doc.writexml(out, indent='')
         out.close()
-            
-  
+
+
 class ZipArchiverTest(unittest.TestCase):
     """ Unit test case for seven zip archiver """
     def test_extension(self):
-        t = archive.tools.SevenZipArchiver()
-        self.assert_(t.extension() == ".zip")
+        """test extension"""
+        t_tools = archive.tools.SevenZipArchiver()
+        self.assert_(t_tools.extension() == ".zip")
     
 class SevenZipFormatArchiverTest(unittest.TestCase):
     """ Testing 7z archiver class """
     def test_archive(self):
         """ Testing whether the ant file for running 7z is created """
-        configDict = {'root.dir': os.path.abspath(root_test_dir),
-                  'temp.build.dir': os.path.abspath(os.path.join(root_test_dir, 'temp_build_files')),
-                  'archives.dir': os.path.abspath(root_test_dir),
+        configDict = {'root.dir': os.path.abspath(_root_test_dir),
+                  'temp.build.dir': os.path.abspath(os.path.join(_root_test_dir, 'temp_build_files')),
+                  'archives.dir': os.path.abspath(_root_test_dir),
                   'name': 'manifest_test',
                   'max.files.per.archive': '1',
                   'include': 'dir/',
@@ -974,7 +978,7 @@
         builder = archive.ArchivePreBuilder(configuration.ConfigurationSet([config]), "config", index=0)
         manifest_file_path = builder.build_manifest(config)
         builder.manifest_to_commands(config, manifest_file_path)
-        tmpfilename = os.path.join(os.path.abspath(root_test_dir),'test_archive_7z.xml')
+        tmpfilename = os.path.join(os.path.abspath(_root_test_dir),'test_archive_7z.xml')
         builder.write(tmpfilename)
         tmpfileh = open(tmpfilename,'r')
         content = tmpfileh.read()    
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats3.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats3.py	Wed Jun 16 16:51:40 2010 +0300
@@ -722,7 +722,7 @@
 
     def test_harness(self):
         """ Detect test harness."""
-        mmp_parser = parser.MmpFileParser()
+        mmp_parser = parser.MmpFileParser(None)
         group = TSRC.joinpath("group")
         for harness, mmp in [
             ("STIF", group / "stif.mmp"),
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_ats4.py	Wed Jun 16 16:51:40 2010 +0300
@@ -695,7 +695,7 @@
 
     def test_harness(self):
         """ Detect test harness."""
-        mmp_parser = parser.MmpFileParser()
+        mmp_parser = parser.MmpFileParser(None)
         group = TSRC.joinpath("group")
         for harness, mmp in [
             ("STIF", group / "stif.mmp"),
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atsant.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atsant.py	Wed Jun 16 16:51:40 2010 +0300
@@ -27,17 +27,23 @@
 
 import atsant
 
-def test_atsant():
+def test_atsant_multipledrop():
     """test atsant and check 3 files in the file"""
-    files = atsant.files_to_test(os.path.join(os.environ['TEST_DATA'], 'data/packageiad/layers.sysdef.xml'), None, None, 'z:')
+    files = atsant.files_to_test(os.path.join(os.environ['TEST_DATA'], 'data/packageiad/layers.sysdef.xml'), None, None, 'z:', 'false')
     assert len(files) == 3
-    
+
+def test_atsant_singledrop():
+    """test atsant and check 1 files in the file"""
+    files = atsant.files_to_test(os.path.join(os.environ['TEST_DATA'], 'data/packageiad/layers.sysdef.xml'), None, None, 'z:', 'true')
+    assert len(files) == 1
+
 def test_IConfigATS():
+    """test I config ATS"""
     tmpdir = tempfile.mkdtemp()
     shutil.copy(os.path.join(os.environ['TEST_DATA'], 'data', 'example_corernd.iconfig.xml'), os.path.join(tmpdir, 'example_corernd.iconfig.xml'))
     open(os.path.join(tmpdir, 'RX-60_00_rnd.core.fpsx'), 'w').close()
     open(os.path.join(tmpdir, 'RX-60_00.01_rnd.rofs2.fpsx'), 'w').close()
     open(os.path.join(tmpdir, 'RX-60_00_rnd.rofs3.fpsx'), 'w').close()
     open(os.path.join(tmpdir, 'RX-60_00_rnd.udaerase.fpsx'), 'w').close()
-    ic = atsant.IConfigATS(tmpdir)
-    ic.findimages()
\ No newline at end of file
+    i_c = atsant.IConfigATS(tmpdir, '')
+    i_c.findimages()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_atscustom.py	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,37 @@
+#============================================================================ 
+#Name        : test_atsant.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 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:
+#===============================================================================
+
+""" ats3 custom.py module tests. """
+
+import tempfile
+import os
+
+class Bunch(object):
+    """ Configuration object. Argument from constructor are converted into class attributes. """
+    def __init__(self, **kwargs):
+        self.__dict__.update(kwargs)
+
+def test_atscustom():
+    import ats3
+    import ats3.custom
+    output = os.path.join(tempfile.mkdtemp(), 'ATS3Drop.zip')
+    opts = Bunch(file_store='', flash_images='', diamonds_build_url='', testrun_name='', device_type='', report_email='', test_timeout='', drop_file=output, config_file='')
+    config = ats3.Configuration(opts, [])
+    ats3.custom.create_drop(config)
+    assert os.path.exists(output)
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_buildmodel.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_buildmodel.py	Wed Jun 16 16:51:40 2010 +0300
@@ -30,7 +30,7 @@
 
 _logger = logging.getLogger('test.bom')
 
-database = "to1tobet"
+_database = "to1tobet"
 
 class BOMMockFolder:    
     """ This class provides a mock folder """
@@ -50,10 +50,12 @@
     
     @property
     def tasks(self):
+        """tasks"""
         return []
     
     @property
     def folders(self):
+        """folders"""
         return [BOMMockFolder('5856', 'tr1s60', "all completed tasks for release ABS_domain/abs.mcl for collaborative projects", [])] 
     
 class BOMMock:
@@ -63,10 +65,12 @@
         self.config['build.id'] = "mock"
     
     @property
-    def projects(self):    
+    def projects(self):
+        """projects"""
         return [BOMMockProject('ABS_domain-abs.mcl_200843:project:tr1s60#1')] 
 
     def all_baselines(self):
+        """all baselines"""
         return []
 
 # Refactor required: See http://delivery.nmp.nokia.com/trac/helium/ticket/1517
@@ -78,7 +82,7 @@
 #    def test_bom_output(self):
 #        """ Test basic BOM execution. Only new spec format will be covered!"""
 #        try:
-#            session = ccm.open_session(database=database)
+#            session = ccm.open_session(_database=_database)
 #        except ccm.CCMException:
 #            print "Skipping BOMTest test cases."
 #            return
@@ -134,6 +138,7 @@
         self.assertEqual(None, delta_bom_content_validity) 
 
     def test_BOMXMLWriter(self):
+        """test BOM XML writer"""
         config_data = {'delivery': os.environ['TEST_DATA'] + '/data/test_delivery.xml', 'prep.xml': os.environ['TEST_DATA'] + '/data/test_prep.xml', 'build.id': 'buildid', 'symbian_rel_week': r'${symbian.version.week}', 'symbian_rel_ver': r'${symbian.version}', 'symbian_rel_year': r'${symbian.version.year}', 's60_version': r'${s60.version}', 's60_release': r'${s60.release}', 'currentRelease.xml': os.environ['TEST_DATA'] + "tests/data/symrec/generated_release_metadata.xml"}
         bom = build.model.BOM(configuration.Configuration(config_data))
         xml_writer = build.model.BOMXMLWriter(bom)
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_comments.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_comments.py	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
     """ Test cases for Comments.py. """
     
     def setUp(self):
-        # Initialize the sample files into two Comment Parsers.
+        """ Initialize the sample files into two Comment Parsers."""
         self.parser1 = comments.CommentParser( [os.environ['TEST_DATA'] + '/data/comments_test.txt'], 'branchInfo' )
         self.parser2 = comments.CommentParser( [os.environ['TEST_DATA'] + '/data/comments_test.cpp', os.environ['TEST_DATA'] + '/data/comments_test.bat',
                                                 os.environ['TEST_DATA'] + '/data/comments_test.h', os.environ['TEST_DATA'] + '/data/comments_test.hrh',
@@ -40,9 +40,8 @@
      
         
 
-    """ Unit test for method scan() in comments.py. It also tested scan_content by using scan()
-    """
     def test_scan(self):
+        """ Unit test for method scan() in comments.py. It also tested scan_content by using scan()"""
         #doc1 for only one txt file. 
         doc1 = amara.parse(self.parser1.scan().xml())
         #doc2 for all other 14 types of files. It also included two types of cmd files.
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_configuration_model.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_configuration_model.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" test configuration model"""
 
 import logging
 import os
@@ -26,7 +27,7 @@
 import configuration_model
 
 
-logger = logging.getLogger('test.configuration_model')
+_logger = logging.getLogger('test.configuration_model')
 #logging.basicConfig(level=logging.DEBUG)
 
 class GroupDefTest(unittest.TestCase):
@@ -58,7 +59,7 @@
         assert len(items) == 2
         assert isinstance(items[0], configuration_model.MissingFromDataModelItem)
     
-    def test_required_property_in_group_not_defined(self):
+    def test_rqrd_property_in_group_not_defined(self):
         """ Required property in a group missing from config is identified. """
         config = configuration.Configuration({'test.property.1': '1', 'test.property.3': '3'})
         items = self.model.validate_config(config)
@@ -73,7 +74,7 @@
         """ Basic validation item usage. """
         item = configuration_model.MissingFromDataModelItem('test.property')
         self.assert_(str(item) == 'Property not in data model: test.property')
-        item.log(logger)
+        item.log(_logger)
         
         
 class DataModelTest(unittest.TestCase):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_documentation.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_documentation.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" test documentation """
 
 import tempfile
 import os
@@ -30,6 +31,7 @@
 class DocumentationTest(unittest.TestCase):
     """ Unit tests for documentation module """
     def test_APIDeltaWriter(self):
+        """test API Delta writer"""
         (fileDes, tempFileName) = tempfile.mkstemp()
         old_db = os.path.join(os.environ['TEST_DATA'], 'data', 'docs', 'sample_old_db.xml') 
         new_db = os.path.join(os.environ['TEST_DATA'], 'data', 'docs', 'sample_new_db.xml') 
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_fileutils.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_fileutils.py	Wed Jun 16 16:51:40 2010 +0300
@@ -151,12 +151,12 @@
     'sf/component_private/Distribution.Policy.S60': '1',
     }
     
-""" Used by test_archive. """
-root_test_dir = "build/_test_" + str(time.strftime("%H.%M.%S"))
-    
+# Used by test_archive.
+_root_test_dir = "build/_test_" + str(time.strftime("%H.%M.%S"))
+
 def _testpath(subpath):
     """ Normalised path for test paths. """
-    return os.path.normpath(os.path.join(root_test_dir, subpath))
+    return os.path.normpath(os.path.join(_root_test_dir, subpath))
     
 def setup_module():
     """ Setup files test config. 
@@ -167,7 +167,7 @@
     #print 'setup_module()'
     #print _test_file_content.keys()
     for child_path in _test_file_paths:
-        path = os.path.join(root_test_dir, child_path)
+        path = os.path.join(_root_test_dir, child_path)
         path_dir = path
         path_dir = os.path.dirname(path)
         
@@ -185,8 +185,8 @@
 
 def teardown_module():
     """ Teardown test config. """
-    if os.path.exists(root_test_dir):
-        fileutils.rmtree(root_test_dir)
+    if os.path.exists(_root_test_dir):
+        fileutils.rmtree(_root_test_dir)
     
 
 class FileScannerTest(unittest.TestCase):
@@ -342,7 +342,7 @@
         testpaths = [_testpath('dir1/file1.txt'),
                      _testpath('dir1/file2.doc'),
                      _testpath('dir1/file3_no_extension'),
-                     _testpath('dir1/subdir3')]                   
+                     _testpath('dir1/subdir3')]
         result.sort()
         testpaths.sort()
         
@@ -359,7 +359,7 @@
         result = []
         testpaths = [_testpath('dir1/file3_no_extension'),
                      _testpath('dir1/subdir2/subdir2_file_no_extension'),
-                     _testpath('dir1/subdir3')]                   
+                     _testpath('dir1/subdir3')]
         [result.append(path) for path in scanner.scan()]
         result.sort()
         testpaths.sort()
@@ -377,7 +377,7 @@
                      _testpath('s60/UPPERCASE_MISSING/subdir/Distribution.Policy.S60'),
                      _testpath('s60/UPPERCASE_MISSING/subdir/not_to_be_removed_0.txt'),
                      _testpath('s60/UPPERCASE_MISSING/subdir/another_subdir/to_be_removed_9999.txt')
-                     ]                   
+                     ]
         [result.append(path) for path in scanner.scan()]
         
         testpaths.sort()
@@ -392,7 +392,7 @@
         scanner = fileutils.FileScanner(_testpath(''))
         scanner.add_include('dir/emptysubdir1/')
         result = []
-        testpaths = [_testpath('dir/emptysubdir1')]                   
+        testpaths = [_testpath('dir/emptysubdir1')]
         [result.append(path) for path in scanner.scan()]
         
         result.sort()
@@ -409,7 +409,7 @@
         scanner.add_exclude('emptydirerror/dir/subdir/')
         scanner.add_exclude('emptydirerror/dir/emptysubdir/')
         result = []
-        testpaths = []                   
+        testpaths = []
         [result.append(path) for path in scanner.scan()]
         
         result.sort()
@@ -426,7 +426,7 @@
         scanner.add_exclude('dir/emptysubdir3/')
         result = []
         testpaths = [_testpath('dir/emptysubdir1'),
-                     _testpath('dir/emptysubdir2')]                   
+                     _testpath('dir/emptysubdir2')]
         [result.append(path) for path in scanner.scan()]
         
         print result
@@ -443,7 +443,7 @@
         result = []
         [result.append(path) for path in scanner.scan()]
         testpaths = [_testpath('s60/component_public/component_public_file.txt'),
-                     _testpath('s60/component_public/distribution.policy.s60')]                   
+                     _testpath('s60/component_public/distribution.policy.s60')]
         
         result = [s.lower() for s in result]
         result.sort()
@@ -462,12 +462,13 @@
         
         result = []
         [result.append(path) for path in scanner.scan()]
-        testpaths = []                   
+        testpaths = []
         
         assert result == testpaths
         
         
     def test_symbian_distribution_policy_cat_a(self):
+        """test symbian distribution policy category A"""
         scanner = fileutils.FileScanner(_testpath(''))
         scanner.add_include('s60src/src-a/')
         selector = archive.selectors.SymbianPolicySelector(['distribution.policy'], 'A')
@@ -479,7 +480,8 @@
  
         assert result == testpaths
         
-    def test_symbian_distribution_policy_cat_b(self):        
+    def test_symbian_distribution_policy_cat_b(self):
+        """test symbian distribution policy category B"""
         scanner = fileutils.FileScanner(_testpath(''))
         scanner.add_include('s60src/src-b/')
         selector = archive.selectors.SymbianPolicySelector(['distribution.policy'], 'B')
@@ -489,9 +491,10 @@
         [result.append(path) for path in scanner.scan()]
         testpaths = [_testpath('s60src/src-b/distribution.policy')] 
               
-        assert result == testpaths     
+        assert result == testpaths
         
-    def test_symbian_distribution_policy_cat_not_a_not_b(self):        
+    def test_symbian_dist_policy_cat_not_a_not_b(self):
+        """test symbian distribution policy category not A and not B"""
         scanner = fileutils.FileScanner(_testpath(''))
         scanner.add_include('s60src/src-c/')
         selector = archive.selectors.SymbianPolicySelector(['distribution.policy'], '!A,!B')
@@ -502,7 +505,7 @@
                   
         testpaths = [_testpath('s60src/src-c/distribution.policy')] 
         
-        assert result == testpaths     
+        assert result == testpaths
     
         
     def test_find_subroots(self):
@@ -528,11 +531,12 @@
         scanner.add_include('**/dir')
         scanner.add_include('foo/**/dir')
         result = scanner.find_subroots()
-        _logger.debug(result)              
+        _logger.debug(result)
         assert result == [_testpath('')]
 
 
     def test_load_policy_content(self):
+        """test load policy content"""
         try:
             fileutils.load_policy_content(_testpath('test_policies/1/Distribution.Policy.S60'))
             assert "Should fail while loading 'test_policies/1/Distribution.Policy.S60'."
@@ -545,8 +549,9 @@
             assert "Should not fail while loading 's60/Distribution.Policy.S60'."
 
 
-    def assert_policy_file(self, filename, value=None, exception=False):
-        if exception:
+    def assert_policy_file(self, filename, value=None, excptn=False):
+        """assert policy file"""
+        if excptn:
             try:
                 fileutils.read_policy_content(filename)
                 assert "Should fail while loading '%s'." % filename
@@ -554,8 +559,10 @@
                 pass
         else:
             assert fileutils.read_policy_content(filename) == value
-    def assert_symbian_policy_file(self, filename, value=None, exception=False):
-        if exception:
+
+    def assert_symbian_policy_file(self, filename, value=None, excptn=False):
+        """assert symbian policy file"""
+        if excptn:
             try:
                 fileutils.read_symbian_policy_content(filename)
                 assert "Should fail while loading '%s'." % filename
@@ -569,18 +576,18 @@
 
         self.assert_policy_file(_testpath('s60/Distribution.Policy.S60'), value='0')
         self.assert_policy_file(_testpath('s60/component_private/Distribution.Policy.S60'), value='1')
-        self.assert_policy_file(_testpath('test_policies/1/Distribution.Policy.S60'), exception=True)
-        self.assert_policy_file(_testpath('test_policies/2/Distribution.Policy.S60'), exception=True)
-        self.assert_policy_file(_testpath('test_policies/3/Distribution.Policy.S60'), exception=True)
-        self.assert_policy_file(_testpath('test_policies/4/Distribution.Policy.S60'), exception=True)
-        self.assert_policy_file(_testpath('test_policies/5/Distribution.Policy.S60'), exception=True)
-        self.assert_policy_file(_testpath('test_policies/6/Distribution.Policy.S60'), exception=True)
+        self.assert_policy_file(_testpath('test_policies/1/Distribution.Policy.S60'), excptn=True)
+        self.assert_policy_file(_testpath('test_policies/2/Distribution.Policy.S60'), excptn=True)
+        self.assert_policy_file(_testpath('test_policies/3/Distribution.Policy.S60'), excptn=True)
+        self.assert_policy_file(_testpath('test_policies/4/Distribution.Policy.S60'), excptn=True)
+        self.assert_policy_file(_testpath('test_policies/5/Distribution.Policy.S60'), excptn=True)
+        self.assert_policy_file(_testpath('test_policies/6/Distribution.Policy.S60'), excptn=True)
 
     def test_read_policy_content_strict_focalid(self):
         """ Testing Focal ID support. """
         self.assert_policy_file(_testpath('test_policies/7/Distribution.Policy.S60'), value='08421A2')
-        self.assert_policy_file(_testpath('test_policies/8/Distribution.Policy.S60'), exception=True)
-        self.assert_policy_file(_testpath('test_policies/9/Distribution.Policy.S60'), exception=True)
+        self.assert_policy_file(_testpath('test_policies/8/Distribution.Policy.S60'), excptn=True)
+        self.assert_policy_file(_testpath('test_policies/9/Distribution.Policy.S60'), excptn=True)
 
     def test_read_symbian_policy_content_strict(self):
         """ Test symbian policy content using strict rules. """
@@ -589,15 +596,16 @@
         self.assert_symbian_policy_file(_testpath('symbian/dir1/distribution.policy'), value='B')
         self.assert_symbian_policy_file(_testpath('symbian/dir2/distribution.policy'), value='C')
         self.assert_symbian_policy_file(_testpath('symbian/dir3/distribution.policy'), value='D')
-        self.assert_symbian_policy_file(_testpath('symbian/dir4/distribution.policy'), exception=True)
-        self.assert_symbian_policy_file(_testpath('symbian/dir5/distribution.policy'), exception=True)
+        self.assert_symbian_policy_file(_testpath('symbian/dir4/distribution.policy'), excptn=True)
+        self.assert_symbian_policy_file(_testpath('symbian/dir5/distribution.policy'), excptn=True)
 
 class TestLongPath(unittest.TestCase):
     """ Unit test case for testing long path strings """
-    long_path = os.path.join(root_test_dir, '01234567890123456789012345678901234567890123456789', 
+    long_path = os.path.join(_root_test_dir, '01234567890123456789012345678901234567890123456789', 
                      '01234567890123456789012345678901234567890123456789', '01234567890123456789012345678901234567890123456789',
                      '01234567890123456789012345678901234567890123456789', '01234567890123456789012345678901234567890123456789')
     def setUp(self):
+        """setup automatically called before running the tests"""
         self.mkdirs(os.path.join(self.long_path, r'dir1'))
         self.mkdirs(os.path.join(self.long_path, r'dir2'))
         if not '\\\\?\\' + os.path.abspath((os.path.join( self.long_path, r'foo.txt'))):
@@ -605,6 +613,7 @@
             win32file.CreateFileW('\\\\?\\' + os.path.abspath(os.path.join(self.long_path, r'foo.txt')), 0, 0, None, win32file.CREATE_NEW, 0, None)
 
     def mkdirs(self, path):
+        """create  folders"""
         if not os.path.isabs(path):
             path = os.path.join(os.path.abspath('.'), os.path.normpath(path))
         if not os.path.exists(os.path.dirname(path)):
@@ -612,10 +621,11 @@
         self.mkdir(path)
 
     def mkdir(self, path):
+        """create a folder"""
         if 'java' in sys.platform:
             import java.io
-            f = java.io.File(path)
-            if not f.exists():
+            f_file = java.io.File(path)
+            if not f_file.exists():
                 os.mkdir(path)
         elif not os.path.exists(path):
             if sys.platform == "win32":
@@ -628,15 +638,17 @@
                 os.mkdir(path)
 
     def test_rmtree_long_path(self):
-        fileutils.rmtree(root_test_dir)
+        """test remove tree with a long path name"""
+        fileutils.rmtree(_root_test_dir)
         assert not os.path.exists(self.long_path)
-        assert not os.path.exists(root_test_dir)
+        assert not os.path.exists(_root_test_dir)
 
     def test_rmtree_long_path_unc_format(self):
+        """test remove tree with long path name and UNC format"""
         if sys.platform == "win32":
-            fileutils.rmtree(u"\\\\?\\" + os.path.join(os.path.abspath('.'), root_test_dir))
+            fileutils.rmtree(u"\\\\?\\" + os.path.join(os.path.abspath('.'), _root_test_dir))
             assert not os.path.exists(self.long_path)
-            assert not os.path.exists(root_test_dir)
+            assert not os.path.exists(_root_test_dir)
         
 class DestInSrcTest(unittest.TestCase):
     """ Unit test case to test fileutils.destinsrc """
@@ -667,3 +679,19 @@
             src = r"Z:/a/b/CC"
             dst = r"Z:/a/b/c/d"
             assert fileutils.destinsrc(src, dst) is False
+
+
+class WhichTest(unittest.TestCase):
+    """ Testing the which implementation. """
+
+    def test_existing_file(self):
+        """ Test an existing executable is found (cmd on windows, bash on other os) """
+        if os.sep == '\\':
+            assert fileutils.which("cmd") != None
+        else:
+            assert fileutils.which("bash") != None
+
+    def test_non_existing_file(self):
+        """ Test a non existing executable is not found """
+        assert fileutils.which("foobar_app") == None
+
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_logger.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_logger.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" test logger"""
 
 import logging
 import os
@@ -27,7 +28,7 @@
 
 # Uncomment this line to enable logging in this module, or configure logging elsewhere
 #logging.basicConfig(level=logging.DEBUG)
-logger = logging.getLogger('test.helium.logger')
+_logger = logging.getLogger('test.helium.logger')
 
 
 class TestHeliumLogger(unittest.TestCase):
@@ -52,7 +53,7 @@
         mclogger.CloseMainContent()
         mclogger.WriteToFile('log.xml')
         
-        logger.info(mclogger)
+        _logger.info(mclogger)
         
         os.unlink('log.xml')
         
@@ -71,7 +72,7 @@
         mclogger.CloseMainContent()
         mclogger.WriteToFile('log.xml')
         
-        logger.info(mclogger)
+        _logger.info(mclogger)
         
         os.unlink('log.xml')
 
@@ -86,7 +87,7 @@
         mclogger.CloseMainContent()
         mclogger.WriteToFile('log.xml')
         
-        logger.info(mclogger)
+        _logger.info(mclogger)
         
         out = helium.outputer.XML2XHTML('log.xml')
         out.generate()
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_packageiad.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_packageiad.py	Wed Jun 16 16:51:40 2010 +0300
@@ -25,7 +25,7 @@
 import logging
 
 
-logger = logging.getLogger('test.packageiad')
+_logger = logging.getLogger('test.packageiad')
 logging.basicConfig(level=logging.INFO)
 
 
@@ -40,22 +40,22 @@
 
     
 #def test_package_main(self):
-    """ Test the package IAD class.
-    
-    iad = __import__('packageiad')
-    sysdef = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad', 'layers.sysdef.xml')
-    sysdefconfigs = "developer_mc_4032"
-    builddrive = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad')
-    result = iad.main(sysdef, sysdefconfigs, builddrive) """
+#    test the package IAD class.
+#    
+#    iad = __import__('packageiad')
+#    sysdef = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad', 'layers.sysdef.xml')
+#    sysdefconfigs = "developer_mc_4032"
+#    builddrive = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad')
+#    result = iad.main(sysdef, sysdefconfigs, builddrive)
 
 #def test_package_processSisDir(self):
-    """ Test the packageiad test_package_processSisDir method.
-    
-    iad = __import__('packageiad')
-    packager = iad.IADPackager()    #init the packager
-    builddrive = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad')
-    buildDirs = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad', 'sis\\')
-    packager.processSisDir(buildDirs, builddrive + "\\epoc32\\tools\\makesis.exe") """
+#    test the packageiad test_package_processSisDir method.
+#    
+#    iad = __import__('packageiad')
+#    packager = iad.IADPackager()    #init the packager
+#    builddrive = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad')
+#    buildDirs = os.path.join(os.environ['TEST_DATA'], 'data', 'packageiad', 'sis\\')
+#    packager.processSisDir(buildDirs, builddrive + "\\epoc32\\tools\\makesis.exe") 
     
 def test_createPackage():
     """ test the create package method """
@@ -68,7 +68,7 @@
     currentDir = os.getcwd()
     packager.createPackage(topDir, packageName)
     if not os.path.exists('testPackage.zip') and not os.path.isfile('testPackage.zip'):
-        logger.info("testPackage.zip file not created")
+        _logger.info("testPackage.zip file not created")
         assert (os.path.exists('testPackage.zip') and os.path.isfile('testPackage.zip'))
     os.chdir(currentDir)
     
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_parsers.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_parsers.py	Wed Jun 16 16:51:40 2010 +0300
@@ -18,6 +18,7 @@
 #
 #Description:
 #===============================================================================
+""" test parsers"""
 
 import os
 import tempfile
@@ -353,7 +354,7 @@
         self.tcp = ats3.parsers.PkgFileParser("tc1.pkg")        
         
         self.data_files = [
-            (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "file1.dll").normpath(), path(r"c:" + os.sep + "sys" + os.sep + "bin" + os.sep + "file1.dll").normpath(), "testmodule", 'tc1.pkg'),
+            (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "file1.dll").normpath(), path(r"c:" + os.sep + "sys" + os.sep + "bin" + os.sep + "file1.dll").normpath(), "data:dependent", 'tc1.pkg'),
             (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "file1.txt").normpath(), path(r"e:" + os.sep + "sys" + os.sep + "bin" + os.sep + "file1.txt").normpath(), "data", 'tc1.pkg'),
             (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "file2.mp3").normpath(), path(r"e:" + os.sep + "sys" + os.sep + "bin" + os.sep + "file2.mp3").normpath(), "data", 'tc1.pkg'),
             (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "TestFramework.ini").normpath(), path(r"c:" + os.sep + "sys" + os.sep + "bin" + os.sep + "TestFramework.ini").normpath(), "engine_ini", 'tc1.pkg'),
@@ -362,6 +363,8 @@
             (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "tc1.sisx").normpath(), path(r"e:" + os.sep + "sys" + os.sep + "bin" + os.sep + "tc1.sisx").normpath(), "", 'tc1.pkg'),
             (path(TSRC_DIR+r"" + os.sep + "tsrc" + os.sep + "tc1" + os.sep + "data" + os.sep + "DUMP.xyz").normpath(), path(r"e:" + os.sep + "sys" + os.sep + "bin" + os.sep + "DUMP.xyz").normpath(), "data", 'tc1.pkg'),
             ]
+        for p, _, _, _ in self.data_files:
+            open(p, 'w').close()
 
     def test_get_pkg_files(self):
         """Test if pkg files are returned from a specified location"""
@@ -382,15 +385,13 @@
         self.data_files.pop()
         assert self.tcp.get_data_files(self.pkg_file_path1, "d:", "\.xyz") == self.data_files
 
-    def test_data_files_creation_without_drive_with_exclude(self):
+    def test_data_files_create_no_drive_wth_excl(self):
         """ Tests if PKG file parser creates data files list as expected without drive with exclude"""
-        
         self.data_files.pop()
         assert self.tcp.get_data_files(self.pkg_file_path1, "", "\.xyz") == self.data_files
 
-    def test_data_files_creation_without_drive_without_exclude(self):
+    def test_data_file_creation_no_drive_no_excl(self):
         """ Tests if PKG file parser creates data files list as expected without drive without exclude"""
-        
         assert self.tcp.get_data_files(self.pkg_file_path1, "") == self.data_files
             
 
@@ -400,6 +401,7 @@
         mocker.MockerTestCase.__init__(self, methodName)
 
     def setUp(self):
+        """setUp called before running tests automatically"""
         self.bld_path = os.path.normpath(os.path.join(TSRC_DIR, "tsrc", "group"))
         self.bld_path_comp1 = os.path.normpath(os.path.join(TSRC_DIR, "tsrc", "tc1", "group"))
         self.tcp = ats3.parsers.CppParser()
@@ -586,8 +588,8 @@
         """Tests if test mmp files are included"""
         self.lst_test_mmp = []
         
-        for p in self.path_list:
-            self.lst_test_mmp.append(self.tcp.get_test_mmp_files(os.path.normpath(os.path.join(p, "bld.inf")), False))
+        for p_list in self.path_list:
+            self.lst_test_mmp.append(self.tcp.get_test_mmp_files(os.path.normpath(os.path.join(p_list, "bld.inf")), False))
 
         assert self.lst_test_mmp == self.test_mmp_files
         
@@ -611,7 +613,7 @@
     
     def test_empty_parameter(self):
         """Tests if 'None' is returned when bld file path is empty"""
-        upper_bld_path = os.path.dirname(self.bld_path)
+        _ = os.path.dirname(self.bld_path)
         assert self.tcp.get_test_mmp_files("") == None
 
     
@@ -621,9 +623,10 @@
         mocker.MockerTestCase.__init__(self, methodName)
         
     def setUp(self):
+        """setUp called before tests are runn (automatically)"""
         self.bld_path = os.path.normpath(os.path.join(TSRC_DIR, "tsrc", "group", "bld.inf"))
         upper_bld_path = os.path.dirname(self.bld_path)
-        self.tcp = ats3.parsers.MmpFileParser()
+        self.tcp = ats3.parsers.MmpFileParser(self.bld_path)
         self.tc1_type = "dll"
         self.tc1_name = "tc1.dll"
         self.tc1_dll_type = "executable"
@@ -684,4 +687,5 @@
         mocker.MockerTestCase.__init__(self, methodName)
         
     def setUp(self):
+        """setUp automatically called before the tests are run"""
         pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_pkg2iby.py	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,46 @@
+#============================================================================ 
+#Name        : test_ant.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 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:
+#===============================================================================
+
+""" pkg2iby.py module tests. """
+
+import tempfile
+import os
+
+def test_pkg2iby():
+    import pkg2iby
+    tmpdir = tempfile.mkdtemp()
+    os.makedirs(os.path.join(tmpdir, 'epoc32', 'rom', 'include'))
+    os.makedirs(os.path.join(tmpdir, 'epoc32', 'data'))
+    os.makedirs(os.path.join(tmpdir, 'sf'))
+    
+    open(os.path.join(tmpdir, 'a.exe'), 'w').close()
+    open(os.path.join(tmpdir, 'a.dat'), 'w').close()
+    open(os.path.join(tmpdir, 'sf', 'a.script'), 'w').close()
+    
+    (f_desc, filename) = tempfile.mkstemp()
+    f_file = os.fdopen(f_desc, 'w')
+    f_file.write(r'"/sf/a.script"-"c:\a.script"' + '\n')
+    f_file.write(r'"/a.exe"-"c:\graphics\a.exe"' + '\n')
+    f_file.write(r'"/a.dat"-"c:\graphics\a.dat"' + '\n')
+    f_file.close()
+    
+    pkg2iby.generateromcontent(tmpdir, 'tef', [filename])
+    assert os.path.exists(os.path.join(tmpdir, 'epoc32', 'data', 'atsautoexec.bat'))
+    assert os.path.exists(os.path.join(tmpdir, 'epoc32', 'rom', 'include', 'atsauto.iby'))
+    
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_timeout_launcher.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncorecpythontests/test_timeout_launcher.py	Wed Jun 16 16:51:40 2010 +0300
@@ -39,14 +39,16 @@
 
 
 # pylint: disable-msg=C0103
+
 class os(object):   #has to be named this as it is mocking os method.
     """ dummy the os function call"""
-# pylint: enable-msg=C0103
+
     def kill(self, pid, value):
         """dummy OS class"""
         pid = value #just for pylint
         value = pid #just for pylint
         return 1
+# pylint: enable-msg=C0103
 
 class TimeoutLauncherTest(mocker.MockerTestCase):
     """class containing methods to test the timeout launcher"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,4 +16,4 @@
 #
 #Description:
 #===============================================================================
-
+""" python core library python core tests initialisation file"""
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_amara.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_amara.py	Wed Jun 16 16:51:40 2010 +0300
@@ -24,12 +24,13 @@
 from xmlhelper import recursive_node_scan
 
 def test_amara():
-    x = amara.parse(r'<commentLog><branchInfo category="" error="kkk" file="tests/data/comments_test.txt" originator="sanummel" since="07-03-22">Add rofsfiles for usage in paged images</branchInfo></commentLog>')
-    assert str(x.commentLog.branchInfo) == 'Add rofsfiles for usage in paged images'
+    """test amara"""
+    xxx = amara.parse(r'<commentLog><branchInfo category="" error="kkk" file="tests/data/comments_test.txt" originator="sanummel" since="07-03-22">Add rofsfiles for usage in paged images</branchInfo></commentLog>')
+    assert str(xxx.commentLog.branchInfo) == 'Add rofsfiles for usage in paged images'
     
-    x = amara.parse(r'<commentLog><branchInfo>1</branchInfo><branchInfo>2</branchInfo></commentLog>')
-    for y in x.commentLog.branchInfo:
-        assert str(y) == '1'
+    xxx = amara.parse(r'<commentLog><branchInfo>1</branchInfo><branchInfo>2</branchInfo></commentLog>')
+    for yyy in xxx.commentLog.branchInfo:
+        assert str(yyy) == '1'
         break
           
     myxml = """<DpComponent DpType="File" name="dp.cfg.xml" fileType="Binary" fileSubType="1" fileIndex="1" owner="SwUpdate" extract="true" signed="true" optional="true" crc="true" useCases="Refurbish,BackupRestore" variantPackage="true" include="true" EnableCRCVerification="true" parameters="test"/>"""
@@ -72,8 +73,8 @@
     
     xcf4 = amara.parse(r"<a><p name='1'/><p name='1'/></a>")
     found = False
-    for p in xcf4.xml_xpath("//p"):
-        assert str(p.name) == '1'
+    for p_path in xcf4.xml_xpath("//p"):
+        assert str(p_path.name) == '1'
         found = True
     assert found
     
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_bomtofile.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_bomtofile.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+""" test BOM to file"""
+
+# pylint: disable-msg=R0201
 
 import tempfile
 from shutil import rmtree
@@ -94,5 +97,6 @@
     def __init__(self, baseline):
         self.baseline = baseline
 
-    def create(self, project):
+    def create(self, _):
+        """create"""
         return _emulateProject(self.baseline)
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_build_io.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_build_io.py	Wed Jun 16 16:51:40 2010 +0300
@@ -18,6 +18,8 @@
 #===============================================================================
 
 """ Test the build.io module. """
+# pylint: disable-msg=R0201
+#method could be a function warning removed
 
 import logging
 import unittest
@@ -25,7 +27,7 @@
 import build.io
 
 
-logger = logging.getLogger('test.build.io')
+_logger = logging.getLogger('test.build.io')
 
 
 class AbldLogWhatReaderTest(unittest.TestCase):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_4pn.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_4pn.py	Wed Jun 16 16:51:40 2010 +0300
@@ -20,12 +20,14 @@
 """ Test cases for ccm python toolkit.
 
 """
+# pylint: disable-msg=R0201
+
 import unittest
 import ccm
 import logging
 
 
-logger = logging.getLogger('test.ccm')
+_logger = logging.getLogger('test.ccm')
 
 
 class FourPartNameTest(unittest.TestCase):
@@ -95,7 +97,7 @@
         assert not fpn1.is_same_family(fpn2), "Should not be from the same family"
 
     def testConvert(self):
-        # Test task displayname tranformation
+        """ Test task displayname tranformation"""
         fpn = ccm.FourPartName("Task mydb#123")
         assert fpn.type == "task"
         # Test folder displayname tranformation
@@ -123,13 +125,13 @@
         try:
             fpn = ccm.FourPartName("task mydb#123")
             assert False, "Should raise InvalidFourPartNameException when parsing'task mydb#123'"
-        except ccm.InvalidFourPartNameException, e:
+        except ccm.InvalidFourPartNameException:
             pass
 
         try:
             fpn = ccm.FourPartName("folder mydb#123")
             assert False, "Should raise InvalidFourPartNameException when parsing'folder mydb#123'"
-        except ccm.InvalidFourPartNameException, e:
+        except ccm.InvalidFourPartNameException:
             pass
             
             
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_object.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_object.py	Wed Jun 16 16:51:40 2010 +0300
@@ -20,13 +20,16 @@
 """ Test cases for ccm python toolkit.
     unitesting CCMObject functionality
 """
+
+# pylint: disable-msg=R0201
+
 import unittest
 import ccm
 import logging
 
 # Uncomment this line to enable logging in this module, or configure logging elsewhere
 logging.basicConfig(level=logging.DEBUG)
-logger = logging.getLogger('test.ccm_objects')
+_logger = logging.getLogger('test.ccm_objects')
 #
 #class CCMObjectTest(unittest.TestCase):
 #    """ Module related to CCMObject (and related) function testing. """
@@ -35,7 +38,7 @@
 #        #vc1tltst
 #        self.session = ccm.open_session(database = 'to1tobet')
 #        if self.session is None:
-#            logger.error("Error creating connection.")
+#            _logger.error("Error creating connection.")
 #            raise Exception("Couldn't open a session.")
 #
 #    def tearDown(self):
@@ -56,10 +59,10 @@
 #        project = self.session.create("mc-mc_4032_0728:project:vc1s60p1#1")
 #        release = self.session.create("mc/next")
 #        if not project.exists():
-#           logger.error("Project doesn't exists.")
+#           _logger.error("Project doesn't exists.")
 #           return       
 #        if not release.exists():           
-#           logger.error("Release doesn't exists.")
+#           _logger.error("Release doesn't exists.")
 #           return
 #           
 #        coproject = project.checkout(release).project
@@ -83,10 +86,12 @@
         self._database = database
     
     def database(self):
+        """database """
         return self._database
     
     def execute(self, cmdline, result=None):
-        logger.debug(cmdline)
+        """execute"""
+        _logger.debug(cmdline)
         if result == None:
             result = ccm.Result(self)
         if self._behave.has_key(cmdline):
@@ -99,6 +104,7 @@
 class CCMObjectTest(unittest.TestCase):
     """ Unit test case for CCMObject functionality """
     def test_get_baseline(self):
+        """test get baseline"""
         behave = {'up -show baseline_project "foo-1.0:project:db#1" -f "%displayname" -u': """foo-1.0:project:db#1 does not have a baseline project.
 """,
                   'up -show baseline_project "foo-2.0:project:db#1" -f "%displayname" -u': """foo-1.0:project:db#1
@@ -117,16 +123,33 @@
         project = session.create('project-1:project:db#1')
         result = project.delete()        
         assert "Deleting object 'project-1:project:db#1'" in result.output
-    
+
+    def test_delete_project_scope(self):
+        """ Check project deletion with custom scope """
+        behave = {'delete  -scope "project_and_subproject_hierarchy" -project "project-1:project:db#1"': "Deleting object 'project-1:project:db#1'"}
+        session = MockResultSession(behave)
+        project = session.create('project-1:project:db#1')
+        result = project.delete(scope='project_and_subproject_hierarchy')        
+        assert "Deleting object 'project-1:project:db#1'" in result.output
+
+    def test_delete_project_invalid_args(self):
+        """ Check project synergy is failing in case of bad synergy parameters for delete """
+        behave = {'delete  -project "project-1:project:db#1"': "Cannot use '-scope' option with '-r' option."}
+        session = MockResultSession(behave)
+        project = session.create('project-1:project:db#1')
+        try:
+            result = project.delete(recurse=True, scope='project_and_subproject_hierarchy')        
+            assert False, "The delete method must fail in case of synergy failure"
+        except:
+            pass
+
     def test_delete_object(self):
         """ Check object deletion """
         behave = {'delete   "object-1:object:db#1"': "Deleting object 'object-1:object:db#1'"}
         session = MockResultSession(behave)
-        o = session.create('object-1:object:db#1')
-        result = o.delete()        
+        obj = session.create('object-1:object:db#1')
+        result = obj.delete()
         assert "Deleting object 'object-1:object:db#1'" in result.output
 
 if __name__ == "__main__":
     unittest.main()
-
-
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_results.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccm_results.py	Wed Jun 16 16:51:40 2010 +0300
@@ -25,8 +25,9 @@
 import os
 import logging
 
+# pylint: disable-msg=R0201
 
-logger = logging.getLogger('test.ccm_results')
+_logger = logging.getLogger('test.ccm_results')
 logging.basicConfig(level=logging.INFO)
 
 class CounterHandler(logging.Handler):
@@ -54,11 +55,13 @@
         self._database = database
     
     def database(self):
+        """database"""
         return self._database
     
     def execute(self, cmdline, result=None):
+        """execute"""
         if result == None:
-            result = ccm.Result(self)        
+            result = ccm.Result(self)
         if self._behave.has_key(cmdline):
             result.statuserrors = 0  
             result.output = self._behave[cmdline]
@@ -97,6 +100,7 @@
 
    
     def test_ObjectListResult(self):
+        """test object list result"""
         behave = { 'test_ObjectListResult': """mc-mc_0638:project:vc1s60p1#1
 mc-mc_4031_0642:project:vc1s60p1#1
 mc-mc_4031_0646:project:vc1s60p1#1
@@ -126,11 +130,12 @@
         session = MockResultSession(behave)
         result = session.execute('test_ObjectListResult', ccm.ObjectListResult(session))
         assert len(result.output) == 24, "output doesn't contains the right number of result project."
-        for o in result.output:
-            assert o.type == 'project'
-            assert o.name == 'mc'
+        for obj in result.output:
+            assert obj.type == 'project'
+            assert obj.name == 'mc'
 
     def test_WorkAreaInfoResult(self):
+        """ test work area info result"""
         behave = { 'test_WorkAreaInfoResult': """
 Project                                            Maintain Copies Relative Time Translate Modify Path
 -------------------------------------------------------------------
@@ -158,8 +163,8 @@
         
 """}
         session = MockResultSession(behave)
-        object = session.create("Ibusal_internal-fa1f5132#wbernard16:project:jk1imeng#1")
-        result = session.execute('test_FinduseResult', ccm.FinduseResult(object))
+        obj = session.create("Ibusal_internal-fa1f5132#wbernard16:project:jk1imeng#1")
+        result = session.execute('test_FinduseResult', ccm.FinduseResult(obj))
         print result.output
         assert len(result.output) == 1
         assert result.output[0]['project'].objectname == "IBUSAL_RapidoYawe-fa1f5132#wbernard16:project:jk1imeng#1"
@@ -169,7 +174,7 @@
     def test_read_ccmwaid_info(self):
         """ Testing read_ccmwaid_info, open a _ccmwaid.inf file and check the extracted data. """
         data = ccm.read_ccmwaid_info(os.path.join(os.environ['TEST_DATA'], 'data', 'test_ccmwaid.inf'))
-        logger.debug(data)
+        _logger.debug(data)
         assert data['database'] == "jk1f5132"
         assert data['objectname'] == "sa1spp#1/project/S60/jk1f5132#wbernard"
 
@@ -215,7 +220,7 @@
 """}
         session = MockResultSession(behave)
         result = session.execute('test_update', ccm.UpdateResult(session))
-        #logger.debug(result.output)
+        #_logger.debug(result.output)
         assert len(result.output['tasks']) == 4, "Number of tasks doesn't match."
         assert len(result.output['modifications']) == 4, "Number of modifications doesn't match."
         assert len(result.output['errors']) == 1, "Number of errors doesn't match."
@@ -246,12 +251,12 @@
 """}
         session = MockResultSession(behave)
         result = session.execute('test_update', ccm.UpdateResult(session))
-        #logger.debug(result.output)
-        #logger.debug(result.output.keys())
-        #logger.debug(len(result.output['tasks']))
-        #logger.debug(len(result.output['modifications']))
-        #logger.debug(len(result.output['errors']))
-        #logger.debug(len(result.output['warnings']))
+        #_logger.debug(result.output)
+        #_logger.debug(result.output.keys())
+        #_logger.debug(len(result.output['tasks']))
+        #_logger.debug(len(result.output['modifications']))
+        #_logger.debug(len(result.output['errors']))
+        #_logger.debug(len(result.output['warnings']))
         
         assert (len(result.output['tasks']) == 0), "Number of tasks doesn't match."
         assert (len(result.output['modifications']) == 0), "Number of modifications doesn't match."
@@ -259,8 +264,8 @@
         assert (len(result.output['warnings']) == 5), "Number of warnings doesn't match."
 
 
-    def test_UpdateTemplateInformation_result(self):        
-        """ Validating UpdateTemplateInformation."""                
+    def test_UpdateTemplateInformation_result(self):
+        """ Validating UpdateTemplateInformation."""
         behave = {'test_update' : """Baseline Selection Mode: Latest Baseline Projects
 Prep Allowed:            No
 Versions Matching:       *abs.50*
@@ -276,7 +281,7 @@
         """}
         session = MockResultSession(behave)
         result = session.execute('test_update', ccm.UpdateTemplateInformation(session))
-        #logger.debug(result.output)
+        #_logger.debug(result.output)
         assert result.output['baseline_selection_mode'] == "Latest Baseline Projects", "BSM doesn't match."
         assert result.output['prep_allowed'] == False, "Prep allowed doesn't match."
         assert result.output['version_matching'] == "*abs.50*", "Version matching doesn't match."
@@ -284,9 +289,9 @@
         assert result.output['modifiable_in_database'] == "tr1s60", "Modifiable in Database doesn't match."
         assert result.output['in_use_for_release'] == True, "In Use For Release doesn't match."
     
-    def test_ConflictsResult_result(self):        
-        """ Validating ConflictsResult."""                
-        behave = {'test_update' : """        
+    def test_ConflictsResult_result(self):
+        """ Validating ConflictsResult."""
+        behave = {'test_update' : """
 Project: Cartman-Release_v4
 
          No conflicts detected.
@@ -318,15 +323,15 @@
         """}
         session = MockResultSession(behave)
         result = session.execute('test_update', ccm.ConflictsResult(session))
-        #logger.debug(result.output)
+        #_logger.debug(result.output)
         # pylint: disable-msg=E1103
         assert len(result.output.keys()) == 7, "Should detect 7 projects."
         subproj = session.create("Cartman_sub_sub_sub02-Release_v4:project:%s#1" % session.database())
         assert len(result.output[subproj]) == 2, "%s should contain 2 conflicts" % subproj.objectname
 
 
-    def test_DataMapperListResult_result(self):        
-        """ Validating DataMapperListResult."""                        
+    def test_DataMapperListResult_result(self):
+        """ Validating DataMapperListResult."""
         behave = {'test_query' : """>>>objectname>>>task5204-1:task:tr1test1>>>task_synopsis>>>Create Cartman_sub03>>>
 >>>objectname>>>task5223-1:task:tr1test1>>>task_synopsis>>>cartman/next test1>>>
 >>>objectname>>>task5224-1:task:tr1test1>>>task_synopsis>>>test.txt>>>
@@ -336,11 +341,11 @@
 """}
         session = MockResultSession(behave)
         result = session.execute('test_query', ccm.DataMapperListResult(session, '>>>', ['objectname', 'task_synopsis'], ['ccmobject', 'string']))        
-        logger.debug(result.output)
+        _logger.debug(result.output)
         assert len(result.output) == 6
         
-    def test_UpdatePropertiesRefreshResult_result(self):        
-        """ Validating UpdatePropertiesRefreshResult."""                        
+    def test_UpdatePropertiesRefreshResult_result(self):
+        """ Validating UpdatePropertiesRefreshResult."""
         behave = {'test_refresh' : """Refreshing baseline and tasks for project grouping 'All cartman/next Integration Testing Projects from Database tr1test1'.
 Replacing tasks in folder tr1test1#2045
   Removed the following tasks from folder tr1test1#2045
@@ -357,7 +362,7 @@
 """}
         session = MockResultSession(behave)
         result = session.execute('test_refresh', ccm.UpdatePropertiesRefreshResult(session))        
-        logger.debug(result.output)
+        _logger.debug(result.output)
         assert result.output['added'] == [session.create("Task tr1test1#5223")]
         assert result.output['removed'] == [session.create("Task tr1test1#5225")]
 
@@ -388,11 +393,11 @@
 Serious: 
 Update failed.
 """
-        logger = logging.getLogger('count.logger')
-        logger.setLevel(logging.WARNING)
+        _logger = logging.getLogger('count.logger')
+        _logger.setLevel(logging.WARNING)
         handler = CounterHandler()
-        logger.addHandler(handler)
-        ccm.log_result(log, ccm.UPDATE_LOG_RULES, logger)
+        _logger.addHandler(handler)
+        ccm.log_result(log, ccm.UPDATE_LOG_RULES, _logger)
         print handler.warnings
         print handler.errors
         assert handler.warnings == 5
@@ -410,11 +415,11 @@
 Copy Project complete with 1 errors.
 WARNING: There is no matching baseline project for 'ci-hitchcock_nga' in baseline 'tr1s60#ABS_domain_mcl92-abs.mcl.92_200907'.  This baseline might not be complete
 """
-        logger = logging.getLogger('count.logger')
-        logger.setLevel(logging.WARNING)
+        _logger = logging.getLogger('count.logger')
+        _logger.setLevel(logging.WARNING)
         handler = CounterHandler()
-        logger.addHandler(handler)
-        ccm.log_result(log, ccm.CHECKOUT_LOG_RULES, logger)
+        _logger.addHandler(handler)
+        ccm.log_result(log, ccm.CHECKOUT_LOG_RULES, _logger)
         print handler.warnings
         print handler.errors
         assert handler.warnings == 4
@@ -433,11 +438,11 @@
 You can use Reconcile to resolve work area conflicts
 Warning: Conflicts detected during synchronization. Check your logs.
 """
-        logger = logging.getLogger('count.logger')
-        logger.setLevel(logging.WARNING)
+        _logger = logging.getLogger('count.logger')
+        _logger.setLevel(logging.WARNING)
         handler = CounterHandler()
-        logger.addHandler(handler)
-        ccm.log_result(log, ccm.SYNC_LOG_RULES, logger)
+        _logger.addHandler(handler)
+        ccm.log_result(log, ccm.SYNC_LOG_RULES, _logger)
         print handler.warnings
         print handler.errors
         assert handler.warnings == 0
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccmutil.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ccmutil.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+"""test ccm utilities"""
 
 import unittest
 import ccmutil
@@ -27,6 +28,8 @@
 logging.basicConfig(level=logging.INFO)
 
 def open_session(username=None, password=None, engine=None, dbpath=None, database=None, reuse=True):
+    """open session"""
+    reuse = True        #just for pylint
     return MockSession(None, username, password, engine, dbpath, database)
 
 nokia.nokiaccm.open_session = open_session
@@ -40,12 +43,12 @@
         username = 'username'
         password = 'password'
         engine = "ccm.engine.host"
-        dbpath = "ccm.database.path"     
+        dbpath = "ccm.database.path"
         try:
             session = ccmutil.get_session(database, username, password, engine, dbpath)
-        except Exception, ex:
+        except Exception:
             print "Error creating session"
-        assert session is None        
+        assert session is None
             
     def test_get_session_without_database_set(self):
         """ Testing get_session method without database set"""
@@ -54,12 +57,12 @@
         username = 'username'
         password = 'password'
         engine = "ccm.engine.host"
-        dbpath = "ccm.database.path"     
+        dbpath = "ccm.database.path"
         try:
             session = ccmutil.get_session(database, username, password, engine, dbpath)
-        except Exception, ex:
-            print "Error creating session"            
-        assert session is None        
+        except Exception:
+            print "Error creating session"
+        assert session is None
 
     def test_get_session(self):
         """ Testing get_session method """
@@ -77,19 +80,19 @@
             self._session_addr = "LOCALHOST:127.0.0.1:1234"
         else:
             ccm.Session.start(username, password, engine, dbpath)
-                
+
     def database(self):
+        """database"""
         _logger.info("running database from MockResultSession")
         return self._database
     
     def execute(self, cmdline, result=None):
+        """execute"""
         if result == None:
-            result = ccm.Result(self)        
+            result = ccm.Result(self)
         if self._behave.has_key(cmdline):
             result.statuserrors = 0  
             result.output = self._behave[cmdline]
         else:
             result.status = -1  
         return result
-
-
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_compilation.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_compilation.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+"""test compilation """
+
+# pylint: disable-msg=R0201
 
 import unittest
 import compilation
@@ -30,7 +33,7 @@
 
 class CompilationTest(unittest.TestCase):
     """ Unit test case for compilation.py """
-    def test_read_output_binaries_per_unit_with_empty_logs_list(self):
+    def test_read_op_bins_per_unt_empty_logs_lst(self):
         """ Testing read_output_binaries_per_unit method with empty log list """
         sysdefpath = os.path.join(os.environ['TEST_DATA'], 'data', 'compile', 'sysdefs', 'canonical_system_definition.xml')
         sysDef = sysdef.api.SystemDefinition(sysdefpath)
@@ -45,7 +48,7 @@
         loglist = os.path.join(os.environ['TEST_DATA'], 'data', 'compile', 'logs', 'test_build.log')
         bsl.read_output_binaries_per_unit(loglist.split(';'))
         
-    def test_read_binary_sizes_in_rom_output_logs_with_empty_logs_list(self):
+    def test_read_bin_sizes_rom_op_empty_logs_lst(self):
         """ Testing read_binary_sizes_in_rom_output_logs method with empty log list """
         sysdefpath = os.path.join(os.environ['TEST_DATA'], 'data', 'compile', 'sysdefs', 'canonical_system_definition.xml')
         sysDef = sysdef.api.SystemDefinition(sysdefpath)
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_configuration.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_configuration.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+""" test configuration """
+
+# pylint: disable-msg=R0201
 
 import logging
 import StringIO
@@ -212,7 +215,7 @@
         builder = configuration.NestedConfigurationBuilder(StringIO.StringIO(config_text))
         configSet = builder.getConfiguration()
         configs = configSet.getConfigurations('test_spec_1')
-        (out, outputFile) = tempfile.mkstemp('.tmp', 'zip_test')
+        (_, outputFile) = tempfile.mkstemp('.tmp', 'zip_test')
         builder.writeToXML(outputFile, configs, 'test_spec_1')
         
         builder = configuration.NestedConfigurationBuilder(open(outputFile), 'r')
@@ -224,7 +227,7 @@
         builder = configuration.NestedConfigurationBuilder(StringIO.StringIO(config_text))
         configSet = builder.getConfiguration()
         configs = configSet.getConfigurations('test_spec')
-        (out, outputFile) = tempfile.mkstemp('.tmp', 'zip_test')
+        (_, outputFile) = tempfile.mkstemp('.tmp', 'zip_test')
         builder.writeToXML(outputFile, configs )
         
         builder = configuration.NestedConfigurationBuilder(open(outputFile), 'r')
@@ -235,7 +238,6 @@
         
         
 
-        
 class PropertiesConfigurationTest(unittest.TestCase):
     """ Test plain text configuration files. """
     def test_text_config(self):
@@ -250,9 +252,9 @@
         config = configuration.PropertiesConfiguration(open(os.path.join(os.environ['TEST_DATA'], 'data/ant_config_test.txt'), 'r'))
 
         config['foo'] = "bar"
-        (fd, filename) = tempfile.mkstemp()
-        f = os.fdopen(fd, 'w')
-        config.store(f)
+        (f_d, filename) = tempfile.mkstemp()
+        f_file = os.fdopen(f_d, 'w')
+        config.store(f_file)
         config = configuration.PropertiesConfiguration(open(filename))
         
         assert config['text.a'] == 'text.value.A'
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ctc.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ctc.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" test ctc"""
 
 import unittest
 import ctc
@@ -27,7 +28,7 @@
 _logger = logging.getLogger('test.configuration')
 logging.basicConfig(level=logging.INFO)
 
-root_test_dir = tempfile.mkdtemp()
+_root_test_dir = tempfile.mkdtemp()
 _test_file_paths = [
                     "ctc/dir/component1/group/MON.SYM",
                     "ctc/dir/component2/group/",
@@ -36,7 +37,7 @@
 
 def _testpath(subpath):
     """ Normalised path for test paths. """
-    return os.path.normpath(os.path.join(root_test_dir, subpath))
+    return os.path.normpath(os.path.join(_root_test_dir, subpath))
 
 _test_file_content = {}
 
@@ -47,7 +48,7 @@
     for testing various file selection and archiving operations.
     """
     for child_path in _test_file_paths:
-        path = os.path.join(root_test_dir, child_path)
+        path = os.path.join(_root_test_dir, child_path)
         path_dir = path
         path_dir = os.path.dirname(path)
         
@@ -65,27 +66,32 @@
 
 def teardown_module():
     """ Teardown test config. """
-    if os.path.exists(root_test_dir):
-        fileutils.rmtree(root_test_dir)
+    if os.path.exists(_root_test_dir):
+        fileutils.rmtree(_root_test_dir)
     
 
 class MockUploader(ctc.MonSymFTPUploader):
     """ This class provides a mock MonSymFTPUploader """
     def _open(self):
+        """open"""
         pass
     
     def _close(self):
+        """close"""
         pass
 
     def _ftpmkdirs(self, dir):
+        """ftp make dirs"""
         pass    
     
     def _send(self, src, dst):
+        """send"""
         pass
 
 class NestedConfigurationBuilderTest(unittest.TestCase):
     """ Unit test for ctc uploader """    
     def test_uploader(self):
+        """test uploader"""
         paths = [   "ctc/dir/component1/group/MON.SYM",
                     "ctc/dir/component2/group/MON.SYM",
                     "ctc/dir/component3/group/MON.SYM",
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_deltazip.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_deltazip.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" test delta zip"""
 
 from __future__ import with_statement
 import unittest
@@ -28,6 +29,7 @@
 class DeltaZipTest( unittest.TestCase ):
     """ Unit tests for the delta zip tool. """
     def setUp(self):
+        """setUp automatically called before running the tests"""
         self.cwd_backup = os.getcwd()
         self.logger = logging.getLogger('test.deltazip')
         self.root = os.environ['TEST_DATA']
@@ -37,9 +39,9 @@
         logging.basicConfig(level=logging.INFO)
 
     def test_MD5SignatureBuilder(self):
-        
+        """test MD5 signature Builder"""
         output = os.path.join(self.output2, 'md5_list.txt')
-        md5output = os.path.join(self.output2, 'delta.md5')
+        _ = os.path.join(self.output2, 'delta.md5')
         
         if os.path.exists(output):
             os.remove(output)
@@ -49,7 +51,9 @@
         if sys.platform == 'win32':
             assert os.path.splitdrive(self.root)[0] + os.sep not in open(output).read()
         assert os.path.exists(output)
+        
     def test_DeltaZipBuilder(self):
+        """test delta Zip Builder"""
         if not os.path.exists(self.output):
             os.mkdir(self.output)
       
@@ -101,18 +105,19 @@
         delta.create_delta_zip(deltazipfile, deletefile, 1, deltaantfile)
 
     def test_changedFiles(self):
+        """test changed Files"""
         dir1 = tempfile.mkdtemp()
         dir2 = tempfile.mkdtemp()
         
-        with open(os.path.join(dir1, '1'), 'w') as f1:
-            f1.write('Directory:%s\n' % self.root)
-            f1.write('myfile1 TYPE=unknown format MD5=34dcda0d351c75e4942b55e1b2e2422g')
-        with open(os.path.join(dir2, '2'), 'w') as f2:
-            f2.write('Directory:%s\n' % self.root)
-            f2.write('myfile1 TYPE=unknown format MD5=34dcda0d351c75e4542b55e1b2e2422g')
+        with open(os.path.join(dir1, '1'), 'w') as f_1:
+            f_1.write('Directory:%s\n' % self.root)
+            f_1.write('myfile1 TYPE=unknown format MD5=34dcda0d351c75e4942b55e1b2e2422g')
+        with open(os.path.join(dir2, '2'), 'w') as f_2:
+            f_2.write('Directory:%s\n' % self.root)
+            f_2.write('myfile1 TYPE=unknown format MD5=34dcda0d351c75e4542b55e1b2e2422g')
         
         assert delta_zip.changedFiles(dir1, dir2) == [os.path.join(self.root, 'myfile1')]
 
     def tearDown(self):
-        """ Restore path """
+        """ Restore path automatically called when all test have been run"""
         os.chdir(self.cwd_backup)
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_dependancygraph.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_dependancygraph.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+"""test dependancy graph"""
 
 import unittest
 import dependancygraph
@@ -28,22 +29,23 @@
 logging.basicConfig(level=logging.INFO)
 
 class DependancygraphTest(unittest.TestCase):
-    """ Acceptance tests for dependancygraph.py """        
+    """ Acceptance tests for dependancygraph.py """
     def test_dependancygraph(self):
-        (fd, filename) = tempfile.mkstemp()
-        f = os.fdopen(fd, 'w')
-        f.write('test')
-        f.close()
+        """test dependancy graph"""
+        (f_d, filename) = tempfile.mkstemp()
+        f_file = os.fdopen(f_d, 'w')
+        f_file.write('test')
+        f_file.close()
         path1 = None
         path2 = None
-        for p in sys.path:
-            for x in [p, os.path.join(p, '..')]:
-                if os.path.exists(x) and os.path.isdir(x):
-                    for egg in os.listdir(x):
+        for p_path in sys.path:
+            for xxx in [p_path, os.path.join(p_path, '..')]:
+                if os.path.exists(xxx) and os.path.isdir(xxx):
+                    for egg in os.listdir(xxx):
                         if egg.endswith('.egg'):
                             if path1 == None:
-                                path1 = x
-                            if path1 and path1 != x:
-                                path2 = x
+                                path1 = xxx
+                            if path1 and path1 != xxx:
+                                path2 = xxx
         if path1 and path2:
             dependancygraph.createGraph(os.path.join(os.environ['TEST_DATA'], 'data', 'ivy.xml'), filename, path1, path2, False)
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_docs.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_docs.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+"""test docs """
+
+# pylint: disable-msg=R0201
 
 import unittest
 import docs
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_escapeddict.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_escapeddict.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+"""test escaped dict """
+
+# pylint: disable-msg=R0201
 
 import logging
 import unittest
@@ -23,19 +26,21 @@
 import escapeddict
 
 
-logger = logging.getLogger('test.escapeddict')
+_logger = logging.getLogger('test.escapeddict')
 
 
 class EscapedDictTest(unittest.TestCase):
     """ Acceptance tests for escapeddict.py """
     def test_escape(self):
+        """test escape"""
         testdict = escapeddict.EscapedDict({'key1': 'value1', 'key2': 'value2 ${key1}'})
         for key in testdict.keys():
-            logger.info(testdict[key])
+            _logger.info(testdict[key])
         assert testdict['key1'] == 'value1'
         assert testdict['key2'] == 'value2 value1'
         
     def test_escape_no_value_present(self):
+        """test escape no value present"""
         testdict = escapeddict.EscapedDict({'key1': 'value1', 'key2': 'value2 ${key_not_present} ${key1}'})
         for key in testdict.keys():
             print testdict[key]
@@ -43,6 +48,7 @@
         assert testdict['key2'] == 'value2 ${key_not_present} value1'
         
     def test_escape_value_as_list(self):
+        """test escape value as list"""
         testdict = escapeddict.EscapedDict({'key1': 'value1', 'key2': ['value2', '${key1}']})
         for key in testdict.keys():
             print testdict[key]
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_freedisk.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_freedisk.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+""" test free disk """
+
+# pylint: disable-msg=R0201
 
 import unittest
 import logging
@@ -31,7 +34,7 @@
 if sys.platform == "win32":
     from win32api import GetLogicalDriveStrings
     
-    logger = logging.getLogger('test_freedisk')
+    _logger = logging.getLogger('test_freedisk')
     
     ## MAKE SURE that the drive being tested MUST be there.
     class ToolTest(unittest.TestCase):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_gscm.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_gscm.py	Wed Jun 16 16:51:40 2010 +0300
@@ -21,6 +21,8 @@
 
 """
 
+# pylint: disable-msg=R0201
+
 import logging
 import unittest
 import os
@@ -35,6 +37,7 @@
     """ Test cases for gscm python wrapper. """
     
     def setUp(self):
+        """setUp automatically called before running the tests"""
         if os.environ.has_key('CCM_DATABASE'):
             self.ccmdatabase = os.environ['CCM_DATABASE']
         else:
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ido.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_ido.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" test IDO"""
 
 import unittest
 import ido
@@ -51,9 +52,9 @@
 
     def test_ido_sysdef_invalid(self):
         """ Verifying get_sysdef_location method with invalid sysdef"""
-        (fd, filename) = mkstemp()
-        os.write(fd,'Test sysdef file')
-        os.close(fd)
+        (f_d, filename) = mkstemp()
+        os.write(f_d,'Test sysdef file')
+        os.close(f_d)
         location = ido.get_sysdef_location(filename); 
         os.unlink(filename)
         assert location == None
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_integration_ant.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_integration_ant.py	Wed Jun 16 16:51:40 2010 +0300
@@ -18,6 +18,8 @@
 #===============================================================================
 """ Testing integration.ant module """  
 
+# pylint: disable-msg=R0201
+
 import tempfile
 import os
 import logging
@@ -53,19 +55,19 @@
     """Emulate attributes"""
     def __init__(self, outputFilename):
         self.outputFilename = outputFilename
-    def get(self, attribute):
+    def get(self, _):
         """Emulate get method"""
         return self.outputFilename
 
 class _emulateElements():
     """Emulate elements"""
-    def get(self, fileset):
+    def get(self, _):
         """Emulate get method"""
         return _emulateFileset()
 
 class _emulateFileset():
     """Emulate fileset"""
-    def get(self, eid):
+    def get(self, _):
         """Emulate get method"""
         return _emulateDirScanner()
     def size(self):
@@ -83,7 +85,7 @@
             return ['test_build_compile.log']
         elif os.sep == '/':
             return ['test_build_compile_linux.log']
-    def getDirectoryScanner(self, project):
+    def getDirectoryScanner(self, _):
         """Emulate getDirectoryScanner method """
         return self
     def getBasedir(self):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_log2xml.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_log2xml.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+""" test log to XML """
+
+# pylint: disable-msg=R0201
 
 import unittest
 import logging
@@ -24,7 +27,7 @@
 from xml.dom import minidom
 import tempfile
 
-logger = logging.getLogger('test.log2xml')
+_logger = logging.getLogger('test.log2xml')
 
 
 class Log2XMLTest(unittest.TestCase):
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_misc.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_misc.py	Wed Jun 16 16:51:40 2010 +0300
@@ -47,7 +47,10 @@
     
     import optparse
     
+# pylint: disable-msg=W0613
+
     def testCallback(option, opt, value, parser):
+        """test Call back"""
         pass
     
     parser = optparse.OptionParser()
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_path_match.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_path_match.py	Wed Jun 16 16:51:40 2010 +0300
@@ -23,7 +23,7 @@
 
 
 def test_path_match_ant_match():
-    # Matching stuff
+    """ Matching stuff"""
     assert pathaddition.match.ant_match(r"CVS/Repository", r"**/CVS/*") == True
     assert pathaddition.match.ant_match(r"org/apache/CVS/Entries", r"**/CVS/*") == True
     assert pathaddition.match.ant_match(r"org/apache/jakarta/tools/ant/CVS/Entries", r"**/CVS/*") == True
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_pathaddition_relative.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_pathaddition_relative.py	Wed Jun 16 16:51:40 2010 +0300
@@ -24,6 +24,7 @@
 
 
 def test_commonprefix():
+    """ tst common prefix"""
     paths = ['E:/Build_E/ido_wa/ido_lcdo_mcl_product_52_ec/LC_Domain/LC_Domain/localconnectivity',
              'E:/Build_E/ido_wa/ido_lcdo_mcl_product_52_ec/LC_Domain_osext/LC_Domain_osext/localconnectivityextensions',
              'E:/Build_E/ido_wa/ido_lcdo_mcl_product_52_ec/LC_Domain_osext/LC_Domain_osext/localconnectivityextensions/src',
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_policy_validator.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_policy_validator.py	Wed Jun 16 16:51:40 2010 +0300
@@ -53,6 +53,9 @@
     's60/new_rules/',
     's60/new_rules/subdir1/invalid.txt',
     's60/new_rules/subdir2/',
+    's60/new_rules_excludes/.static_wa',
+    's60/new_rules_excludes/subdir1/invalid.txt',
+    's60/new_rules_excludes/subdir2/',
     ]
 
 _test_file_content = {
@@ -114,12 +117,12 @@
 
     def test_policy_validator(self):
         """ Testing the policy validator behaviour. """
-        validator = integration.quality.PolicyValidator()
+        validator = integration.quality.PolicyValidator(excludes=".static_wa")
         errors = [] 
         errors.extend(validator.validate(self._testpath('s60')))
         errors.sort()
         print errors
-        assert len(errors) == 5
+        assert len(errors) == 6
 
         
         # Invalid encoding: contains other stuff than policy id.
@@ -146,4 +149,9 @@
         assert errors[4][0] == "missing"
         assert errors[4][1].lower() == self._testpath('s60' + os.sep + 'new_rules' + os.sep + 'subdir1').lower()
         assert errors[4][2] == None
+
+        # Policy file is missing
+        assert errors[5][0] == "missing"
+        assert errors[5][1].lower() == self._testpath('s60' + os.sep + 'new_rules_excludes' + os.sep + 'subdir1').lower()
+        assert errors[5][2] == None
         
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_preparation.py	Wed Jun 16 16:51:40 2010 +0300
@@ -18,6 +18,8 @@
 #===============================================================================
 """ Testing preparation module """  
 
+# pylint: disable-msg=R0201
+
 import tempfile
 from shutil import rmtree
 import os
@@ -49,7 +51,7 @@
 
 def _fastSnapshot(project, target_dir, threads): 
     """ Emulate ccm.extra.FastSnapshot method for unit testing """
-    "Snapshot Created"
+    #Snapshot Created
 
 def _updateResultSimple(session): 
     """ Emulate ccm.UpdateResultSimple method for unit testing """
@@ -94,7 +96,7 @@
         ccm.extra.FastSnapshot = _fastSnapshot
         ccm.UpdateResultSimple = _updateResultSimple
         ccm.extra.FastMaintainWorkArea = _fastMaintainWorkArea
-        """Setup a temporary project directory for unit testing"""
+        #Setup a temporary project directory for unit testing
         self.dirname = os.path.join(tempfile.gettempdir(), 'pyUnitTestHeliumProject')
         self.filename = os.path.join(self.dirname, 'project.version')
         if os.path.exists(self.dirname): 
--- a/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_session_provider.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/pythoncoretests/test_session_provider.py	Wed Jun 16 16:51:40 2010 +0300
@@ -17,9 +17,10 @@
 #Description:
 #===============================================================================
 
-""" Test cases for ccm python toolkit.
+""" Test cases for ccm python toolkit."""
 
-"""
+# pylint: disable-msg=R0201
+
 import unittest
 import ccm
 import ccm.extra
@@ -81,7 +82,7 @@
         """ Test the opening of an invalid database. """
         prov = ccm.extra.SessionProvider(opener=MockOpener())
         try:
-            dbase = prov.get(database="invaliddb")
+            _ = prov.get(database="invaliddb")
             assert False, "Should raise Exception when giving unexisting dbase.'"
         except Exception, exc:
             _logger.info(exc)
@@ -114,7 +115,7 @@
         """ Test the opening of an invalid database (cached). """
         prov = ccm.extra.CachedSessionProvider(opener=MockOpener())
         try:
-            dbase = prov.get(database="invaliddb")
+            _ = prov.get(database="invaliddb")
             assert False, "Should raise Exception when giving unexisting dbase.'"
         except Exception, exc:
             _logger.info(exc)
--- a/buildframework/helium/sf/python/pythoncore/lib/rtfutils.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/rtfutils.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,9 @@
 #
 #Description:
 #===============================================================================
+""" rtf utilis"""
+
+# pylint: disable-msg=R0201
 
 import csv
 import os
@@ -47,11 +50,12 @@
         template.close()
         
     def _rtftable(self, errors, output, tagtoreplace, template):
-        PyRTF.Elements.StandardColours.append(PyRTF.PropertySets.Colour('NokiaBlue', 153, 204, 255))    
+        """rtf table"""
+        PyRTF.Elements.StandardColours.append(PyRTF.PropertySets.Colour('NokiaBlue', 153, 204, 255))
        
-        DR = PyRTF.Renderer()
+        d_r = PyRTF.Renderer()
         doc     = PyRTF.Document()
-        ss      = doc.StyleSheet
+        s_s      = doc.StyleSheet
         section = PyRTF.Section()
         doc.Sections.append( section )
     
@@ -66,21 +70,21 @@
             assert len(row) == 3
             
             if style == None:
-                style = ss.ParagraphStyles.Heading2
+                style = s_s.ParagraphStyles.Heading2
             else:
-                style = ss.ParagraphStyles.Normal
+                style = s_s.ParagraphStyles.Normal
             
             # Handle each value from the row
             rowcell = []
             
-            for value in row:           
+            for value in row:
                 cell = PyRTF.Text( value )
                 rowcell.append(PyRTF.Cell( PyRTF.Paragraph(style, cell) ))
             table.AddRow( *rowcell )
     
         section.append( table )
         string = StringIO.StringIO()
-        DR.Write( doc, string )
+        d_r.Write( doc, string )
                 
         keep = ''
         for line in string.getvalue().splitlines():
@@ -106,20 +110,21 @@
         template.close()
     
     def _rtfimage(self, image, output, tagtoreplace, template):
-        TEMP_FILE = 'image_temp.rtf'
+        """rtf image"""
+        temp_file = 'image_temp.rtf'
         
-        DR = PyRTF.Renderer()
+        d_r = PyRTF.Renderer()
         doc = PyRTF.Document()
-        ss = doc.StyleSheet
+        _ = doc.StyleSheet
         section = PyRTF.Section()
         doc.Sections.append( section )
     
-        section.append( PyRTF.Image( image ) )    
+        section.append( PyRTF.Image( image ) )
         
-        tempOutput = file( TEMP_FILE, 'w' )
-        DR.Write( doc, tempOutput )
+        tempOutput = file( temp_file, 'w' )
+        d_r.Write( doc, tempOutput )
         
-        tempOutput = file( TEMP_FILE, 'rb' )
+        tempOutput = file( temp_file, 'rb' )
         
         keep = ''
         for line in tempOutput:
@@ -137,7 +142,7 @@
             line = line.replace(tagtoreplace, keep)
             output.write(line)
         
-        os.remove(TEMP_FILE)
+        os.remove(temp_file)
         
     def rtfconvert(self, inputfilename, outputfilename):
         """ Converts a property file to be RTF link syntax """
@@ -150,7 +155,8 @@
         outputfile.close()
         
     def _rtfconvert(self, inputfile, outputfile):
-        p = re.compile(r'(.+=)((\\\\|http|\.\\|ftp)(.+))')
+        """rtf convert"""
+        ppp = re.compile(r'(.+=)((\\\\|http|\.\\|ftp)(.+))')
         for line in inputfile:
             newline = line
             
@@ -165,7 +171,7 @@
                 newline = newline.replace('\\','\\\\\\\\\\\\\\\\')
                 
             
-            newline = p.sub('\g<1>{_backslash_field{_backslash_*_backslash_fldinst HYPERLINK \g<2>}}', newline)
+            newline = ppp.sub('\g<1>{_backslash_field{_backslash_*_backslash_fldinst HYPERLINK \g<2>}}', newline)
             
             newline = newline.replace('_backslash_', r'\\')
             
--- a/buildframework/helium/sf/python/pythoncore/lib/sis.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/sis.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" SIS """
 
 import os
 import buildtools
@@ -78,7 +79,7 @@
                 raise Exception("Invalid property %s if using new 'input' SIS configuration" % property_)
         
         input_ = config['input']
-        (input_path, input_name) = os.path.split(input_)
+        (input_path, _) = os.path.split(input_)
         (input_root, input_ext) = os.path.splitext(input_)
         valid_extensions = ['.pkg', '.sis', '.sisx']
         if input_ext not in valid_extensions:
@@ -105,7 +106,3 @@
         # Copy content to SIS files directory
         copyCommand = buildtools.Copy(output, config['build.sisfiles.dir'])
         commandList.addCommand(copyCommand, newstage=True)
-        
-
-
-
--- a/buildframework/helium/sf/python/pythoncore/lib/symbian/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/symbian/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,4 +16,4 @@
 #
 #Description:
 #===============================================================================
-
+""" python core library symbian initialisation file"""
--- a/buildframework/helium/sf/python/pythoncore/lib/symbian/log.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/symbian/log.py	Wed Jun 16 16:51:40 2010 +0300
@@ -62,14 +62,14 @@
         self.__file = fileobject
 
     def parse(self):
-        """ Function that run the parsing of the log.        
+        """ Function that run the parsing of the log.
         """
         #=== Stage=1 started Fri Apr 18 21:09:55 2008
         match_stage = re.compile(r"===\s+(?:Stage=)?(.+)\s+(started|finished)\s+(.+)")
 
         # === Stage=1 == ncp_psw 
         match_component_start = re.compile(r"===\s+(?:Stage=)?(.+?)\s+==\s+(.+)")
-        match_component_finished = re.compile(r"\+\+\s+Finished\s+at")        
+        match_component_finished = re.compile(r"\+\+\s+Finished\s+at")
         # === Stage=1 == ncp_psw 
         match_component_cmdline = re.compile(r"--\s+(.+)")
         match_component_chdir = re.compile(r"Chdir\s+(.+)|cd\s+(.*?)\s+.*")
@@ -83,51 +83,51 @@
             line = line.strip()
             _logger.debug(line)
             if component_name == None:
-                _logger.debug("Searching stage")            
-                m = match_stage.match(line)
-                _logger.debug(m)
-                if m != None:
-                    _logger.debug("Found stage %s, %s" % (m.group(2), m.group(3)))
-                    if m.group(2) == "started":
-                        self.start_stage(m.group(1), m.group(3))
+                _logger.debug("Searching stage")
+                m_match = match_stage.match(line)
+                _logger.debug(m_match)
+                if m_match != None:
+                    _logger.debug("Found stage %s, %s" % (m_match.group(2), m_match.group(3)))
+                    if m_match.group(2) == "started":
+                        self.start_stage(m_match.group(1), m_match.group(3))
                     else:                        
                         component_name = None  
                         cmdline = None
                         chdir = None
                         content = StringIO.StringIO()
-                        self.end_stage(m.group(1), m.group(3))
+                        self.end_stage(m_match.group(1), m_match.group(3))
                 else:
                     _logger.debug("Searching for component")
-                    m = match_component_start.match(line)
-                    if  m != None:
-                        _logger.debug("Found component: %s" % m.group(2))
-                        component_name = m.group(2)
+                    m_match = match_component_start.match(line)
+                    if  m_match != None:
+                        _logger.debug("Found component: %s" % m_match.group(2))
+                        component_name = m_match.group(2)
             else:
                 _logger.debug("Searching for component end")
-                m = match_component_finished.match(line)
-                if m != None:
+                m_match = match_component_finished.match(line)
+                if m_match != None:
                     self.task(component_name, cmdline, chdir, content.getvalue())
-                    component_name = None  
+                    component_name = None
                     cmdline = None
                     chdir = None
-                    content = StringIO.StringIO()                
+                    content = StringIO.StringIO()
                 if cmdline == None:
                     _logger.debug("Searching for component command line")
-                    m = match_component_cmdline.match(line)
-                    if m != None:
-                        _logger.debug("Found command line: %s" % m.group(1))
-                        cmdline = m.group(1)
+                    m_match = match_component_cmdline.match(line)
+                    if m_match != None:
+                        _logger.debug("Found command line: %s" % m_match.group(1))
+                        cmdline = m_match.group(1)
                 else:
                     _logger.debug("Searching for component dir")
                     if chdir == None:
-                        m = match_component_chdir.match(line)
-                        if m != None:
-                            chdir = m.group(1)
+                        m_match = match_component_chdir.match(line)
+                        if m_match != None:
+                            chdir = m_match.group(1)
                             if chdir == None:
-                                chdir = m.group(2)
+                                chdir = m_match.group(2)
                             _logger.debug("Found dir: %s" % chdir)
                             continue
-                    if not line.startswith("++ ") and not line.startswith("+++ "):                            
+                    if not line.startswith("++ ") and not line.startswith("+++ "):
                         _logger.debug("Adding content")
                         content.write(line + "\n")
                 
--- a/buildframework/helium/sf/python/pythoncore/lib/symbian/raptor.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/symbian/raptor.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,7 +16,7 @@
 #
 #Description:
 #===============================================================================
-
+""" raptor """
 
 import os
 import fileutils
--- a/buildframework/helium/sf/python/pythoncore/lib/symrec.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/symrec.py	Wed Jun 16 16:51:40 2010 +0300
@@ -30,6 +30,7 @@
 logging.basicConfig(level=logging.INFO)
 
 def _cleanup_list(input):
+    """cleanup  list"""
     result = []
     for chars in input:
         if chars is not None and chars.strip() != "":
@@ -92,10 +93,12 @@
     
     @property
     def name(self):
+        """name"""
         return self.__xml.getAttribute('name')
     
     @property
     def files(self):
+        """files"""
         result = []
         for filen in self.__xml.getElementsByTagName('file'):
             result.append(filen.getAttribute('name'))
@@ -103,6 +106,7 @@
 
     @property
     def instructions(self):
+        """instructions"""
         result = []
         for instr in self.__xml.getElementsByTagName('instructions'):
             result.append(instr.getAttribute('name'))
@@ -147,7 +151,7 @@
             self._releaseDetails.appendChild(releaseID)
             
             #           service
-            serv = self._xml.createElement(u'service')            
+            serv = self._xml.createElement(u'service')
             xml_setattr(serv, 'name', unicode(service))
             releaseID.appendChild(serv)
             #           product
@@ -223,6 +227,7 @@
         
 
     def keys(self):
+        """keys"""
         keys = []
         for pkg in self._releaseFiles.getElementsByTagName('package'):
             keys.append(pkg.getAttribute('name'))
@@ -276,10 +281,11 @@
         return None
 
     def getVariantPackage(self, variant_name):
+        """get variant package"""
         for variant in self._xml.getElementsByTagName('variant'):
             if variant.getAttribute('name').lower() == variant_name.lower():
-                for x in variant.getElementsByTagName('file'):
-                    return x.getAttribute('name')        
+                for xxx in variant.getElementsByTagName('file'):
+                    return xxx.getAttribute('name')
 
     def xml(self):
         """ Returning the XML as a string. """
@@ -297,8 +303,8 @@
     def servicepacks(self):
         """ Getting the service pack names. """
         result = []
-        for sp in self._releaseInformation.getElementsByTagName('servicePack'):
-            result.append(ServicePack(sp))
+        for spack in self._releaseInformation.getElementsByTagName('servicePack'):
+            result.append(ServicePack(spack))
         return result
 
     filename = property(lambda self:self._filename)
@@ -324,6 +330,7 @@
         for name in self.keys():
             fullname = os.path.join(self._filepath, name)                
             if os.path.exists(fullname):
+                LOGGER.info("Calculating the MD5 of " + fullname)
                 result = self[name]
                 result['md5checksum'] = unicode(fileutils.getmd5(fullname))
                 result['size'] = unicode(os.path.getsize(fullname))
@@ -343,9 +350,9 @@
         status = os.path.join(os.path.dirname(self._filename), 'HYDRASTATUS.xml')
         if os.path.exists(status):
             hydraxml = xml.dom.minidom.parse(open(status, "r"))
-            for t in hydraxml.getElementsByTagName('state')[0].childNodes:
-                if t.nodeType == t.TEXT_NODE:
-                    if t.nodeValue != 'Ready':
+            for t_name in hydraxml.getElementsByTagName('state')[0].childNodes:
+                if t_name.nodeType == t_name.TEXT_NODE:
+                    if t_name.nodeValue != 'Ready':
                         LOGGER.error("HYDRASTATUS.xml is not ready")
                         return False
         if checkPath:
@@ -378,13 +385,13 @@
                         LOGGER.error("%s md5checksum missmatch." % path)
                         return False
 
-        for sp in self.servicepacks:
-            for name in sp.files:
+        for spack in self.servicepacks:
+            for name in spack.files:
                 path = os.path.join(self.location, name)
                 if not os.path.exists(path):
                     LOGGER.error("%s doesn't exist." % path)
                     return False
-            for name in sp.instructions:
+            for name in spack.instructions:
                 path = os.path.join(self.location, name)
                 if not os.path.exists(path):
                     LOGGER.error("%s doesn't exist." % path)
@@ -431,6 +438,7 @@
         self.excludes = excludes
 
     def archives_to_tdd(self, metadata):
+        """archives"""
         tdd = "\t[\n"
         for name in metadata.keys():
             path_ = os.path.join(os.path.dirname(metadata.filename), name)
@@ -495,36 +503,40 @@
         return result
 
     def in_cache(self, metadatas, key):
+        """in cache"""
         for metadata in metadatas:
             if metadata[0] == key:
                 return True 
         return False
     
     def value_from_cache(self, metadatas, key):
+        """value from cache"""
         for metadata in metadatas:
             if metadata[0] == key:
                 return metadata[1]
         return None
     
     def load_cache(self):
+        """load cache"""
         metadatas = []
         if self.__cachefile is not None and os.path.exists(self.__cachefile):
-            f = open(self.__cachefile, "rb")
-            for row in csv.reader(f):
+            f_file = open(self.__cachefile, "rb")
+            for row in csv.reader(f_file):
                 if len(row) == 2:
                     metadatas.append([os.path.normpath(row[0]), row[1].lower() == "true"])
                 elif len(row) == 1:
                     # backward compatibility with old cache.
                     metadatas.append([os.path.normpath(row[0]), True])
-            f.close()
+            f_file.close()
         return metadatas
 
     def update_cache(self, metadatas):
+        """update cache"""
         if self.__cachefile is not None and os.path.exists(os.path.dirname(self.__cachefile)):
-            f = open(self.__cachefile, "wb")
-            writer = csv.writer(f)
+            f_file = open(self.__cachefile, "wb")
+            writer = csv.writer(f_file)
             writer.writerows(metadatas)
-            f.close()
+            f_file.close()
 
 class ValidateTicklerReleaseMetadata(ValidateReleaseMetadataCached):
     """ This class validate if a metadata file is stored in the correct location and
--- a/buildframework/helium/sf/python/pythoncore/lib/sysdef/__init__.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/sysdef/__init__.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,4 +16,4 @@
 #
 #Description:
 #===============================================================================
-
+""" python core library sysdef initialisation"""
--- a/buildframework/helium/sf/python/pythoncore/lib/sysdef/api.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/sysdef/api.py	Wed Jun 16 16:51:40 2010 +0300
@@ -554,7 +554,7 @@
         #TODO - handle duplicate names of different types
         if not self._cache.has_key(element.get_id()):
             self._cache[element.get_id()] = element
-            _logger.info('Adding SysDef element to cache: %s' % str(element))
+            #_logger.info('Adding SysDef element to cache: %s' % str(element))
         else:
             _logger.warning("Element already exists: %s" % element.name)
         
--- a/buildframework/helium/sf/python/pythoncore/lib/timeout_launcher.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/timeout_launcher.py	Wed Jun 16 16:51:40 2010 +0300
@@ -30,14 +30,15 @@
 
 
 # Platform
-windows = False
+_windows = False
 if sys.platform == "win32":
     import win32process
     import win32con
     import win32api
-    windows = True
+    _windows = True
 
 def main():
+    """main method """
     cmdarg = False
     cmdline = []
     timeout = None
@@ -64,36 +65,36 @@
             finish = time.time() + timeout
             timedout = False
             shell = True
-            if windows:
+            if _windows:
                 shell = False
-            p = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=shell)
-            while (p.poll() == None):
+            p_file = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=shell)
+            while (p_file.poll() == None):
                 if time.time() > finish:
                     timedout = True
                     break
                 time.sleep(1)
             if timedout:
                 print "ERROR: Application has timed out (timeout=%s)." % timeout
-                if windows:
+                if _windows:
                     try:
                         print "ERROR: Trying to kill the process..."
-                        handle = win32api.OpenProcess(True, win32con.PROCESS_TERMINATE, p.pid)
+                        handle = win32api.OpenProcess(True, win32con.PROCESS_TERMINATE, p_file.pid)
                         win32process.TerminateProcess(handle, -1)
                         print "ERROR: Process killed..."
                     except Exception, exc:
                         print "ERROR: %s" % exc
                 else:
                     # pylint: disable-msg=E1101
-                    os.kill(p.pid, 9)
+                    os.kill(p_file.pid, 9)
                 print "ERROR: exiting..."
                 raise Exception("Timeout exception.")
             else:
-                print p.communicate()[0]
-                sys.exit(p.returncode)
+                print p_file.communicate()[0]
+                sys.exit(p_file.returncode)
         else:
-            p = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
-            print p.communicate()[0]
-            sys.exit(p.returncode)
+            p_file = subprocess.Popen(' '.join(cmdline), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+            print p_file.communicate()[0]
+            sys.exit(p_file.returncode)
 
 if __name__ == '__main__':
     main()
\ No newline at end of file
--- a/buildframework/helium/sf/python/pythoncore/lib/unittestadditions.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/unittestadditions.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,9 +16,13 @@
 #
 #Description:
 #===============================================================================
+""" unit test additions"""
+
 
 import logging
-logger = logging.getLogger('unittestadditions')
+_logger = logging.getLogger('unittestadditions')
+
+# pylint: disable-msg=C0103
 
 class skip(object):
     """ Skip decorator. The decorated function will only be called
@@ -35,11 +39,13 @@
         self.shouldSkip = shouldSkip
         self.returns = returns
 
-    def __call__(self, f):
-        """ Returns the function f if  shouldSkip is False. Else a stub function is returned. """
+    def __call__(self, f_file):
+        """ Returns the function f_file if  shouldSkip is False. Else a stub function is returned. """
         def __skiptest(*args, **kargs):
-            logger.warning("Skipping test %s" % f.__name__)
+            """skip test"""
+            _logger.warning("Skipping test %s" % f_file.__name__)
             return self.returns
         if self.shouldSkip:
             return __skiptest
-        return f
+        return f_file
+# pylint: enable-msg=C0103
--- a/buildframework/helium/sf/python/pythoncore/lib/xmlhelper.py	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/python/pythoncore/lib/xmlhelper.py	Wed Jun 16 16:51:40 2010 +0300
@@ -16,6 +16,7 @@
 #
 #Description:
 #===============================================================================
+""" XML helper"""
 
 import re
 from xml.dom import Node
@@ -37,6 +38,6 @@
         name is a regular expression.
     """
     results = node_scan(node, name)
-    for subnode in node.childNodes:        
+    for subnode in node.childNodes:
         results.extend(recursive_node_scan(subnode, name))
     return results
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/data/diamonds-faults_compile.text.log	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,1 @@
+ERROR: This error must not affect the test.
--- a/buildframework/helium/tests/minibuilds/ats/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ats/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -38,27 +38,21 @@
     <property name="diamonds.path" value="/diamonds/builds/"/>
     
     <property name="enabled.ats" value="true" />
-
-	<property name="skip.ats.sending" value="true"/>
-		<property name="ats.image.type" value="variant" />
-		<property name="ats.product.name" value="" />
-		<property name="ats.email.list" value="" />
-		<property name="ats.plan.name" value="" />
-		<property name="ats.flashfiles.minlimit" value="2" />
-		<property name="ats.target.platform" value="armv5 urel" />
-		<property name="ats.script.type" value="import" />
-		<property name="ats.product.hwid" value="" />
-		<property name="ats.testrun.name" value="${build.id}_${ats.product.name}_${core.build.version}" />
-		<property name="ats.test.timeout" value="60" />
-		<property name="tsrc.data.dir" value="data_rom" />
-		<property name="ats.ctc.enabled" value="True" />
-		<property name="ats.ctc.host" value="10.11.3.2" />
-		<property name="ats.flashfiles.minlimit" value="2" />
-		
-		<property name="ta.flag.list" value="TA_M, TA_MU, TA_MMAPPFW,TA_MM"/>
+    <property name="skip.ats.sending" value="true"/>
+    <property name="ats.image.type" value="variant" />
+    <property name="ats.product.name" value="" />
+    
+    <property name="ats.script.type" value="import" />
+    <property name="ats.product.hwid" value="" />
+    
+    <property name="tsrc.data.dir" value="data_rom" />
+    <property name="ats.ctc.enabled" value="True" />
+    <property name="ats.ctc.host" value="10.11.3.2" />
+    
+    <property name="ta.flag.list" value="TA_M, TA_MU, TA_MMAPPFW,TA_MM"/>
     <property name="ido.build.filter" value="${ta.flag.list},dfs_build"/>
-    <property name="release.images.dir" value="Z:\output\variant_images" />
-		
+    <!--<property name="release.images.dir" value="Z:\output\variant_images" />-->
+    
     <!-- build configuration -->
     <property name="sysdef.configurations.list" value="helium_minibuild_ats_compile" />
     <path id="system.definition.files">
@@ -68,10 +62,10 @@
 <!--    
     <property name="build.system" value="ec-helium" />
 -->	
-	<property name="rvct.version" value="22_616"/>
-	<!-- Archiving configuration-->
-	<property name="zip.config.file" location="archive.cfg.xml"/>
-	<property name="zips.ee.spec.name" value="minibuild_archive"/>
+    <property name="rvct.version" value="22_616"/>
+    <!-- Archiving configuration-->
+    <property name="zip.config.file" location="archive.cfg.xml"/>
+    <property name="zips.ee.spec.name" value="minibuild_archive"/>
 	
     <!-- Synergy is not configured -->
     <property name="skip.password.validation" value="1"/>
@@ -121,15 +115,14 @@
         <au:assertMatches string="${arm.compiler.version}" pattern="RVCT2\.2 \[Build 616\]" casesensitive="false" multiline="true"/>
 
         <!-- Check if compile-main step did what expected... -->
-    	<au:assertFileExists file="${canonical.sysdef.file}"/>
+        <au:assertFileExists file="${canonical.sysdef.file}"/>
         <au:assertFileExists file="${build.drive}/Makefile"/>
         <au:assertFileExists file="${build.drive}/emake.data"/>
         <au:assertFileExists file="${build.log.dir}/${build.id}.helium_minibuild_compile_run_emake.bat"/>
-    	
-    	
-    	<!-- Checking the zip generation -->
-    	<au:assertFileExists file="${zips.build.dir}/s60_app_organizer_clock_binary.zip"/>
-    	<au:assertFileExists file="${zips.build.dir}/s60_app_organizer_clock.zip"/>    	
+        
+        <!-- Checking the zip generation -->
+        <au:assertFileExists file="${zips.build.dir}/s60_app_organizer_clock_binary.zip"/>
+        <au:assertFileExists file="${zips.build.dir}/s60_app_organizer_clock.zip"/>    	
     </target>
 
 
--- a/buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs-coverity/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -26,6 +26,11 @@
 	
 	<!-- Configuring raptor build system -->
 	<property name="build.system" value="sbs"/>
+	
+	<!-- Configuring get latest env. -->
+    <property name="s60.grace.service" value="s60_devices_sw" />
+    <property name="s60.grace.product" value="DFS7x.92" />
+    <property name="s60.grace.release" value="92_\d{6}_hw79" />
     
     <!-- enable coverity -->
     <property name="enabled.coverity" value="true"/>
--- a/buildframework/helium/tests/minibuilds/ido-sbs/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido-sbs/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -65,6 +65,12 @@
 
 	<import file="../ido/build.xml"/>
     <import file="build.sbsinput.ant.xml" />
+
+    <!-- We should defer the failure for raptor. -->
+    <hlm:signalInput id="raptorErrorSignalInput" failbuild="defer">
+        <hlm:notifierListRef refid="defaultFailNotifier" />
+    </hlm:signalInput>
+
 </project>
 
     
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ido/build.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -21,194 +21,200 @@
 ============================================================================
 -->
 <project name="minibuild.ido" default="help" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
-	<property environment="env" />
-	<import file="../site/${env.TEAM}.ant.xml" />
-	<dirname property="config.dir" file="${ant.file.minibuild.ido}" />
+    <property environment="env" />
+    <import file="../site/${env.TEAM}.ant.xml" />
+    <dirname property="config.dir" file="${ant.file.minibuild.ido}" />
 
-  <property name="data.drive.letter" value="E" />
-	<!-- Enable Helium internal assertion checking. -->
-	<property name="hlm.enable.asserts" value="1" />
+    <property name="data.drive.letter" value="E" />
+    <!-- Enable Helium internal assertion checking. -->
+    <property name="hlm.enable.asserts" value="1" />
 
-	<property name="build.name" value="minibuild_ido" />
-	<property name="build.family" value="test_minibuild_ido" />
-	<property name="major.version" value="0" />
-	<property name="minor.version" value="0" />
-	
-	<condition property="ccm.project.wa_path" value="${data.drive.letter}:\Build_${data.drive.letter}\${env.USERNAME}\ido_wa\${build.name}"  else="${build.name}\wa" > 
-	      <os family="windows"/>
-	</condition> 
-	<property name="ccm.enabled" value="true" />
+    <property name="build.name" value="minibuild_ido" />
+    <property name="build.family" value="test_minibuild_ido" />
+    <property name="major.version" value="0" />
+    <property name="minor.version" value="0" />
+    
+    <condition property="ccm.project.wa_path" value="${data.drive.letter}:\Build_${data.drive.letter}\${env.USERNAME}\ido_wa\${build.name}"  else="${build.name}\wa" > 
+          <os family="windows"/>
+    </condition> 
+    <property name="ccm.enabled" value="true" />
+    
+    <!-- CMT++ only runs on windows not linux machines -->
+    <condition property="enable.cmt" >
+        <os family="windows" />
+    </condition>
+    <!--property name="ido.name" value="test_cmt" /-->
 
 
-	<!-- build configuration -->
-	<property name="sysdef.configurations.list" value="helium_minibuild_ido" />
-	<path id="system.definition.files">
-		<fileset dir="${config.dir}" includes="sysdefs/*.sysdef.xml" />
-		<fileset dir="${ccm.project.wa_path}" includes="*/*/*/layers.sysdef.xml" />
-	</path>
+    <!-- build configuration -->
+    <property name="sysdef.configurations.list" value="helium_minibuild_ido" />
+    <path id="system.definition.files">
+        <fileset dir="${config.dir}" includes="sysdefs/*.sysdef.xml" />
+        <fileset dir="${ccm.project.wa_path}" includes="*/*/*/layers.sysdef.xml" />
+    </path>
 
 
-	<!-- Configuring the build system -->
-	<property name="build.system" value="ec-helium" />
-	<property name="rvct.version" value="22_686" />
+    <!-- Configuring the build system -->
+    <property name="build.system" value="ec-helium" />
+    <property name="rvct.version" value="22_686" />
 
-	<!-- Configuring get latest env. -->
-	<property name="s60.grace.service" value="S60RnD" />
-	<property name="s60.grace.product" value="pf_5250" />
-	<property name="s60.grace.release" value="pf_5250_\d{6}" />
+    <!-- Configuring get latest env. -->
+    <property name="s60.grace.service" value="S60RnD" />
+    <property name="s60.grace.product" value="pf_5250" />
+    <property name="s60.grace.release" value="pf_5250_\d{6}" />
     
-	<!-- matching mcl_200948_hw79 -->
-	<condition property="prep.root.dir" value="${data.drive.letter}:\Build_${data.drive.letter}\${env.USERNAME}\ido_ba\${build.name}" else="${build.name}\ido_ba" >
+    <!-- matching mcl_200948_hw79 -->
+    <condition property="prep.root.dir" value="${data.drive.letter}:\Build_${data.drive.letter}\${env.USERNAME}\ido_ba\${build.name}" else="${build.name}\ido_ba" >
         <os family="windows"/>
     </condition>
-	<!-- Synergy configuration -->
-	<property name="ccm.database" value="tr1ido" />
+    <!-- Synergy configuration -->
+    <property name="ccm.database" value="tr1ido" />
     <property name="ccm.project" value="MinibuildDomain-50_200832:project:tr1test1#1" />
-	<property name="prep.delivery.file" location="config/delivery.xml" />
-	<property name="publish.ccm.folder" value="tr1ido#2311" />
+    <property name="prep.delivery.file" location="config/delivery.xml" />
+    <property name="publish.ccm.folder" value="tr1ido#2311" />
 
 
-	<!-- Synergy is not configured -->
-	<property name="skip.password.validation" value="1" />
+    <!-- Synergy is not configured -->
+    <property name="skip.password.validation" value="1" />
 
-	<!-- IDO robot configuration -->
-	<property name="do.robot.release" value="MinibuildDomain" />
-	<tstamp>
-		<format property="ido.robot.tstamp" pattern="yyyyMMddhhmmss" />
-	</tstamp>
-	<property name="s60.build.robot.path" location="${build.drive}/shared_drive/s60robot/${build.name}/${ido.robot.tstamp}" />
+    <!-- IDO robot configuration -->
+    <property name="do.robot.release" value="MinibuildDomain" />
+    <tstamp>
+        <format property="ido.robot.tstamp" pattern="yyyyMMddhhmmss" />
+    </tstamp>
+    <property name="s60.build.robot.path" location="${build.drive}/shared_drive/s60robot/${build.name}/${ido.robot.tstamp}" />
 
-	<import file="hack-test.ant.xml" />
-	<import file="${helium.dir}/helium.ant.xml" />
+    <import file="hack-test.ant.xml" />
+    <import file="${helium.dir}/helium.ant.xml" />
     <import file="config/stages_config.ant.xml" />
 
-	<!-- Run the full sequence of target for the minibuild. ,mini-build-prep,compile-main,zip-ee,mini-build-check-->
-	<target name="do-mini-build" depends="ido-update-build-area,
+    <!-- Run the full sequence of target for the minibuild. ,mini-build-prep,compile-main,zip-ee,mini-build-check-->
+    <target name="do-mini-build" depends="ido-update-build-area,
                                             flag-ba-for-deletion,
-    										mini-build-cleanup,
-    										ido-build,
-                							check-diamonds,
-    	                                    mini-build-check,
-    										run-hack" />
+                                            mini-build-cleanup,
+                                            ido-build,
+                                            check-diamonds,
+                                            mini-build-check,
+                                            run-hack" />
 
 
-	<!--ant code coverage for mini-builds-->
-	<target name="mini-build">
+    <!--ant code coverage for mini-builds-->
+    <target name="mini-build">
     <antcall target="database">
         <param name="home.files.only" value="false"/>
     </antcall>
-		<mkdir dir="${helium.build.dir}/temp" />
-		<property name="config.temp.build.dir" location="${config.dir}/build" />
-		<hlm:coveragerecord name="${helium.build.dir}/temp/test.minibuild-ido.xml" action="start" />
-		<runtarget target="do-mini-build" />
-		<hlm:coveragerecord name="${helium.build.dir}/temp/test.minibuild-ido.xml" action="stop" />
-		<fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.txt.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.txt">
-			<data expandProperties="yes">
+        <mkdir dir="${helium.build.dir}/temp" />
+        <property name="config.temp.build.dir" location="${config.dir}/build" />
+        <hlm:coveragerecord name="${helium.build.dir}/temp/test.minibuild-ido.xml" action="start" />
+        <runtarget target="do-mini-build" />
+        <hlm:coveragerecord name="${helium.build.dir}/temp/test.minibuild-ido.xml" action="stop" />
+        <fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.txt.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.txt">
+            <data expandProperties="yes">
                 doc: xml(${helium.build.dir}/temp/test.minibuild-ido.xml)
                 database: xml(${database.file})
             </data>
-		</fmpp>
-		<loadfile srcfile="${helium.build.dir}/temp/test_minibuild.txt" property="ant.coverage.summary" />
-		<echo>
+        </fmpp>
+        <loadfile srcfile="${helium.build.dir}/temp/test_minibuild.txt" property="ant.coverage.summary" />
+        <echo>
 The summary of Ant code coverage:
 
 ${ant.coverage.summary}</echo>
-		<fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.html.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.html">
-			<data expandProperties="yes">
-            	doc: xml(${helium.build.dir}/temp/test.minibuild-ido.xml)
+        <fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.html.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.html">
+            <data expandProperties="yes">
+                doc: xml(${helium.build.dir}/temp/test.minibuild-ido.xml)
                 database: xml(${database.file})
-			</data>
-		</fmpp>
-	</target>
+            </data>
+        </fmpp>
+    </target>
 
 
-	<!-- Preparing the content on top of the env -->
-	<target name="ido-50-build" depends="ido-build-prep,compile-main,build-log-summary,render-internal-exports,update-policy-src-reference,render-validate-policy,localisation-50-build,ido-codescanner,ats-test,publish-tasks-to-folder,ido-sources-to-s60-build-robot" />
-	<target name="ido-build-prep" depends="ido-configure-prep,init,check-tool-dependencies,log-build-env,set-arm-version,check-free-space,diamonds,do-prep-work-area,ido-prep-clean,ido-prep-copy,create-bom" />
+    <!-- Preparing the content on top of the env -->
+    <target name="ido-50-build" depends="ido-build-prep,compile-main,build-log-summary,render-internal-exports,update-policy-src-reference,render-validate-policy,check-sf-source-header,localisation-50-build,ido-codescanner,ats-test,publish-tasks-to-folder,ido-sources-to-s60-build-robot" />
+    <target name="ido-build-prep" depends="ido-configure-prep,init,check-tool-dependencies,log-build-env,set-arm-version,check-free-space,diamonds,do-prep-work-area,ido-prep-clean,ido-prep-copy,create-bom" />
 
-	<!-- needed to defined skip.prep-drive -->
-	<target name="ido-configure-prep">
-		<property name="skip.prep-drive" value="true" />
-	</target>
+    <!-- needed to defined skip.prep-drive -->
+    <target name="ido-configure-prep">
+        <property name="skip.prep-drive" value="true" />
+    </target>
 
-	<!-- real IDO use this to switch branch target. -->
-	<target name="ido-build">
-		<runtarget target="ido-50-build" />
-	</target>
+    <!-- real IDO use this to switch branch target. -->
+    <target name="ido-build">
+        <runtarget target="ido-50-build" />
+    </target>
 
 
-	<target name="check-diamonds">
-		<!--loadfile srcfile="${build.log.dir}/diamonds-start.log.xml" property="diamonds.log.start" />
-		<echo>${diamonds.log.start}</echo-->
-		<!--loadresource property="diamonds.log.start.output">
-			<url url="${diamonds.build.url}?fmt=xml" />
-		</loadresource-->
-		<!--echo>${diamonds.log.start.output}</echo-->
+    <target name="check-diamonds">
+        <!--loadfile srcfile="${build.log.dir}/diamonds-start.log.xml" property="diamonds.log.start" />
+        <echo>${diamonds.log.start}</echo-->
+        <!--loadresource property="diamonds.log.start.output">
+            <url url="${diamonds.build.url}?fmt=xml" />
+        </loadresource-->
+        <!--echo>${diamonds.log.start.output}</echo-->
         <xmlvalidate lenient="yes">
-        	<fileset dir="${build.log.dir}">
+            <fileset dir="${build.log.dir}">
                 <include name="diamonds-finish.xml"/>
                 <include name="diamonds-full-results.xml"/>
                 <include name="diamonds-start.log.xml"/>
-        		<include name="check-tool-dependencies.xml"/>
-        		<include name="compile-main.xml"/>
-        		<include name="create-bom.xml"/>
-        		<include name="build-time.xml"/>
-        	</fileset>
+                <include name="check-tool-dependencies.xml"/>
+                <include name="compile-main.xml"/>
+                <include name="create-bom.xml"/>
+                <include name="build-time.xml"/>
+            </fileset>
         </xmlvalidate>
-	</target>
+    </target>
 
-	<target name="mini-build-cleanup">
-		<delete verbose="true" includeemptydirs="true" failonerror="false">
-			<fileset dir="${build.drive}/" casesensitive="false">
-				<include name="makefile" />
-				<include name="*.mk" />
-				<include name="ecloud_tmp_*/**" />
-				<include name="emake.*" />
-				<include name="epoc32/build/**" />
-				<include name="epoc32/rombuild/*/**" />
-				<include name="output/**" />
-				<include name="timestart.txt" />
-				<include name="timestop.txt" />
-			</fileset>
-		</delete>
-	</target>
+    <target name="mini-build-cleanup">
+        <delete verbose="true" includeemptydirs="true" failonerror="false">
+            <fileset dir="${build.drive}/" casesensitive="false">
+                <include name="makefile" />
+                <include name="*.mk" />
+                <include name="ecloud_tmp_*/**" />
+                <include name="emake.*" />
+                <include name="epoc32/build/**" />
+                <include name="epoc32/rombuild/*/**" />
+                <include name="output/**" />
+                <include name="timestart.txt" />
+                <include name="timestop.txt" />
+            </fileset>
+        </delete>
+    </target>
 
 
-	<target name="mini-build-check">
-		<!-- Check if prep has set some prop correctly... -->
-		<!-- remember to update the selection by the environment variable in hlm.bat when switching to other compiler version -->
-		<echo>'${arm.compiler.version}'</echo>
-		<au:assertMatches string="${arm.compiler.version}" pattern="RVCT2\.2 \[Build 686\]" casesensitive="false" multiline="true" />
+    <target name="mini-build-check">
+        <!-- Check if prep has set some prop correctly... -->
+        <!-- remember to update the selection by the environment variable in hlm.bat when switching to other compiler version -->
+        <echo>'${arm.compiler.version}'</echo>
+        <au:assertMatches string="${arm.compiler.version}" pattern="RVCT2\.2 \[Build 686\]" casesensitive="false" multiline="true" />
 
-		<!-- Check if compile-main step did what expected... -->
-		<au:assertFileExists file="${canonical.sysdef.file}" />
-		<if>
-			<or>
-				<isset property="build.system.ec-helium" />
-				<isset property="build.system.ec" />
-			</or>
-			<then>
-				<au:assertFileExists file="${build.drive}/helium_minibuild_ido.make" />
-				<au:assertFileExists file="${build.drive}/helium_minibuild_ido_clean.make" />
-				<au:assertFileExists file="${build.drive}/emake.data" />
+        <!-- Check if compile-main step did what expected... -->
+        <au:assertFileExists file="${canonical.sysdef.file}" />
+        <if>
+            <or>
+                <isset property="build.system.ec-helium" />
+                <isset property="build.system.ec" />
+            </or>
+            <then>
+                <au:assertFileExists file="${build.drive}/helium_minibuild_ido.make" />
+                <au:assertFileExists file="${build.drive}/helium_minibuild_ido_clean.make" />
+                <au:assertFileExists file="${build.drive}/emake.data" />
 
-				<au:assertFileExists file="${temp.build.dir}/${build.id}.helium_minibuild_ido_run_emake.bat" />
-				<au:assertFileExists file="${temp.build.dir}/${build.id}.helium_minibuild_ido_clean_run_emake.bat" />
-			</then>
-		</if>
-		
-		<!-- Check if stagelogging step did what expected... -->
-		<au:assertFileExists file="${build.log.dir}/${build.id}_ido_prep.ant.log" />
-		<au:assertFileExists file="${build.log.dir}/${build.id}_compile.ant.log" />
-		<au:assertFileExists file="${build.log.dir}/${build.id}_test.ant.log" />
-		<au:assertFileExists file="${build.log.dir}/${build.id}_localisation.ant.log" />
-		
-	</target>
+                <au:assertFileExists file="${temp.build.dir}/${build.id}.helium_minibuild_ido_run_emake.bat" />
+                <au:assertFileExists file="${temp.build.dir}/${build.id}.helium_minibuild_ido_clean_run_emake.bat" />
+            </then>
+        </if>
+        
+        <!-- Check if stagelogging step did what expected... -->
+        <au:assertFileExists file="${build.log.dir}/${build.id}_ido_prep.ant.log" />
+        <au:assertFileExists file="${build.log.dir}/${build.id}_compile.ant.log" />
+        <au:assertFileExists file="${build.log.dir}/${build.id}_test.ant.log" />
+        <au:assertFileExists file="${build.log.dir}/${build.id}_localisation.ant.log" />
+        
+    </target>
 
 
-	<target name="update-policy-src-reference" depends="ido-create-ado-mapping">
-		<hlm:iniKeys2Path ini="${ado.mapping.file}" pathid="reference.policy.path.list"/>
-	</target>
+    <target name="update-policy-src-reference" depends="ido-create-ado-mapping">
+        <hlm:iniKeys2Path ini="${ado.mapping.file}" pathid="reference.policy.path.list"/>
+    </target>
 
 </project>
 
--- a/buildframework/helium/tests/minibuilds/ido/config/delivery.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/config/delivery.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -29,14 +29,17 @@
 		<set name="show.conflicts" value="true" />
 		<set name="fix.missing.baselines" value="true" />
 		<set name="replace.subprojects" value="true" />
-		
+
 
 
         <set name="use.reconfigure.template" value="true" />
-        <set name="purpose" value="Insulated Development" />
+        <set name="purpose" value="Integration Testing" />
         <set name="release" value="MinibuildDomain/next" />
 
-        <config name="${ccm.project}" type="checkout"/>
+        <config name="${ccm.project}" type="checkout">
+            <set name="releasable" value="true" />      
+            <set name="baseline.release" value="MinibuildDomain/92_201019" />
+        </config>
         
     </config>
 </build>
\ No newline at end of file
--- a/buildframework/helium/tests/minibuilds/ido/sysdefs/minibuild_ido.sysdef.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tests/minibuilds/ido/sysdefs/minibuild_ido.sysdef.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -20,7 +20,7 @@
 
 ============================================================================
 -->
-<!DOCTYPE SystemDefinition SYSTEM "http://helium.nmp.nokia.com/trac/browser/helium/trunk/helium/tools/common/dtd/sysdef_1_4_0.dtd?format=raw">
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd">
 <SystemDefinition name="helium_minibuild_compile" schema="1.4.0">
 	<systemModel>
 		<layer name="mw_layer"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/ido/sysdefs/sysdef_1_4_0.dtd	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/prep-wa-synergy71/build.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="minibuild.prep-wa-synergy71" default="help" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium" basedir="..\ido">
+    <property environment="env"/>
+	<!--property name="config.temp.build.dir" location="${ant.file.minibuild.ido-sbs}/../build"/ -->
+	
+	<!-- Configuring raptor build system -->
+	<property name="build.system" value="ebs"/>
+
+    <!-- Configuring get latest env. -->
+    <property name="s60.grace.service" value="s60_devices_sw" />
+    <property name="s60.grace.product" value="DFS7x.92" />
+    <property name="s60.grace.release" value="92_\d{6}_hw79" />
+    
+    
+    <!-- Synergy configuration -->
+	<property name="ccm.database" value="sa1bm1" />
+    <property name="ccm.project" value="MinibuildDomain-1_20100428" />
+	<property name="publish.ccm.folder" value="sa1bm1#36" />
+
+
+    <!-- Run the full sequence of target for the minibuild. ,mini-build-prep,compile-main,zip-ee,mini-build-check-->
+    <!--<target name="do-mini-build" depends="mini-build-cleanup,
+    										compile-main"/>-->
+
+	<property name="build.name" value="minibuild_ido_synergy71" />
+    <property name="build.family" value="test_minibuild_ido_synergy71" />
+
+    <!--ant code coverage for mini-builds-->
+	<target name="mini-build">
+	    <antcall target="database">
+            <param name="home.files.only" value="false"/>
+        </antcall>
+        <mkdir dir="${helium.build.dir}/temp" />
+		<property name="config.temp.build.dir" location="${config.dir}/build" />
+		<hlm:coveragerecord name="${helium.build.dir}/temp/test.minibuild-ido.xml" action="start" />
+            <runtarget target="do-mini-build" />
+		<hlm:coveragerecord name="${helium.build.dir}/temp/test.minibuild-ido.xml" action="stop" />
+		<fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.txt.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.txt">
+			<data expandProperties="yes">
+                doc: xml(${helium.build.dir}/temp/test.minibuild-ido.xml)
+                database: xml(${database.file})
+            </data>
+		</fmpp>
+		<loadfile srcfile="${helium.build.dir}/temp/test_minibuild.txt" property="ant.coverage.summary" />
+		<echo>
+The summary of Ant code coverage:
+
+${ant.coverage.summary}</echo>
+		<fmpp sourcefile="${helium.dir}/tools/common/templates/coveragerecord.html.ftl" outputfile="${helium.build.dir}/temp/test_minibuild.html">
+			<data expandProperties="yes">
+            	doc: xml(${helium.build.dir}/temp/test.minibuild-ido.xml)
+                database: xml(${database.file})
+			</data>
+		</fmpp>
+		
+		<au:assertFileExists file="${build.log.dir}/prep/${build.id}_bom.log" />
+		<au:assertFileExists file="${build.log.dir}/prep/${build.id}_bom.txt" />
+		<au:assertFileExists file="${build.log.dir}/prep/${build.id}_ccm_get_input.log" />
+		
+	</target>
+	
+	<target name="do-mini-build" depends="prep,publish-tasks-to-folder" />
+	
+	<!-- Stubbing few targets for easy testing  ... -->
+	<target name="prep-drive" depends="build-number" />
+	<target name="dragonfly-prep-drive" />
+	
+	<import file="../ido/build.xml"/>
+    
+
+</project>
+
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tests/minibuilds/prep-wa-synergy71/hlm.bat	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,20 @@
+@echo off
+
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: 
+rem
+
+..\..\..\hlm.bat %*
+
--- a/buildframework/helium/tools/common/common.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/common.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -350,37 +350,42 @@
         <delete dir="${helium.build.dir}/python"/>
         <delete dir="${helium.build.dir}/beanshell"/>
         <delete file="${helium.build.dir}/test_jython.xml"/>
+        <mkdir dir="${helium.build.dir}/report/antlint" />
         <hlm:antlint>
-            <fileset id="antlint.files" dir="${helium.dir}">
+            <fileset id="antlint.files" dir="${helium.dir}/tools">
                 <include name="**/*.ant.xml"/>
                 <include name="**/build.xml"/>
                 <include name="**/*.antlib.xml"/>
                 <exclude name="tests/**"/>
+                <exclude name="**/test/test_*.xml"/>
                 <exclude name="external/**"/>
                 <exclude name="**/tests/data/**"/>
                 <exclude name="build/**"/>
             </fileset>
-            <checker name="CheckTabCharacter" severity="error" />
-            <checker name="CheckPropertyName" severity="warning">([a-z0-9[\\d\\_\\.\\@\\{\\}\\$]]*)</checker>
-            <checker name="CheckTargetName" severity="warning">([a-z0-9[\\d\\-]]*)</checker>
-            <checker name="CheckIndentation" severity="error"/>
-            <checker name="CheckPresetDefMacroDefName" severity="warning">([a-z0-9][a-zA-Z0-9]*)</checker>       
-            <checker name="CheckProjectName" severity="warning">([a-z0-9[\\d\\.\\_\\-]]*)</checker>
-            <checker name="CheckDescription" severity="warning"/>
-            <checker name="CheckFileName" severity="warning" >^build.xml$|ant.xml$|antlib.xml$</checker>
-            <checker name="CheckRunTarget" severity="warning"/>
-            <checker name="CheckAntCall" severity="warning"/>
-            <checker name="CheckScriptSize" severity="warning"/>
-            <checker name="CheckUseOfIfInTargets" severity="warning"/>
-            <checker name="CheckJepJythonScript" severity="error" />
-            <checker name="CheckPropertiesInDataModel" severity="warning"/>
-            <checker name="CheckScriptCondition" severity="warning"/>
-            <checker name="CheckPythonTasks" severity="warning"/>
-            <checker name="CheckUseOfEqualsTask" severity="warning"/>
-            <checker name="CheckScriptDefNameAttributes" severity="error"/>
-            <checker name="CheckScriptDefStyle" severity="warning"/>
-            <checker name="CheckScriptDef" severity="error"/>
-            <checker name="CheckDuplicateNames" severity="warning"/>
+            <hlm:checkTabCharacter severity="error" enabled="true"/>
+            <hlm:checkPropertyName severity="warning" enabled="true" regexp="([a-z0-9[\\d\\_\\.\\@\\{\\}\\$]]*)" />
+            <hlm:checkTargetName severity="warning" enabled="true" regexp="([a-z0-9[\\d\\-]]*)" />
+            <hlm:checkIndentation severity="error" enabled="true"/>
+            <hlm:checkPresetDefMacroDefName severity="warning" enabled="true" regexp="([a-z0-9][a-zA-Z0-9]*)" />       
+            <hlm:checkProjectName severity="warning" enabled="true" regexp="([a-z0-9[\\d\\.\\_\\-]]*)" />
+            <hlm:checkDescription severity="warning" enabled="true"/>
+            <hlm:checkFileName severity="warning" enabled="true" regexp="^build.xml$|ant.xml$|antlib.xml$" />
+            <hlm:checkRunTarget severity="warning" enabled="true"/>
+            <hlm:checkAntCall severity="warning" enabled="true"/>
+            <hlm:checkScriptSize severity="warning" enabled="true"/>
+            <hlm:checkUseOfIfInTargets severity="warning" enabled="true"/>
+            <hlm:checkJythonScript severity="error" enabled="true" outputDir="${helium.build.dir}/jep"/>
+            <hlm:checkScriptCondition severity="warning" enabled="true" outputDir="${helium.build.dir}/scriptcondition"/>
+            <hlm:checkPythonTasks severity="warning" enabled="true" outputDir="${helium.build.dir}/python"/>
+            <hlm:checkUseOfEqualsTask severity="warning" enabled="true"/>
+            <hlm:checkScriptDefNameAttributes severity="error" enabled="true"/>
+            <hlm:checkScriptDefStyle severity="warning" enabled="true"/>
+            <hlm:checkScriptDef severity="error" enabled="true" outputDir="${helium.build.dir}/beanshell"/>
+            <hlm:checkDuplicateNames severity="warning" enabled="true"/>
+            
+            <!-- Reporters -->
+            <hlm:antlintCheckstyleReporter file="${helium.build.dir}/report/antlint/antlint_report.xml" />
+            <hlm:antlintConsoleReporter />            
         </hlm:antlint>
         <fileset id="jep.files" dir="${helium.build.dir}">
             <include name="jep/**/*.py"/>
--- a/buildframework/helium/tools/common/common.antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/common.antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -50,15 +50,13 @@
         </sequential>
     </macrodef>
 
-    <!--
-        This macro generate a file that contains a list of path from a path structure:
-        <pre>
+    <!-- This macro generate a file that contains a list of path from a path structure.
+
         <hlm:pathToFileListMacro file="output.lst">
             <path>
                 <pathelement path="${helium.dir}"/>
             </path>
         </hlm:pathToFileListMacro> 
-        </pre>
     -->
     <scriptdef name="pathToFileListMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="file"/>
@@ -79,18 +77,16 @@
 
     
    
-    <!-- This Macro is a wrapper to command line tool 
-        Currently supported command line tools are
-        configuration tool and
-        sbs tool
-        Usage: 
-            name - name of the tool:
-            toolvarset - reference id for variables to be passed to the tool
-        <pre>
+    <!-- This Macro is a wrapper to command line tool.
+    
+    Currently supported command line tools are the configuration tool and sbs tool.
+    Usage: 
+    * name - name of the tool
+    * toolvarset - reference id for variables to be passed to the tool.
+        
         <hlm:toolMacro name="configuration">
             <hlm:toolvarset refid="cnftool.conf.50"/>
         </hlm:toolMacro>
-        </pre>
     -->
     <scriptdef name="toolMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <element name="toolvarset" classname="com.nokia.helium.core.ant.types.VariableSet"/>
@@ -179,6 +175,7 @@
 ]]>
     </scriptdef>
 
+    
     <!-- This task allow to dump the content of a text file to the shell. -->
     <scriptdef name="echoFileMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="file"/>
@@ -196,6 +193,7 @@
         ]]>
     </scriptdef>
     
+    
     <!-- This task create the herder information in the symbian log file -->
     <scriptdef name="symbianLogHeaderMacro" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="config"/>
@@ -205,13 +203,13 @@
 log2xml.symbian_log_header(self, attributes.get('config'), attributes.get('command'), attributes.get('dir'))
     </scriptdef>
 
+    
     <!-- This task create the footer information in the symbian log file -->
     <scriptdef name="symbianLogFooterMacro" language="jython" uri="http://www.nokia.com/helium">
 import log2xml
 log2xml.symbian_log_footer(self)
     </scriptdef>
 
-
     
     <!-- A generic assert macro similar to AntUnit "assertTrue". -->
     <macrodef name="assert" uri="http://www.nokia.com/helium">
@@ -268,6 +266,7 @@
         </sequential>
     </macrodef>
 
+    
     <!-- A generic assert macro similar to AntUnit "assertPropertySet". -->
     <macrodef name="assertPropertySet" uri="http://www.nokia.com/helium">
         <attribute name="property"/>
@@ -293,7 +292,6 @@
         </sequential>
     </macrodef>
 
-
     
     <!-- Script definition to collect target dependencies -->
     <scriptdef name="dependencies" language="jython" uri="http://www.nokia.com/helium">
@@ -363,6 +361,7 @@
 output.close()
     ]]></scriptdef>
     
+    
     <!-- Reads password from .netrc file for a specific type of service. -->
     <scriptdef name="netrcPasswordMacro" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="output-prop"/>
@@ -389,6 +388,7 @@
         ]]>
     </scriptdef>
 
+    
     <!-- Reads user name from .netrc file for a specific type of service. -->
     <scriptdef name="netrcUsernameMacro" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="output-prop"/>
@@ -415,6 +415,7 @@
         ]]>
     </scriptdef>
      
+    
     <!-- Check availability of synergy. -->   
     <scriptdef  name="ccmAvailableMacro" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="resultproperty"/>
@@ -462,8 +463,9 @@
 self.log("Result: %s" % attributes.get('resultproperty'))
 project.setProperty(str(attributes.get('resultproperty')), str(result))
         ]]>
-     </scriptdef>
+    </scriptdef>
 
+    
     <macrodef name="signalMacro" uri="http://www.nokia.com/helium">
         <attribute name="logfile"/>
         <attribute name="phase" default=""/>
@@ -519,6 +521,7 @@
         </sequential>
     </macrodef>
 
+    
     <!-- A simple test macro -->
     <macrodef name="fooMacro" uri="http://www.nokia.com/helium">
         <sequential>
@@ -571,6 +574,7 @@
         ]]>
     </scriptdef>
     
+    
     <!-- unsubst task, will unsubst a given drive. -->
     <scriptdef name="unsubst" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="drive"/>
@@ -587,18 +591,23 @@
     else:
         failonerror = False
     if drive == None or len(str(drive)) != 2:
-        raise Exception("'drive' attribute is missing or invalid. " + str(drive))
-    drive = str(drive)
-    try:
-        self.log(str("Unsubsting %s..." % drive))
-        fileutils.unsubst(drive)
-    except Exception, e:
         if failonerror:
-            raise e
+            raise Exception("'drive' attribute is missing or invalid: " + str(drive))
         else:
-            self.log(str("Error: %s" % e))
+            self.log("Drive doesn't need unsubsting: " + str(drive))
+    else:
+        drive = str(drive)
+        try:
+            self.log(str("Unsubsting %s..." % drive))
+            fileutils.unsubst(drive)
+        except Exception, e:
+            if failonerror:
+                raise e
+            else:
+                self.log(str("Error: %s" % e))
     </scriptdef>
     
+    
     <!-- Touches the files in the paths given. -->
     <scriptdef name="touch" language="jython" uri="http://www.nokia.com/helium">
         <element name="path" type="path"/>
--- a/buildframework/helium/tools/common/docs.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/docs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -38,6 +38,12 @@
     -->
     <property name="api.doc.src.dir" location="${helium.dir}/doc/api" />
     
+    <!-- Location of documentation API source for RST.
+    @type string
+    @scope private
+    -->
+    <property name="api.rst.doc.src.dir" location="${helium.dir}/doc/api_rst" />
+    
     <!-- A list of source paths for RST documentation to be built. -->
     <resources id="textdoc.paths">
         <path>
@@ -81,7 +87,7 @@
     <target name="helium-api-dependency-images">
         <mkdir dir="${doc.build.dir}/api/helium"/>
         <mkdir dir="${doc.temp.dir}/api/helium"/>
-        <fmpp sourceRoot="${api.doc.src.dir}" includes="*.dot.ftl" outputRoot="${doc.temp.dir}/api/helium"
+        <fmpp sourceRoot="${api.rst.doc.src.dir}" includes="*.dot.ftl" outputRoot="${doc.temp.dir}/api/helium"
               replaceExtension="dot.ftl, dot">
             <data expandProperties="yes">
                 doc: xml(${database.file})
@@ -122,13 +128,27 @@
     </target>
     
     
+    <!-- Builds the RST files for the Helium API documentation. -->
+    <target name="helium-api-rst-docs">
+        <mkdir dir="${doc.temp.dir}/api/helium"/>
+        <fmpp sourceRoot="${api.rst.doc.src.dir}" excludes="*.dot.png,*.dot.ftl,**/*.dot,**/*.cmap,*.bak"
+              outputRoot="${doc.temp.dir}/api/helium"
+              replaceExtension="rst.ftl, rst">
+            <data expandProperties="yes">
+                ant: antProperties()
+                doc: xml(${database.file})
+            </data>
+        </fmpp>
+    </target>
+    
+    
     <!-- Builds the Helium API documentation. -->
     <target name="helium-apidocs" depends="clean-helium-apidocs,database,
-                    helium-api-dependency-images,helium-api-html-docs"/>
+                    helium-api-dependency-images,helium-api-rst-docs"/>
 
     
     <!-- Generate API documentation from the source code. -->
-    <target name="apidocs" depends="helium-apidocs,apidocs-search"/>
+    <target name="apidocs" depends="helium-apidocs"/>
     
     
     <!-- Macro to generate HTML docs from rst. -->
@@ -140,7 +160,7 @@
                 <resources-elements/>
                 <sequential>
                     <echo>Copying textdocs source directory: @{dir}</echo>
-                    <fmpp sourceRoot="@{dir}"
+                    <fmpp sourceRoot="@{dir}" excludes="**/*.bak"
                           outputRoot="@{destdir}" removeExtensions="ftl"
                           modes="copy(**/*.rst, **/*.html)">
                         <data expandProperties="yes">
@@ -321,6 +341,8 @@
             <fileset dir="${doc.build.dir}">
                 <include name="**/*"/>
                 <exclude name="api/helium/**/*"/>
+                <exclude name="doclet/**"/>
+                <exclude name="javadoc/**"/>
             </fileset>
             <fileset dir="${doc.temp.dir}"/>
             <fileset dir="${doc_search.temp.dir}"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/dtd/sysdef_2_0_1.dtd	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,100 @@
+ <!ELEMENT SystemDefinition ( systemModel?, SystemBuild? )>
+<!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED
+>
+<!ELEMENT systemModel (layer+)>
+<!ELEMENT layer (block* | collection*)*>
+<!ATTLIST layer
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+  levels NMTOKENS #IMPLIED
+  span CDATA #IMPLIED
+>
+<!ELEMENT block (subblock* | collection*)*>
+<!ATTLIST block
+  levels NMTOKENS #IMPLIED
+  span CDATA #IMPLIED
+  level NMTOKEN #IMPLIED
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+>
+<!ELEMENT subblock (collection)*>
+<!ATTLIST subblock
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+>
+<!ELEMENT collection (component)*>
+<!ATTLIST collection
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+  level NMTOKEN #IMPLIED
+>
+<!ELEMENT component (unit)*>
+<!ATTLIST component
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+  deprecated CDATA #IMPLIED
+  introduced CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  plugin (Y|N) "N"
+  filter CDATA #IMPLIED
+  class NMTOKENS #IMPLIED
+  supports CDATA #IMPLIED
+  purpose ( optional | mandatory | development ) "optional"
+>
+<!ELEMENT unit EMPTY >
+<!ATTLIST unit
+  mrp CDATA #IMPLIED
+  filter CDATA #IMPLIED
+  bldFile CDATA #IMPLIED
+  root CDATA #IMPLIED
+  version NMTOKEN #IMPLIED
+  prebuilt NMTOKEN #IMPLIED
+  late (Y|N) #IMPLIED
+  priority CDATA #IMPLIED
+>
+ <!ELEMENT SystemBuild (option* | target+ | targetList+ | list+ | configuration+)*>
+ <!ATTLIST SystemBuild schema CDATA #REQUIRED>
+ <!ELEMENT list (ref+)>
+ <!ATTLIST list
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT ref EMPTY>
+ <!ATTLIST ref item CDATA #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N ) #REQUIRED>
+ <!ELEMENT configuration (listRef+ | ref+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task (listRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT listRef EMPTY>
+ <!ATTLIST listRef list CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N ) #REQUIRED
+  targetParallel (Y | N ) "N">
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  root CDATA #IMPLIED
+  command CDATA #REQUIRED>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/dtd/sysdef_dtd_2_0_1.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : sysdef_dtd_2_0_0.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<!DOCTYPE SystemDefinition [
+ <!ELEMENT SystemDefinition ( systemModel?, SystemBuild? )>
+<!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED
+>
+<!ELEMENT systemModel (layer+)>
+<!ELEMENT layer (block* | collection*)*>
+<!ATTLIST layer
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+  levels NMTOKENS #IMPLIED
+  span CDATA #IMPLIED
+>
+<!ELEMENT block (subblock* | collection*)*>
+<!ATTLIST block
+  levels NMTOKENS #IMPLIED
+  span CDATA #IMPLIED
+  level NMTOKEN #IMPLIED
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+>
+<!ELEMENT subblock (collection)*>
+<!ATTLIST subblock
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+>
+<!ELEMENT collection (component)*>
+<!ATTLIST collection
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+  level NMTOKEN #IMPLIED
+>
+<!ELEMENT component (unit)*>
+<!ATTLIST component
+  name CDATA #REQUIRED
+  long-name CDATA #IMPLIED
+  deprecated CDATA #IMPLIED
+  introduced CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  plugin (Y|N) "N"
+  filter CDATA #IMPLIED
+  class NMTOKENS #IMPLIED
+  supports CDATA #IMPLIED
+  purpose ( optional | mandatory | development ) "optional"
+>
+<!ELEMENT unit EMPTY >
+<!ATTLIST unit
+  mrp CDATA #IMPLIED
+  filter CDATA #IMPLIED
+  bldFile CDATA #IMPLIED
+  root CDATA #IMPLIED
+  version NMTOKEN #IMPLIED
+  prebuilt NMTOKEN #IMPLIED
+  late (Y|N) #IMPLIED
+  priority CDATA #IMPLIED
+>
+ <!ELEMENT SystemBuild (option* | target+ | targetList+ | list+ | configuration+)*>
+ <!ATTLIST SystemBuild schema CDATA #REQUIRED>
+ <!ELEMENT list (ref+)>
+ <!ATTLIST list
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT ref EMPTY>
+ <!ATTLIST ref item CDATA #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N ) #REQUIRED>
+ <!ELEMENT configuration (listRef+ | ref+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task (listRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT listRef EMPTY>
+ <!ATTLIST listRef list CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N ) #REQUIRED
+  targetParallel (Y | N ) "N">
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  root CDATA #IMPLIED
+  command CDATA #REQUIRED>
+]>
+<SystemDefinition name="system_definition_2_0_1" schema="2.0.1">
+</SystemDefinition>
--- a/buildframework/helium/tools/common/helium_docs.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/helium_docs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -229,8 +229,16 @@
 
         <!-- Python API docs. -->
         <delete file="${docs.zip}"/>
+        <mkdir dir="${doc.build.dir}/javadoc" />
+        <mkdir dir="${doc.build.dir}/doclet" />
         <zip destfile="${docs.zip}">
-            <fileset dir="${doc.build.dir}" includes="**/*"/>
+            <fileset dir="${doc.build.dir}" >
+                <include name="**/*" />
+                <exclude name="doclet/*" />
+                <exclude name="javadoc/*" />
+            </fileset>
+            <zipfileset dir="${doc.build.dir}/javadoc" prefix="helium-antlib/api/javadoc"/>
+            <zipfileset dir="${doc.build.dir}/doclet" prefix="helium-antlib/api/doclet"/>
         </zip>
         <sshexec host="${documentation.host}"
                  username="${user.name}"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,62 @@
+<#--
+============================================================================ 
+Name        : build_roms_diamonds.xml.ftl
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+
+<#include "diamonds_header.ftl">
+
+<#assign db = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader', "${dbPath}") >
+
+<images>
+    <status></status>
+    <#list db['native:java.lang.String']['select DISTINCT component.component from component where component.component like \'%.fpsx\''] as component>
+    <image>
+    
+        <#assign status = "ok">
+        <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'ERROR\' and c.component=\'${component}\''] as m>
+        <#assign match = m.text?matches(".*?fpsx' - DOESN'T EXIST")>
+        <#if match>
+        <#assign status = "failed">
+        </#if>
+        </#list>
+        <status>${status}</status>
+        
+        <name>${component}</name>
+        <hardware>N/A</hardware>
+        <#assign type = component?matches("([^.]+)\\.fpsx")[0]>
+        <type>${type?groups[1]}</type>
+        <errors count="${db['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'ERROR\' and c.component=\'${component}\''][0]}">
+            <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'ERROR\' and c.component=\'${component}\''] as m>
+            <error>${m.text}</error>
+            </#list>
+        </errors>
+        <warnings count="${db['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'WARNING\' and c.component=\'${component}\''][0]}">
+            <#list db['jpa']['select m from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'WARNING\' and c.component=\'${component}\''] as m>
+            <warning>${m.text}</warning>
+            </#list>
+        </warnings>
+    </image>
+    </#list>
+</images>
+
+<#include "diamonds_footer.ftl">
+
+
+
--- a/buildframework/helium/tools/common/templates/diamonds/faults_metadata_orm.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/templates/diamonds/faults_metadata_orm.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -1,6 +1,6 @@
 <#--
 ============================================================================ 
-Name        : macro.ftl 
+Name        : faults_metadata_orm.ftl 
 Part of     : Helium 
 
 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -25,27 +25,32 @@
 
     <#assign table_info = pp.loadData('com.nokia.helium.metadata.ORMFMPPLoader',
         "${dbPath}") >
+
+    <build>    
+        <generated_files>${table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\''][0]}</generated_files>
+    </build>
+
     <faults>
-        <total severity="error">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\' and p.priority like \'%ERROR%\''][0]
-        + table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\' and w.missing = \'true\''][0]}</total>
-        <total severity="warning">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\' and p.priority like \'%WARNING%\''][0]}</total>
-        <total severity="warning_rvct_other">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\' and p.priority like \'%WARNING%\''][0]}</total>
+        <total severity="error">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\' and p.priority = \'ERROR\''][0]
+        + table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\' and w.missing = \'true\''][0]}</total>
+        <total severity="warning">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\' and p.priority = \'WARNING\''][0]}</total>
+        <total severity="warning_rvct_other">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\' and UPPER(p.priority) = \'WARNING\''][0]}</total>
         <!-- todo update to calculate the correct value -->
-        <total severity="warning_rvct_bad">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\' and p.priority like \'%REMARK%\''][0]}</total>
-    <#list table_info['native:java.lang.String']['select DISTINCT component.component from component INNER JOIN logfile ON logfile.logpath_id=component.logpath_id where logfile.path like \'%_compile%.log\' and logfile.path not like \'%_compile_clean%.log\''] as component>
+        <total severity="warning_rvct_bad">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.priority as p JOIN m.logFile as l where LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\' and UPPER(p.priority) = \'REMARK\''][0]}</total>
+    <#list table_info['native:java.lang.String']['select DISTINCT component.component from component INNER JOIN logfile ON logfile.logpath_id=component.logpath_id where logfile.path like \'%_compile.log\' and logfile.path not like \'%\\_clean\\_%compile.log\''] as component>
         <component>
             <name>${component}</name>
-            <total severity="error">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority) like \'%ERROR%\' and c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\''][0]
-            + table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\' and w.missing = \'true\''][0]}</total>
-            <total severity="warning">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority) like \'%WARNING%\' and c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\''][0]}</total>
-            <total severity="critical">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority) like \'%REMARK%\' and c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile%.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_compile\\_clean%.log\' ESCAPE \'\\\''][0]}</total>
+            <total severity="error">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'ERROR\' and c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\''][0]
+            + table_info['jpasingle']['select Count(w.id) from WhatLogEntry w JOIN w.component as c JOIN c.logFile as l where c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\' and w.missing = \'true\''][0]}</total>
+            <total severity="warning">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'WARNING\' and c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\''][0]}</total>
+            <total severity="critical">${table_info['jpasingle']['select Count(m.id) from MetadataEntry m JOIN m.logFile as l JOIN m.priority as p JOIN m.component as c where UPPER(p.priority)=\'REMARK\' and c.component=\'${component}\' and LOWER(l.path) like \'%\\_compile.log\' ESCAPE \'\\\' and LOWER(l.path) not like \'%\\_clean\\_%compile.log\' ESCAPE \'\\\''][0]}</total>
         </component>
     </#list>
     </faults>
+
+    <!-- all components -->
     <components>
-
-    <#list table_info['native:java.lang.String']['select DISTINCT component.component from component INNER JOIN logfile ON logfile.logpath_id=component.logpath_id where logfile.path like \'%_compile%.log\' and logfile.path not like \'%_compile_clean%.log\''] as component>
-    <!-- all components -->
+    <#list table_info['native:java.lang.String']['select DISTINCT component.component from component INNER JOIN logfile ON logfile.logpath_id=component.logpath_id where logfile.path like \'%_compile.log\' and logfile.path not like \'%\\_clean\\_%compile.log\''] as component>
         <component>${component}</component>
     </#list>
     </components>
--- a/buildframework/helium/tools/common/templates/ido/ido-cmt-ant.xml.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/templates/ido/ido-cmt-ant.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -30,7 +30,8 @@
     </#if>
     <basename property="componentbase${cmtid}" file="${data[component]}"/>
     <target name="cmt-${cmtid}">
-        <hlm:cmt output="${ant['build.log.dir']}/${ant['build.id']}_${ant['ido.name']}_${r'$'}{componentbase${cmtid}}_${cmtid}.txt">
+        <hlm:cmt output="${ant['build.log.dir']}/${ant['build.id']}_cmt/${ant['build.id']}_${r'$'}{componentbase${cmtid}}_${cmtid}.txt" failonerror="${ant['failonerror']}" 
+                 htmlOutputDir="${ant['ido.cmt.html.output.dir']}">
             <fileset id="input" dir="${data[component]}">
                 <include name="**/*.h"/>
                 <include name="**/*.cpp"/>
--- a/buildframework/helium/tools/common/templates/log/cc_summary_metadata_orm.html.ftl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/templates/log/cc_summary_metadata_orm.html.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -69,7 +69,7 @@
     <#list colors?keys as type>
         <#assign count =  table_info['jpasingle']['select count(m.id) from MetadataEntry m JOIN  m.priority as p JOIN m.component as c where (UPPER(p.priority)=\'${type?upper_case}\' and c.id=${component.id})'][0] >    
         <#if type=='error'>
-            <#assign count_missing = table_info['jpasingle']['select count(w.id) from WhatLogEntry w JOIN w.component c where c.logPathID=${logfile.id} and w.missing=\'true\''][0]> 
+            <#assign count_missing = table_info['jpasingle']['select count(w.id) from WhatLogEntry w JOIN w.component c where c.logPathID=${logfile.id} and c.id=${component.id} and w.missing=\'true\''][0]> 
             <#assign count = count?number + count_missing?number>
         </#if>
         <#if (count?number > 0)>
--- a/buildframework/helium/tools/common/test/test_common.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_common.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -28,7 +28,7 @@
     <property environment="env"/>
     
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml"/>
+    <import file="../../../build.xml"/>
         
     <target name="test-text-config">
         <hlm:configuration file="${helium.dir}/tests/data/ant_config_test.txt"/>
@@ -247,6 +247,7 @@
             <param name="metadata.dbfile" value="${build.cache.dir}/helium/temp_drive/output/logs/${build.id}_metadata_db"/>
             <param name="build.log.dir" value="${build.cache.dir}/helium/temp_drive/output/logs"/>            
             <param name="post.log.dir" value="${build.cache.dir}/helium/temp_drive/output/logs/post"/>
+            <param name="build.log" value="${build.cache.dir}/helium/temp_drive/output/logs/${build.id}_main.ant.log"/>
         </antcall>
         <au:assertFileExists file="${build.cache.dir}/helium/temp_drive/output/temp_build_files/sis_build.ant.xml"/>
         <delete file="${sisfiles.tempconfig.file}"/>
--- a/buildframework/helium/tools/common/test/test_scanlog.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_scanlog.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -28,7 +28,7 @@
     
     
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml"/>
+    <import file="../../../build.xml"/>
     <property name="scanlog.temp.dir" location="${helium.build.dir}/antunit/scanlog" />
     
     <target name="setUp">
@@ -104,10 +104,12 @@
                 <contains string="${scanlog}" substring="sf/app/HelloWorldCons/group" />
             </and>
         </au:assertTrue>
-        <au:assertTrue message="Check for 23 errors">
-            <contains string="${scanlog}" substring="&gt;23&lt;/td&gt;" />
+        <au:assertTrue message="Check for 7 errors">
+            <contains string="${scanlog}" substring="&gt;7&lt;/td&gt;" />
         </au:assertTrue>
-        
+        <au:assertTrue message="Check for 16 errors">
+            <contains string="${scanlog}" substring="&gt;16&lt;/td&gt;" />
+        </au:assertTrue>        
     </target>
     
     
@@ -190,11 +192,27 @@
             <os family="unix" />
         </condition>
         <property name="sbs.log.file" location="${helium.dir}/tests/data/test-scanlog_helium_minibuild_ido_input_compile.log" />
+        <copy file="${sbs.log.file}" tofile="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input_clean_compile.log" />
+        <copy file="${sbs.log.file}" tofile="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input2_compile.log" />
         <hlm:metadatarecord  database="${scanlog.temp.dir}/test-diamonds-faults_db">
             <hlm:sbsmetadatainput>
                 <fileset casesensitive="false" file="${sbs.log.file}"/>
+                <fileset casesensitive="false" file="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input_clean_compile.log" />
+                <fileset casesensitive="false" file="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input2_compile.log" />
+                <metadatafilterset refid="filterset.sbs" />
+            </hlm:sbsmetadatainput>
+            <hlm:sbsmetadatainput>
+                <fileset casesensitive="false" file="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input_clean_compile.log" />
                 <metadatafilterset refid="filterset.sbs" />
             </hlm:sbsmetadatainput>
+            <hlm:sbsmetadatainput>
+                <fileset casesensitive="false" file="${scanlog.temp.dir}/test-scanlog_helium_minibuild_ido_input2_compile.log" />
+                <metadatafilterset refid="filterset.sbs" />
+            </hlm:sbsmetadatainput>
+            <hlm:textmetadatainput>
+                <fileset casesensitive="false" file="${helium.dir}/tests/data/diamonds-faults_compile.text.log"/>
+                <metadatafilterset refid="filterset.sbs" />
+            </hlm:textmetadatainput>
         </hlm:metadatarecord>
 
         <fmpp sourceFile="${helium.dir}/tools/common/templates/diamonds/faults_metadata_orm.ftl"
@@ -205,20 +223,28 @@
             </data>
         </fmpp>
         <loadfile property="scanlog" srcFile="${scanlog.temp.dir}/compile-main.xml" />
+        <echo>${scanlog}</echo>
         <au:assertTrue message="Check for components">
             <and>
                 <contains string="${scanlog}" substring="&lt;name&gt;sf/mw/HelloWorldAPI/group&lt;/name&gt;" />
                 <contains string="${scanlog}" substring="&lt;name&gt;sf/app/HelloWorldCons/group&lt;/name&gt;" />
+                <contains string="${scanlog}" substring="&lt;generated_files&gt;46&lt;/generated_files&gt;" />
             </and>
         </au:assertTrue>
-        <au:assertTrue message="Check for 23 errors">
-            <contains string="${scanlog}" substring="&gt;23&lt;/total&gt;" />
+        
+        <au:assertTrue message="Check that diamonds-faults_compile.text.log is not pushed to diamonds">
+            <not>
+                <contains string="${scanlog}" substring="&lt;name&gt;diamonds-faults_compile.text.log&lt;/name&gt;" />
+            </not>
         </au:assertTrue>
-        <au:assertTrue message="Check for 16 errors">
-            <contains string="${scanlog}" substring="&gt;16&lt;/total&gt;" />
+        <au:assertTrue message="Check for 46 errors">
+            <contains string="${scanlog}" substring="&gt;46&lt;/total&gt;" />
         </au:assertTrue>
-        <au:assertTrue message="Check for 7 errors">
-            <contains string="${scanlog}" substring="&gt;7&lt;/total&gt;" />
+        <au:assertTrue message="Check for 32 errors">
+            <contains string="${scanlog}" substring="&gt;32&lt;/total&gt;" />
+        </au:assertTrue>
+        <au:assertTrue message="Check for 14 errors">
+            <contains string="${scanlog}" substring="&gt;14&lt;/total&gt;" />
         </au:assertTrue>
     </target>
 
@@ -255,11 +281,11 @@
         <au:assertTrue message="Check for build errors"> 
             <contains string="${cclog}" substring="test-scanlog_cc_summary_compile.log" /> 
         </au:assertTrue> 
-        <au:assertTrue message="Check for 24 build errors"> 
-            <contains string="${cclog}" substring="24" /> 
+        <au:assertTrue message="Check for 8 build errors"> 
+            <contains string="${cclog}" substring="8" /> 
         </au:assertTrue> 
-        <au:assertTrue message="Check for 23 build errors"> 
-            <contains string="${cclog}" substring="23" /> 
+        <au:assertTrue message="Check for 16 build errors"> 
+            <contains string="${cclog}" substring="16" /> 
         </au:assertTrue> 
         <au:assertTrue message="Check for validate policy errors"> 
             <and>
--- a/buildframework/helium/tools/common/test/test_scanlog_regex.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/test/test_scanlog_regex.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -26,7 +26,7 @@
     </description>
     <property environment="env"/>
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml"/>
+    <import file="../../../build.xml"/>
 
     <target name="test-scanlog-metadata-regex-1">
         <au:assertTrue>
--- a/buildframework/helium/tools/common/testing.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/common/testing.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -125,6 +125,7 @@
         <au:antunit>
             <propertyset>
                 <propertyref name="cache.dir"/>
+                <propertyref name="synergy71.enabled"/>
             </propertyset>
             <fileset dir="${helium.dir}" includes="tools/**/test_*.ant.xml"/> 
             <fileset dir="${helium.dir}" includes="extensions/nokia/tools/**/test_*.ant.xml"/> 
--- a/buildframework/helium/tools/compile/cmaker.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/compile/cmaker.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -100,14 +100,15 @@
     
     <!--  Installing CMaker. -->    
     <target name="cmaker-install">
-        <hlm:recordStartMacro name="${build.id}_install.cmaker.log" emacsmode="true"/>
+        <mkdir dir="${compile.log.dir}" />
+        <record name="${compile.log.dir}/${build.id}_install.cmaker.log" emacsmode="true" action="start" />
         <exec executable="${cmaker.component.dir}/bin/mingw_make.exe" osfamily="windows" dir="${cmaker.component.dir}" failonerror="true">
             <arg line="install"/>
         </exec>
         <exec executable="make" osfamily="unix" dir="${cmaker.component.dir}" failonerror="true">
             <arg line="install"/>
         </exec>
-        <hlm:recordStopMacro name="${build.id}_install.cmaker.log"/>
+        <record name="${compile.log.dir}/${build.id}_install.cmaker.log" action="stop" />
         <!-- Blocks packaging configuration generation. -->
         <if>
             <istrue value="${blocks.enabled}" />
@@ -119,7 +120,7 @@
                     <arg value="--epocroot=${build.drive}/" />
                     <arg value="--config=${blocks.config.dir}" />
                     <arg value="--datasource=cmaker" />
-                    <arg value="-Dwhatlog=${build.log.dir}/${build.id}_install.cmaker.log" />
+                    <arg value="-Dwhatlog=${compile.log.dir}/${build.id}_install.cmaker.log" />
                     <arg value="-Dconfigdir=${cmaker.component.dir}" />
                     <arg value="--updateData" />
                 </exec>
@@ -129,14 +130,15 @@
     
     <!-- CMaker export configuration. -->    
     <target name="cmaker-export" depends="cmaker-install" if="enable.cmaker">
-        <hlm:recordStartMacro name="${build.id}${cmaker.log.label}.export.cmaker.log" emacsmode="true"/>
+        <mkdir dir="${compile.log.dir}" />
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" emacsmode="true" action="start" />
         <hlm:cmakerMacro ncp="${cmaker.pp.version}"
                       s60="${cmaker.s60.version}"
                       action="export"/>
-        <hlm:recordStopMacro name="${build.id}${cmaker.log.label}.export.cmaker.log"/>
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" action="stop" />
         <hlm:metadatarecord database="${metadata.dbfile}">
             <hlm:abldmetadatainput>
-                <fileset casesensitive="false" file="${build.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" />
+                <fileset casesensitive="false" file="${compile.log.dir}/${build.id}${cmaker.log.label}.export.cmaker.log" />
                 <metadatafilterset refid="filterset.compile" />
             </hlm:abldmetadatainput>
         </hlm:metadatarecord>
@@ -144,14 +146,15 @@
 
     <!-- CMaker cleanup exported configuration. -->
     <target name="cmaker-clean" depends="cmaker-install" if="enable.cmaker">
-        <hlm:recordStartMacro name="${build.id}${cmaker.log.label}.clean.cmaker.log" emacsmode="true"/>
+        <mkdir dir="${compile.log.dir}" />
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" emacsmode="true" action="start" />
         <hlm:cmakerMacro ncp="${cmaker.pp.version}"
                       s60="${cmaker.s60.version}"
                       action="clean"/>
-        <hlm:recordStopMacro name="${build.id}${cmaker.log.label}.clean.cmaker.log"/>
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" action="stop" />
         <hlm:metadatarecord database="${metadata.dbfile}">
             <hlm:abldmetadatainput>
-                <fileset casesensitive="false" file="${build.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" />
+                <fileset casesensitive="false" file="${compile.log.dir}/${build.id}${cmaker.log.label}.clean.cmaker.log" />
                 <metadatafilterset refid="filterset.compile" />
             </hlm:abldmetadatainput>
         </hlm:metadatarecord>
@@ -159,14 +162,15 @@
     
     <!-- CMaker list the final destination of what will be exported. -->
     <target name="cmaker-what" depends="cmaker-install" if="enable.cmaker">
-        <hlm:recordStartMacro name="${build.id}${cmaker.log.label}.what.cmaker.log" emacsmode="true"/>
+        <mkdir dir="${compile.log.dir}" />
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" emacsmode="true" action="start" />
         <hlm:cmakerMacro ncp="${cmaker.pp.version}"
                       s60="${cmaker.s60.version}"
                       action="what"/>
-        <hlm:recordStopMacro name="${build.id}${cmaker.log.label}.what.cmaker.log"/>
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" action="stop" />
         <hlm:metadatarecord database="${metadata.dbfile}">
             <hlm:abldmetadatainput>
-                <fileset casesensitive="false" file="${build.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" />
+                <fileset casesensitive="false" file="${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" />
                 <metadatafilterset refid="filterset.compile" />
             </hlm:abldmetadatainput>
         </hlm:metadatarecord>
@@ -182,7 +186,7 @@
                     <arg value="--epocroot=${build.drive}/" />
                     <arg value="--config=${blocks.config.dir}" />
                     <arg value="--datasource=cmaker" />
-                    <arg value="-Dwhatlog=${build.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" />
+                    <arg value="-Dwhatlog=${compile.log.dir}/${build.id}${cmaker.log.label}.what.cmaker.log" />
                     <arg value="-Dconfigdir=${cmaker.config.dir}" />
                     <!--arg value="-Dname=${cmaker.log.label}"-->
                     <arg value="--updateData" />
@@ -193,14 +197,15 @@
 
     <!-- CMaker list the source files what will be exported. -->
     <target name="cmaker-whatdeps" depends="cmaker-install" if="enable.cmaker">
-        <hlm:recordStartMacro name="${build.id}${cmaker.log.label}.whatdeps.cmaker.log" emacsmode="true"/>
+        <mkdir dir="${compile.log.dir}" />
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" emacsmode="true" action="start" />
         <hlm:cmakerMacro ncp="${cmaker.pp.version}"
                       s60="${cmaker.s60.version}"
                       action="what_deps"/>
-        <hlm:recordStopMacro name="${build.id}${cmaker.log.label}.whatdeps.cmaker.log"/>
+        <record name="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" action="stop" />
         <hlm:metadatarecord database="${metadata.dbfile}">
             <hlm:abldmetadatainput>
-                <fileset casesensitive="false" file="${build.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" />
+                <fileset casesensitive="false" file="${compile.log.dir}/${build.id}${cmaker.log.label}.whatdeps.cmaker.log" />
                 <metadatafilterset refid="filterset.compile" />
             </hlm:abldmetadatainput>
         </hlm:metadatarecord>
--- a/buildframework/helium/tools/compile/compile.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/compile/compile.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -58,6 +58,7 @@
     
     <!-- including common compilation macros -->
     <hlm:typedef file="${helium.dir}/tools/compile/compile.antlib.xml" uri="http://www.nokia.com/helium"/>
+    <import file="nokiacompile.ant.xml" />
     <import file="cmaker.ant.xml" />
     <import file="ec/ec.ant.xml" />
     <import file="ebs/ebs.ant.xml" />
@@ -77,12 +78,10 @@
     </target>
 
     <!-- Does all the necessary steps before starting the component build -->
-    <target name="precompile" depends="record-compile-start-time,create-canonical-sysdef-file,precompile-ec,run-coverity-configure"/>
+    <target name="precompile" depends="create-canonical-sysdef-file,precompile-ec,run-coverity-configure"/>
 
     <!-- post operation for EC builds, submits the compile time and lists all the built components-->
-    <target name="postcompile" depends="postcompile-ec,render-build-duplicates,post-coverity" unless="env.HLM_SUBCON">
-        <runtarget target="submit-compile-time"/>
-    </target>
+    <target name="postcompile" depends="postcompile-ec,render-build-duplicates,post-coverity" unless="env.HLM_SUBCON" />
     
     
     <!-- Pre-processes all System Definition input files.
@@ -151,7 +150,8 @@
                     <fileset dir="${temp.build.dir}/join" />
                 </delete>
                 <!-- creating the root sysdef file for packages referenced directly -->
-                <hlm:createRootSysdef destFile="${temp.build.dir}/root/generated.root.xml" epocroot="${build.drive}">
+                <hlm:createRootSysdef destFile="${temp.build.dir}/root/generated.root.xml" epocroot="${build.drive}/"
+                    checkPackageExists="${compile.cmd.clean}">
                     <restrict>
                         <resources refid="system.definition.files" />
                         <rsel:name name="**${file.separator}package_definition.xml" />
@@ -284,12 +284,10 @@
 
     This is used at the end of compilation to log the compile time to the GTI
     database.
+	@deprecated Implementation of the feature has changed, and the target is not needed anymore
     -->
     <target name="record-compile-start-time">
-        <preset.exec executable="perl" outputproperty="build.main.start.time">
-            <arg value="-e"/>
-            <arg value="print time"/>
-        </preset.exec>
+        <echo>Warning: this target is deprecated, please remove it from your configuration</echo>
     </target>
 
   <!-- Runs the Symbian scanlog and HTMLscanlog tools, as well as a Helium tool, for
--- a/buildframework/helium/tools/compile/compile.antlib.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/compile/compile.antlib.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -22,6 +22,7 @@
 -->
 <!--* @package compile -->
 <antlib xmlns:hlm="http://www.nokia.com/helium">
+    
     <!-- This task transfer the log file into html format -->
     <macrodef name="compileHtmlscanlogMacro" uri="http://www.nokia.com/helium">
         <attribute name="input"/>
@@ -40,9 +41,8 @@
         </sequential>
     </macrodef>
 
-    <!--
-      Generates compilation report for diamonds. 
-     -->
+    
+    <!-- Generates compilation report for diamonds. -->
     <macrodef name="calculateErrorsFromLog" uri="http://www.nokia.com/helium">
         <sequential>
             <if>
@@ -62,6 +62,7 @@
         </sequential>
     </macrodef>
 
+    
     <macrodef name="compileLogSignalMacro" uri="http://www.nokia.com/helium">
         <attribute name="compile.summary.file"/>
         <attribute name="error.limit"/>
@@ -110,7 +111,10 @@
         </sequential>
     </macrodef>
     
-    <!-- Macro to start the build using EBS. Parameters are generated xml file for EBS builds
+    
+    <!-- Macro to start the build using EBS. 
+        
+    Parameters are generated xml file for EBS builds
     the log output of the build and the number of threads for the build. -->
     <macrodef name="compileEbsMacro" uri="http://www.nokia.com/helium">
         <attribute name="input"/>
@@ -131,7 +135,10 @@
         </sequential>
     </macrodef>
 
-    <!-- Macro to generate the xml file for EBS builds. Inputs are Merged xml file for the process,
+    
+    <!-- Macro to generate the xml file for EBS builds.
+        
+    Inputs are Merged xml file for the process,
     configuration for which the EBS xml file is generated and the output xml file for the EBS builds and
     the log output of the build. -->
     <macrodef name="compileGenxmlMacro" uri="http://www.nokia.com/helium">
@@ -157,10 +164,10 @@
         </sequential>
     </macrodef>
 
-    <!--
-        Merges all preprocessed System Definition files into one combined file
-        This macro also handles the copying of the sysdef DTDs on the root of
-        the build environment.
+    
+    <!-- Merges all preprocessed System Definition files into one combined file
+    
+    This macro also handles the copying of the sysdef DTDs on the root of the build environment.
     -->
     <macrodef name="compileGenxmlMergeMacro" uri="http://www.nokia.com/helium">
         <attribute name="input"/>
@@ -192,9 +199,8 @@
         </sequential>
     </macrodef>
 
-    <!--
-      This macro uses genxml to filter a sysdef file.
-      -->
+    
+    <!-- This macro uses genxml to filter a sysdef file. -->
     <macrodef name="compileGenxmlFilterMacro" uri="http://www.nokia.com/helium">
         <attribute name="input"/>
         <attribute name="output"/>
@@ -218,14 +224,14 @@
     </macrodef>
 
 
-  <!--
-    Electric Cloud emake support.
+    <!-- Electric Cloud emake support.
+
     e.g:
-    <pre>
-    <hlm:emakeMacro name="zip-ee" makefile="/foo.mk" log="${build.log.dir}/zip-ee.log" target="zip-all"/>
-    </pre>
+
+        <hlm:emakeMacro name="zip-ee" makefile="/foo.mk" log="${build.log.dir}/zip-ee.log" target="zip-all"/>
+
     Optionally to generate emake annotation file use/add attribute annodetail="basic,history,file,waiting".
-  -->
+    -->
     <scriptdef name="emakeMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="name"/>
         <attribute name="log"/>
@@ -308,7 +314,8 @@
           task.execute();
     </scriptdef>
 
-  <!-- Macro to build using Raptor.-->
+    
+    <!-- Macro to build using Raptor.-->
     <scriptdef name="sbsMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="config"/>
         <attribute name="layers"/>
@@ -325,6 +332,7 @@
 ]]>
     </scriptdef>
 
+    
     <scriptdef name="getSBSConfigMacro" language="beanshell" uri="http://www.nokia.com/helium">
         <attribute name="sbs.sysdef.file"/>
 <![CDATA[
@@ -333,4 +341,5 @@
 project.setProperty("sbs.configs",configParser.getConfigs());
 ]]>
     </scriptdef>
+    
 </antlib>
--- a/buildframework/helium/tools/compile/ebs/ebs.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/compile/ebs/ebs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -49,8 +49,9 @@
     </target>
 
     
-    <!-- Executes compilation of a System Definition configuration using
-    Symbian EBS tools, driven directly from Ant. -->
+    <!-- Executes compilation of a System Definition configuration.
+        
+    Uses Symbian EBS tools, driven directly from Ant. -->
     <target name="compile-ebs-ant" if="build.system.ebs-ant" depends="set-arm-version,find-freeport">        
         <script language="jython" setbeans="false">
 threads = project.getProperty("number.of.threads")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/compile/nokiacompile.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============================================================================
+Name        : nokiacompile.ant.xml
+Part of     : Helium
+
+Copyright (c) 2009 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 compile -->
+<project name="nokiacompile" xmlns:hlm="http://www.nokia.com/helium"
+    xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
+    <description>
+        Targets related to compile stage.
+        The targets in this module are deprecated and will be 
+        removed in next release.
+    </description>
+
+    <!-- 
+    @deprecated Implementation of the feature has changed, and the target is not needed anymore
+    -->
+    <target name="submit-compile-time">
+        <echo>Warning: this target is deprecated, please remove it from your configuration</echo>
+    </target>
+
+</project>
--- a/buildframework/helium/tools/compile/qt/antunit/test_qt.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/compile/qt/antunit/test_qt.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -28,7 +28,7 @@
     <property environment="env"/>
     
     <property name="helium.dir" location="../../../.." />
-    <import file="${helium.dir}/helium.ant.xml"/>
+    <import file="${helium.dir}/build.xml"/>
     <property name="qt.temp.dir" location="${helium.build.dir}/antunit/qt" />
     
     <target name="setUp">
--- a/buildframework/helium/tools/compile/sbs/sbs.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/compile/sbs/sbs.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -39,10 +39,26 @@
      @scope public
      -->
     
-    <!-- skip sbs layer filtering (true) for new schema and false for schema 1.4.0
-    @type boolean
+    <!--* @property schema.new
+     This property enables sbs compilation based on system definition schema 3.0.0. 
+     @type boolean
+     @scope public
+     -->
+    
+    <!-- This property enables sbs layer filtering of the canonical system definition file 
+         for system definition schema 1.4.0 using ${sysdef.configuration}. 
+     @type boolean
     -->
-    <property name="skip.sbs.layer.generation" value="false" />
+    <property name="sbs.layer.generation.enabled" value="true" />
+
+    <!-- Default CTC command line option, override it to customize it. -->
+    <hlm:argSet id="ctc.build.options" />
+
+    <!-- This property define what instrumentation CTC should create.
+    @type string
+    -->
+    <property name="ctc.instrument.type" value="m" />
+    
     
     <!-- This target filters the canonical system definition file compare to the "raptor_${sysdef.configuration}" filter. -->
     <macrodef name="generate-layers" uri="http://www.nokia.com/helium">
@@ -50,8 +66,18 @@
             <echo message="canno-file:${canonical.sysdef.file}" />
             <echo message="raptor-filters:raptor_${sysdef.configuration}" />
             <if>
-                <istrue value="${skip.sbs.layer.generation}" />
+                <isfalse value="${sbs.layer.generation.enabled}" />
                 <then>
+                    <if>
+                        <isreference refid="sysdef.layers.${sysdef.configuration}" />
+                        <then>
+                            <property name="sbs.patternset" value="sysdef.filters.${sysdef.configuration}" />
+                            <echo message="sbs.patternset: ${sbs.patternset}" />
+                        </then>
+                        <else>
+                            <echo message="The sysdef.layers.${sysdef.configuration} pattern set is not defined." />
+                        </else>
+                    </if>
                     <copy file="${canonical.sysdef.file}" tofile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}_temp.xml"/>
                 </then>
                 <else>
@@ -100,15 +126,26 @@
                                 <echo message="sbs.patternset: ${sbs.patternset}" />
                             </then>
                             <else>
-                                <echo message="The sysdef.${sysdef.configuration} patternset is not defined." />
+                                <echo message="The sysdef.filters.${sysdef.configuration} patternset is not defined." />
                             </else>
                         </if>
                     </then>
                     <else>
-                        <hlm:generate-layers />
+                        <var name="sbs.patternset" unset="true"/>
+                        <if>
+                            <isreference refid="sysdef.layers.${sysdef.configuration}" />
+                            <then>
+                                <property name="sbs.patternset" value="sysdef.filters.${sysdef.configuration}" />
+                                <echo message="sbs.patternset: ${sbs.patternset}" />
+                                <copy file="${canonical.sysdef.file}" tofile="${build.drive}/output/build/canonical_system_definition_${sysdef.configuration}.xml" />
+                            </then>
+                            <else>
+                                <echo message="The sysdef.layers.${sysdef.configuration} patternset is not defined." />
+                                <hlm:generate-layers />
+                            </else>
+                        </if>
                     </else>
-                </if>
-                <var name="sbs.internal.inputs.list" value="" unset="true"/>
+                </if>              
                 <hlm:getsbsinputs config="sbs.${sysdef.configuration}" outputProperty="sbs.internal.inputs.list"/>
                 <for list="${sbs.internal.inputs.list}" delimiter="," param="sbs.input">
                     <sequential>
@@ -153,7 +190,10 @@
                                                     errorOutput="${sbs.log.file}.sbs_error.log" 
                                                     workingDir="${build.drive}/" 
                                                     failOnError="false" 
-                                                    outputLog="${sbs.log.file}" />                                
+                                                    outputLog="${sbs.log.file}"
+                                                    instrumentType="${ctc.instrument.type}">
+                                        <hlm:CTCOptions refid="ctc.build.options" />
+                                    </hlm:ctctask>
                                 </then>
                             </elseif>
                             <else>
@@ -191,7 +231,7 @@
             <hlm:metadatarecord database="${metadata.dbfile}">
                 <hlm:textmetadatainput>
                     <fileset casesensitive="false" file="@{sbs.error.output.file}"/>
-                    <metadatafilterset refid="filterset.sbs" />
+                    <metadatafilterset refid="filterset.sbs.cli" />
                 </hlm:textmetadatainput>
             </hlm:metadatarecord>
             <basename property="base.sbs.ant.output.log" file="@{sbs.ant.output.file}" />
--- a/buildframework/helium/tools/localisation/localisation-50.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/localisation/localisation-50.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -87,8 +87,10 @@
     
     
     <!-- The createDeltaZipMacro enables to create regional variant like china and japan.
+        
     e.g:
-         <pre><hlm:createDeltaZipMacro variant="china" type="armv5" ctool="true"/></pre>
+         
+        <hlm:createDeltaZipMacro variant="china" type="armv5" ctool="true"/>
     -->
     <macrodef name="createDeltaZipMacro" uri="http://www.nokia.com/helium">
         <attribute name="variant"/>
@@ -156,10 +158,12 @@
     </macrodef>
 
 
-    <!-- The createDeltaWesternZipMacro enables to create western regional variant
+    <!-- The createDeltaWesternZipMacro enables to create western regional variant.
+        
     e.g: build western variation using the results from S60_postbuild config
-         and enabling configuration tool support.
-         <pre><hlm:createDeltaWesternZipMacro configs="S60_postbuild" ctool="true"/></pre>
+    and enabling configuration tool support.
+    
+        <hlm:createDeltaWesternZipMacro configs="S60_postbuild" ctool="true"/>
     -->
     <macrodef name="createDeltaWesternZipMacro"  uri="http://www.nokia.com/helium">
         <attribute name="configs"/>
--- a/buildframework/helium/tools/logging/test/test_logging.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/logging/test/test_logging.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -28,7 +28,7 @@
     
     <property name="helium.dir" location="../../.." />
     <property name="build.drive" location="${env.TEMP}/helium/temp_drive"/>
-    <import file="../../../helium.ant.xml"/>
+    <import file="../../../build.xml"/>
     
                 
     <!--target name="test-tempRecordMacro">
--- a/buildframework/helium/tools/logging/test/test_summary_log.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/logging/test/test_summary_log.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -29,7 +29,7 @@
     <property name="helium.dir" location="../../.." />
     <property name="test.temp.dir" location="${helium.dir}/build/antunit/summary" />
     <property name="build.drive" location="${test.temp.dir}" />
-    <import file="../../../helium.ant.xml"/>
+    <import file="../../../build.xml"/>
     
     <target name="setUp">
         <delete dir="${test.temp.dir}" failonerror="false" />
--- a/buildframework/helium/tools/preparation/bom/bom.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/bom/bom.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -137,9 +137,10 @@
                 <!-- Transform bom data into the diamonds xml format: 
                      * BOM folders are flattened into tasks.
                      * Schema version is extracted from the appropriate FMPP template. -->
+                <mkdir dir="${temp.build.dir}" />
                 <fmpp sourcefile="${helium.dir}/tools/common/templates/diamonds/diamonds_header.ftl" 
-                      outputfile="${build.temp.dir}/diamonds_header.xml" quiet="true"/>
-                <loadfile srcfile="${build.temp.dir}/diamonds_header.xml" property="diamonds.schema.xml">
+                      outputfile="${temp.build.dir}/diamonds_header.xml" quiet="true"/>
+                <loadfile srcfile="${temp.build.dir}/diamonds_header.xml" property="diamonds.schema.xml">
                     <filterchain>
                         <linecontains>
                             <contains value="schema"/>
@@ -153,7 +154,7 @@
                     <remove path="bom/build"/>
                     <rename path="bom" to="diamonds-build"/>
                 </xmltask>                
-                <delete file="${build.temp.dir}/diamonds_header.xml"/>
+                <delete file="${temp.build.dir}/diamonds_header.xml"/>
                 <replace file="${diamonds.build.output.dir}/create-bom.xml" token="&lt;folder&gt;" value="&lt;!-- &lt;folder&gt; --&gt;"/>
                 <replace file="${diamonds.build.output.dir}/create-bom.xml" token="&lt;/folder&gt;" value="&lt;!-- &lt;/folder&gt; --&gt;"/>
                 <xmltask source="${diamonds.build.output.dir}/create-bom.xml" dest="${diamonds.build.output.dir}/create-bom.xml"
@@ -215,9 +216,7 @@
                                     <actions>
                                         <var name="task.owner" value="@{task.owner}"/>
                                         <if>
-                                            <and>
-                                                <isset property="task.owners"/>
-                                            </and>
+                                            <isset property="task.owners"/>
                                             <then>
                                                 <var name="task.owners" value="${task.owners},${task.owner}"/>
                                             </then>
@@ -242,9 +241,7 @@
                                 <actions>
                                     <var name="task.owner" value="@{task.owner}"/>
                                     <if>
-                                        <and>
-                                            <isset property="task.owners"/>
-                                        </and>
+                                        <isset property="task.owners"/>
                                         <then>
                                             <var name="task.owners" value="${task.owners},${task.owner}"/>
                                         </then>
@@ -272,17 +269,20 @@
         <for list="${task.owners.unique}" delimiter="," param="task.owner" >
             <sequential>
                 <var name="task.owner" value="@{task.owner}"/>
-                <hlm:ldap url="${email.ldap.server}" rootdn="${email.ldap.rootdn}" filter="uid=${task.owner}" outputproperty="task.owner.email" key="mail"/>
                 <if>
-                    <and>
-                        <isset property="task.owners.email"/>
-                    </and>
+                    <isset property="email.ldap.server"/>
                     <then>
-                        <var name="task.owners.email" value="${task.owners.email},${task.owner.email}"/>
-                    </then>
-                    <else>
-                        <var name="task.owners.email" value="${task.owner.email}"/>
-                    </else>
+                        <hlm:ldap url="${email.ldap.server}" rootdn="${email.ldap.rootdn}" filter="uid=${task.owner}" outputproperty="task.owner.email" key="mail"/>
+                        <if>
+                            <isset property="task.owners.email"/>
+                            <then>
+                                <var name="task.owners.email" value="${task.owners.email},${task.owner.email}"/>
+                            </then>
+                            <else>
+                                <var name="task.owners.email" value="${task.owner.email}"/>
+                            </else>
+                        </if>
+                    </then>   
                 </if>
             </sequential>
         </for>
--- a/buildframework/helium/tools/preparation/ci.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/ci.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -28,10 +28,7 @@
     
     <!-- Delete all the folders based on configurations file inside dir-path, optional attribute pool-size's default value is 4 -->
     <target name="delete-folders-from-list" if = "ci.cleanup.env.dir">
-        <exec osfamily="windows" executable="python" failonerror="true" outputproperty="delete.folders.drive">
-            <arg line="-m searchnextdrive"/>               
-        </exec>
-        <hlm:deleteFoldersFromDirMacro dir-path="${ci.cleanup.env.dir}" delete-folders-drive="${delete.folders.drive}"/>
+        <hlm:deleteFoldersFromDirMacro dir-path="${ci.cleanup.env.dir}" />
     </target>
 
     <!-- Delete all the folders based on configurations file inside dir-path, optional attribute pool-size's default value is 4 -->
@@ -48,6 +45,8 @@
         
 dir_path = str(attributes.get('dir-path'))
 del_folder_drive = attributes.get('delete-folders-drive')
+if del_folder_drive:
+    self.log("Warning: the delete-folders-drive attribute is deprecated, please stop using it.")
 pool_size = attributes.get('pool-size')
 if pool_size != None:
     pool_size = str(pool_size)
--- a/buildframework/helium/tools/preparation/getenv.pl	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/getenv.pl	Wed Jun 16 16:51:40 2010 +0300
@@ -111,17 +111,7 @@
 $defaultPathToServer = undef;
 $pathToUnzip = "7za";
 $getEnvVersion = "2.4.9";
-
-# first open/create log file
-#open( LOGFILE, ">> $logFile" ) or handleError( "cant create log file: $!", $warning );
-eval {
-  open( LOGFILE, ">> getcwd.'/output/logs/getenv.log'" );
-}; 
-  if ($@) #if exception
-  {
-     open( LOGFILE, ">> getcwd.'/getenv.log'" ) ; 
-  }
-  
+ 
 print "S60 RnD environment getter v.$getEnvVersion\n\n";
 printLog( "getenv.pl version $getEnvVersion" );
 
@@ -411,10 +401,20 @@
             print $trace."\n";
         }
     
+        # first open/create log file
+        #open( LOGFILE, ">> $logFile" ) or handleError( "cant create log file: $!", $warning );
+        eval {
+            open( LOGFILE, ">> getcwd.'/output/logs/getenv.log'" );
+        }; 
+        if ($@) #if exception
+        {
+            open( LOGFILE, ">> getcwd.'/getenv.log'" ) or handleError( "cant create log file: $!", $warning );
+        }
         # we should print traces for log file
         my ($sec,$min,$hr) = localtime();
-      printf LOGFILE ( "%02d:%02d:%02d: ", $hr, $min, $sec );
+        printf LOGFILE ( "%02d:%02d:%02d: ", $hr, $min, $sec );
         print LOGFILE $trace."\n";
+		close (LOGFILE);
     }
 }
 
--- a/buildframework/helium/tools/preparation/ido-prep.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/ido-prep.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -59,6 +59,11 @@
     @type string
     -->
     <property name="ido.codescanner.output.dir" location="${build.output.dir}/${build.id}_codescanner"/>
+
+    <!-- Defines the location of CMT++ output and the input for the diamonds creation target.
+    @type string
+    -->
+    <property name="ido.cmt.html.output.dir" location="${build.log.dir}/${build.id}_cmt"/>
     
     <!-- Internal target that generates the '''ado.mapping.file'''.
      It is a INI file that contains ADO location as a key and target location as value.
@@ -359,8 +364,34 @@
             </data>
         </fmpp>
         <ant antfile="${temp.build.dir}/ido-cmt.ant.xml"/>
+        <runtarget target="cmt-generate-diamond-summary" />
     </target>
 
+        <!-- CMT Tool target. Once the CMT tool has been run this scans the results file and puts the
+        results into a .XML file in the diamonds folder ready for transmission to diamonds. 
+        The target uses the ido-cmt-summary-ant.xml.ftl file to create a file called ido-cmt-summary.ant.xml
+        which contains 1 new target for each of the input folders found under the build area. Then the 
+        ido-cmt-summary.ant.xml file is called as an ant file and the targets executed. Each target runs
+        the file scanner looking for CMT summary information which it extracts and writes to an 
+        XML file in the diamonds folder.
+        -->
+    <target name="cmt-generate-diamond-summary" if="enable.cmt">
+        <!--use the header.ftl template file to create the init part of the output file
+        that can be copied to the final output file by the java class-->
+        <property name="temp.diamonds.header.xml" location="${env.TEMP}/diamonds_header.xml" />
+        <fmpp sourcefile="${helium.dir}/tools/common/templates/diamonds/diamonds_header.ftl" 
+              outputfile="${temp.diamonds.header.xml}" quiet="true"/>
+        <property name="temp.diamonds.footer.xml" location="${env.TEMP}/diamonds_footer.xml" />
+        <fmpp sourcefile="${helium.dir}/tools/common/templates/diamonds/diamonds_footer.ftl" 
+              outputfile="${temp.diamonds.footer.xml}" quiet="true"/>
+        
+        <hlm:cmtsummarytask diamondsHeaderFileName="${temp.diamonds.header.xml}" diamondsFooterFileName="${temp.diamonds.footer.xml}"
+            outputFile="${diamonds.build.output.dir}/cmt_summary.xml"
+            inputFile="${ido.cmt.html.output.dir}/CMTHTML/index.html" />
+        <delete file="${temp.diamonds.header.xml}" failonerror="false" />
+        <delete file="${temp.diamonds.footer.xml}" failonerror="false" />
+        
+    </target>
 
     <!-- Internal target that generates a temporary file that allow the 
     either export of iby or either key*.xls. The generated Ant build file
--- a/buildframework/helium/tools/preparation/preparation.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/preparation.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -357,20 +357,7 @@
             <then>
                 <antcall target="dragonfly-prep-drive"/>
             </then>
-            <else>
-                <if>
-                    <and>
-                        <not>
-                            <isset property="build.drive.notdefined"/>
-                        </not>
-                        <os family="windows"/>
-                    </and>
-                    <then>
-                        <echo>Unsubsting any existing path substed to ${build.drive}.
-If this fails, it is because there was no substed drive.</echo>
-                        <hlm:unsubst drive="${build.drive}" failonerror="${failonerror}"/>
-                    </then>   
-                </if>    
+            <else> 
                 <tstamp>
                     <format property="old.prep.dir.timestamp" pattern="yyyyMMdd'_'HHmmss" />
                 </tstamp>
@@ -403,8 +390,8 @@
                 fail build if prep.root.dir property is not set.-->
                 <fail unless="prep.root.dir" message="prep.root.dir value should be specified." />
                 <mkdir dir="${prep.build.dir}" />
-                
-                <exec osfamily="windows" executable="subst.exe" failonerror="false">
+                <hlm:unsubst drive="${build.drive}" failonerror="false"/>
+                <exec osfamily="windows" executable="subst" failonerror="false">
                     <arg value="${build.drive}" />
                     <arg value="${prep.build.dir}" />
                 </exec>
@@ -459,6 +446,12 @@
           Diamonds. Also  build.property.cache.file will be there contains all the diamonds related properties 
     --> 
     <target name="diamonds">
+        <!--* @property skip.diamonds
+        Set to true to skip diamonds.
+        @type boolean
+        @editable required
+        @scope public
+        -->
         <mkdir dir="${diamonds.build.output.dir}" />
         <var name="diamonds.build.url"  value="http://${diamonds.host}:${diamonds.port}${diamonds.build.id}"/>
         <echoproperties destfile="${build.property.cache.file}">
@@ -578,12 +571,7 @@
     
     <!-- Can be used to unsubst the drive . -->
     <target name="remove-drive">
-        <if>
-            <os family="windows"/>
-            <then>
-                <hlm:unsubst drive="${build.drive}"/>
-            </then>
-        </if>
+        <hlm:unsubst drive="${build.drive}"/>
     </target>
     
     <!--
--- a/buildframework/helium/tools/preparation/synergy/buildmanagement.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/synergy/buildmanagement.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -71,7 +71,7 @@
 
 import nokia.nokiaccm
 import ccm.extra
-from com.nokia.ant.types.ccm import SessionSet
+from com.nokia.helium.ccmtask.ant.types import SessionSet
 import traceback
         
 session = None
@@ -89,50 +89,5 @@
 project.addReference(str(reference), sessionset)
     </scriptdef>
 
-    <!-- Target to test ccm-task. -->
-    <target name="try-ccm-task" if="run.ccm">
-        <hlm:ccm>
-            <hlm:update project="mc_4032_component_branches-mc_4031_0650" />
-        </hlm:ccm>
-    </target>
-
-    <!-- Target to test ccm-task. -->
-    <target name="try-ccm-task2" if="run.ccm">
-        <hlm:createSessionMacro database="to1tobet" reference="test.session" />
-        <hlm:ccm verbose="false">
-            <!-- Defining some session to use. -->
-            <hlm:sessionset refid="test.session" />
-
-
-            <!-- Do something ...-->
-            <hlm:addtask folder="tr1test1#2079">
-                <task name="tr1test1#5310" />
-            </hlm:addtask>
-            <!--<hlm:update project="mc_4032_component_branches-mc_4031_0650"/>-->
-            <hlm:snapshot project="helium-to1tobet#helium_3.0:project:vc1s60p1#1" dir="c:\test" fast="true" recursive="true" />
-            <hlm:close />
-        </hlm:ccm>
-    </target>
-    <!-- Target to test ccm-checkout. -->
-    <target name="try-ccm-task3" if="run.ccm">
-        <hlm:createSessionMacro database="tr1test1" reference="test.session" />
-        <hlm:ccm verbose="false">
-            <!-- Defining some session to use. -->
-            <hlm:sessionset refid="test.session" />
-            <hlm:checkout project="Hello_World-8.2:project:tr1test1#1" release="Hello_World/next" />
-            <hlm:close />
-        </hlm:ccm>
-    </target>
-
-    <!-- Target to test ccm-work_area. -->
-    <target name="try-ccm-task4" if="run.ccm">
-        <hlm:createSessionMacro database="tr1test1" reference="test.session" />
-        <hlm:ccm verbose="false">
-            <!-- Defining some session to use. -->
-            <hlm:sessionset refid="test.session" />
-            <hlm:workarea project="Hello_World-8.3:project:tr1test1#1" maintain="True" />
-            <hlm:close />
-        </hlm:ccm>
-    </target>
 
 </project>
--- a/buildframework/helium/tools/preparation/synergy/ccmtask.jep	Tue Apr 27 08:33:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-""" Script to process Ant <ccm> task commands. """
-
-import ccm
-import ccm.extra
-import sys
-import logging
-import ant
-import string
-
-logging.basicConfig(level=logging.INFO)
-logging.getLogger("ccm").setLevel(logging.INFO)
-antlogger = ant.AntHandler(java_ccmtask)
-logger = logging.getLogger("ccm.ant")
-logger.addHandler(antlogger)
-
-session = None
-
-def execute_update(command):
-    java_ccmtask.log(str('Updating project: ' + command.getProject()))
-    project = session.create(command.getProject())
-    project.update()
-    
-def execute_synchronize(command):
-    if command.getProject() is not None:
-        java_ccmtask.log(str('Synchronizing project: ' + command.getProject()))
-        java_ccmtask.log(str("Recursive: %s" % command.getRecursive()))
-        project = session.create(command.getProject())
-        project.sync(command.getRecursive())    
-    else:
-        raise Exception("Error during synchronization. Project is not defined.")
-        
-
-def execute_reconcile(command):
-    java_ccmtask.log(str('Reconciling project: ' + command.getProject()))
-    project = session.create(command.getProject())
-    project.reconcile()
-
-def execute_snapshot(command):
-    java_ccmtask.log(str('Snapshot of project: ' + command.getProject() + ' to ' + command.getDir()))
-    project = session.create(command.getProject())
-    if command.getFast()== True:
-        ccm.extra.FastSnapshot(project, command.getDir())        
-    else:
-        project.snapshot(command.getDir(), command.getRecursive())
-
-def execute_changereleasetag(command):
-    java_ccmtask.log(str('Changing release tag for all tasks in the folder : ' + command.getFolder() + ' as ' + command.getReleaseTag()))
-    #Search all task from the folder    
-    folder = session.create("Folder " + str(command.getFolder()))
-    for task in folder.tasks:
-        if task.release != str(command.getReleaseTag()):
-            task.release = str(command.getReleaseTag())
-            
-def execute_checkout(command):
-    java_ccmtask.log(str('Checking out project: ' + command.getProject() + ' with release tag ' + command.getRelease()))
-    project = session.create(command.getProject())
-    if (command.getRelease()):
-        if command.getWa():
-            wa = command.getWa()
-        else:
-            wa = None
-        if command.getRecursive():
-            recursive = command.getRecursive()
-        else:
-            recursive = None
-        if command.getRelative():
-            relative = command.getRelative()
-        else:
-            relative = None
-        if command.getVersion():
-            version = command.getVersion()
-        else:
-            version = None
-        if command.getPurpose():
-            purpose = command.getPurpose()
-        else:
-            purpose = None
-        project.checkout(session.create(command.getRelease()), version, purpose, recursive)
-
-def execute_workarea(command):
-    java_ccmtask.log(str('Modifying work area for the project : ' + command.getProject()))
-    project = session.create(command.getProject())
-    if command.getMaintain():
-        maintain = command.getMaintain()
-    else:
-        maintain = None
-    if command.getRecursive():
-        recursive = command.getRecursive()
-    else:
-        recursive = None
-    if command.getRelative():
-        relative = command.getRelative()
-    else:
-        relative = None
-    if command.getPath():
-        path = command.getPath()
-    else:
-        path = None
-    if command.getPst():
-        pst = command.getPst()
-    else:
-        pst = None
-    if command.getWat():
-        wat = command.getWat()
-    else:
-        wat = None
-    project.work_area(maintain, recursive, relative, path, pst, wat)
-
-def execute_addtask(command):
-    if command.getFolder() != None:
-        tasks = []        
-        ccmfolder = session.create("Folder " + command.getFolder())
-        role = find_folder_information(command)
-        if role == "build_mgr":
-            java_ccmtask.log("Changing role to %s" % role)
-            session.role = "build_mgr"
-
-        folder = session.create("Folder %s" % str(command.getFolder()))
-        for task in folder.tasks:
-            folder.remove(task)
-        
-        java_ccmtask.log("Adding task to folder %s" % ccmfolder)
-        tasks.extend(map(lambda task: session.create("Task " + task.getName()), command.getTasks()))
-        for task in tasks:
-            ccmfolder.append(task)
-
-def find_folder_information(command):
-    cmdline = "folder -sh i " + command.getFolder()    
-    result = session.execute(cmdline)
-    result_array = str(result).split('\r')
-    for ldata in result_array :        
-        if ldata.find('Writable By:') > 0:
-            wb,wd = ldata.split(':',1)
-            if wd.lstrip() == "Build Manager":
-                return "build_mgr"
-            else:
-                return "developer"
-
-def execute_exists(command):
-    fpn = None
-    if command.getObject() != None:
-        fpn = command.getObject()
-    elif command.getFolder() != None:
-		fpn = "Folder " + command.getFolder()
-    elif command.getTask() != None:
-		fpn = "Task " + command.getTask()
-
-    if fpn == None:
-        raise Exception("You need to define either a 'task'/'folder'/'object' attribute.")
-    ccmo = session.create(fpn)
-    if ccmo.exists():
-        java_ccmtask.log("'%s' exists." % ccmo)
-    else:
-        raise Exception("Could not find '%s'." % ccmo)
-
-def execute_close(command):
-    global session
-    java_ccmtask.log(str("Closing session %s." % session))
-    session.close_on_exit = True
-    session.close()
-    session = None
-    
-def referenceToObject(obj):
-    if obj.isReference() == 1:
-        ref = project.getReference(str(obj.getRefid().getRefId()))
-        if ref == None:
-            raise Exception("Could not find reference '%s'" % str(obj.getRefid().getRefId()))
-        return ref
-    else:
-        return obj        
-        
-sessionIds = [] 
-for session_set in java_ccmtask.getSessionSets():
-    sessionIds.extend(map(lambda session: session.getAddr(), referenceToObject(session_set).getSessions()))
-
-print "Session list: ", sessionIds
-if len(sessionIds) > 0:
-    sessionid = sessionIds.pop()
-    session = ccm.Session(username=None, engine=None, dbpath=None, ccm_addr=sessionid, close_on_exit=False)
-else:
-   username = java_ccmtask.getUsername()
-   password = java_ccmtask.getPassword()
-   session = ccm.open_session(username=username, password=password)
-
-if java_ccmtask.getVerbose() == 1:
-    logging.getLogger("ccm").setLevel(logging.DEBUG)
-
-#print dir(sys.modules['__main__'] )
-ccm_commands = java_ccmtask.getCommands()
-for command in ccm_commands:
-    print "Running command '%s'" % command.getName()
-    method_name = 'execute_' + command.getName()
-    method = sys.modules['__main__'].__dict__[method_name]
-    try:
-        method(command)
-    except Exception, e:
-        import traceback
-        logger.error(traceback.print_exc(file=sys.stdout))
-        logger.error(e.result)
-        logger.error(e)
-        raise e
--- a/buildframework/helium/tools/preparation/test/test_bom.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_bom.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -29,7 +29,7 @@
     <property name="build.drive" location="${env.TEMP}/helium/${env.USERNAME}/testbom"/>
     <property name="publish.dir" value="${build.drive}/output" />
     <property name="build.number" value="1" />
-    <import file="../../../helium.ant.xml" />
+    <import file="../../../build.xml" />
     
     <target name="test-create-bom">
         <delete dir="${build.drive}"/>
--- a/buildframework/helium/tools/preparation/test/test_ci.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_ci.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
     <property environment="env" />
     <property name="publish.root.dir" value="${env.TEMP}" />
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml" />
+    <import file="../../../build.xml" />
     <import file="../ci.ant.xml" />
     <!-- Test for delete folders: Creates configuration and Folder structure then delete folders, config files and test existance of the folders -->
     <target name="test-delete-folders-from-list">
--- a/buildframework/helium/tools/preparation/test/test_parallelcopy.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_parallelcopy.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
     <property environment="env" />
     
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml" />
+    <import file="../../../build.xml" />
 
     <property name="preparation.temp.dir" location="${helium.build.dir}/antunit/parallelcopy" />
 
--- a/buildframework/helium/tools/preparation/test/test_parallelunzip.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_parallelunzip.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
     <property environment="env" />
     
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml" />
+    <import file="../../../build.xml" />
 
     <property name="preparation.temp.dir" location="${helium.build.dir}/antunit/parallelunzip" />
 
--- a/buildframework/helium/tools/preparation/test/test_preparation.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_preparation.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -36,11 +36,11 @@
     <property name="prep.root.dir" value="../../../build/test/preproot" />
 
     <property name="helium.dir" location="../../.." />
-    <!--<import file="../../../helium.ant.xml"/>-->
+    <!--<import file="../../../build.xml"/>-->
 
-    <!-- in the normal run we should not have the same build.drive content in the second run -->
-    <property name="build.drive" value="Z:" />
-    <import file="../../../helium.ant.xml" />
+    <!-- in the normal run we should not have the same build.drive content in the second run 
+    <property name="build.drive" value="Z:" />-->
+    <import file="../../../build.xml" />
     <property name="preparation.temp.dir" location="${helium.build.dir}/antunit/preparation" />
 
     <target name="setUp">
@@ -124,13 +124,13 @@
                     <param name="build.drive.notdefined" value="true"/>
                 </antcall>
                 <au:assertFileExists file="${build.drive}"/>
-                <hlm:unsubst drive="${build.drive}"/>
+                <hlm:unsubst drive="${build.drive}" failonerror="false"/>
                 <delete dir="${prep.temp.build.dir}"/>
             </then>
         </if>
     </target>
 
-    <!--<import file="../../../helium.ant.xml"/>
+    <!--<import file="../../../build.xml"/>
     
      TODO: should these run on build.xml -->
     <!--<target name="test-build-int-not-set">    
--- a/buildframework/helium/tools/preparation/test/test_synergy.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/preparation/test/test_synergy.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -27,7 +27,7 @@
     <property environment="env" />
     <property name="publish.root.dir" value="${helium.dir}/tests/data/output/" />
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml" />
+    <import file="../../../build.xml" />
 
     <target name="test-ccm-preparation-log-extraction">
         <delete file="${helium.dir}/tests/data/output/temp.log" failonerror="false"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/preparation/test/test_synergyjavataks.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : test_ci.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+-->
+<project name="test_synergyjavataks" xmlns:au="org.apache.ant.antunit" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+         Testing targets related to Synergy java tasks
+    </description>
+    <property environment="env" />
+    <property name="publish.root.dir" value="${helium.dir}/tests/data/output/" />
+    <property name="helium.dir" location="../../.." />
+    <property name="synergy71.project.wa" location="${helium.dir}/build/synergy71_ccm_wa" />
+    <property name="synergy71.snapshot.wa" location="${helium.dir}/build/synergy71_ccm_snapshot" />
+    <import file="../../../build.xml" />
+    
+    <condition property="run.ccm.71">
+        <istrue value="${synergy71.enabled}" />
+    </condition>
+    
+    <target name="suiteSetUp" if="run.ccm.71">
+        <mkdir dir="${synergy71.project.wa}"/>
+        <mkdir dir="${synergy71.snapshot.wa}"/>
+    </target>
+    
+    <target name="suiteTearDown" if="run.ccm.71">
+        <delete dir="${synergy71.project.wa}"/>
+        <delete dir="${synergy71.snapshot.wa}"/>
+    </target>
+    
+    <target name="test-synergyjavataks" if="run.ccm.71">
+        <hlm:createSessionMacro database="sa1bm1" reference="test.session" />
+        <au:assertLogContains text="Database engine set using the GSCM database"/>
+        <!-- To synchronize the project -->
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:synchronize project="MinibuildDomain-hlm_71_test" recursive="true" />
+        </hlm:ccm>
+        <au:assertLogContains text="Session list:"/>        
+        <au:assertLogContains text="Synchronizing project: MinibuildDomain-hlm_71_test"/>
+        <au:assertFileExists file="${synergy71.project.wa}/MinibuildDomain/MinibuildDomain/_ccmwaid.inf"/>
+        
+        <!-- To update the synergy project -->
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:update project="MinibuildDomain-hlm_71_test" />
+        </hlm:ccm>
+        <au:assertLogContains text="Running command 'update'"/>
+        <au:assertLogContains text="Updating project: MinibuildDomain-hlm_71_test"/>
+        <au:assertLogContains text="Updating project 'MinibuildDomain-hlm_71_test:project:sa1bm1#1'"/>
+        <au:assertLogContains text="Update for 'MinibuildDomain-hlm_71_test:project:sa1bm1#1' complete"/>
+        <au:assertLogContains text="Update complete"/>
+        
+        <!-- To get the snapshot of the project -->
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:snapshot project="MinibuildDomain-hlm_71_test" dir="${synergy71.snapshot.wa}" fast="true" recursive="true" />
+        </hlm:ccm>
+        <au:assertLogContains text="Snapshotting MinibuildDomain-hlm_71_test"/>
+        
+        <!-- To reconcile the project -->
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:reconcile project="MinibuildDomain-hlm_71_test"/>
+        </hlm:ccm>
+        <au:assertLogContains text="Reconciling project: MinibuildDomain-hlm_71_test"/>        
+        
+        <!-- To maintain the project workarea -->
+        <delete dir="${synergy71.project.wa}"/>
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:workarea project="MinibuildDomain-hlm_71_test" maintain="true" recursive="true" path="${synergy71.project.wa}"/>
+        </hlm:ccm>
+        <au:assertLogContains text="Modifying work area for the project : MinibuildDomain-hlm_71_test"/>
+        
+        <!-- To add the tasks into folders -->
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:addtask folder="sa1bm1#33">
+                <task name="sa1bm1#126" />
+            </hlm:addtask>
+        </hlm:ccm>
+        <au:assertLogContains text="Changing role to build_mgr"/>
+        
+        <!-- To close ccm session -->
+        <hlm:ccm >
+            <hlm:sessionset refid="test.session" />
+            <hlm:close />
+        </hlm:ccm>        
+             
+    </target>
+    
+</project>
\ No newline at end of file
--- a/buildframework/helium/tools/publish/publish.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/publish/publish.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -250,6 +250,7 @@
     </macrodef>
 
     <!-- This macro allows you to add or update one archive definition inside the release metadata files.
+    
     e.g.:
     <pre>
         <hlm:updateMetadataMacro file="<path>/release_metadata.xml" archive="<path>/archive.zip" />
@@ -313,6 +314,7 @@
     </macrodef>
     
     <!-- This macro update the metadata file generated by the config provided by file.
+    
     e.g:
     <pre>
     <hlm:updateMD5Macro file="${zip.config.file.parsed}" config="${zips.@{type}.spec.name}"/>
--- a/buildframework/helium/tools/publish/test/test_macro.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/publish/test/test_macro.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -26,7 +26,7 @@
     </description>
     <property environment="env" />
     <property name="helium.dir" location="../../.." />
-    <import file="../../../helium.ant.xml" />
+    <import file="../../../build.xml" />
     
     <target name="test-update-metadata">
         <mkdir dir="${helium.build.dir}/GRACE"/>
--- a/buildframework/helium/tools/quality/validate-policy.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/quality/validate-policy.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -44,10 +44,16 @@
     @type boolean
     -->
     <property name="validate.policy.ignoreroot" value="false" />
-    <!-- Comma separated list of pattern for policy validation. Defualt value is, distribution.policy.s60,distribution.policy
+    <!-- Comma separated list of pattern for policy validation.
+    Default value is, distribution.policy.s60,distribution.policy,distribution.policy.pp
     @type string
     -->
-    <property name="validate.policy.pattern" value="distribution.policy.s60,distribution.policy" />
+    <property name="validate.policy.pattern" value="distribution.policy.s60,distribution.policy,distribution.policy.pp" />
+    <!-- Comma separated list of filename to exclude while scanning for missing policy files.
+    Default value is .static_wa,_ccmwaid.inf
+    @type string
+    -->
+    <property name="validate.policy.exclude.pattern" value=".static_wa,_ccmwaid.inf" />
 
     <!-- Default path settings for policy validation. -->
     <path id="reference.policy.path.list">
@@ -73,15 +79,21 @@
         <attribute name="ignoreroot" />
         <attribute name="ids" />
         <attribute name="pattern" />
+        <attribute name="excludes" />
         <element name="path" type="path" />
         <![CDATA[
 import integration.quality
 import os
 ignoreroot = False
+excludes = []
 if (attributes.get('ignoreroot') != None) and (str(attributes.get('ignoreroot')).lower() == "true"):
     self.log("Ignoring root path.")
     ignoreroot = True
 
+if (attributes.get('excludes') != None):
+    self.log("Adding excludes patterns.")
+    excludes = [pattern.strip() for pattern in str(attributes.get('excludes')).split(',')]
+
 output = None
 if attributes.get('output') is not None:
     self.log("Creating %s" % str(attributes.get('output')))
@@ -93,7 +105,7 @@
 if attributes.get('pattern') != None:
     pattern = str(attributes.get('pattern')).split(',')
 
-validator = integration.quality.PolicyValidator(pattern, ignoreroot=ignoreroot)
+validator = integration.quality.PolicyValidator(pattern, ignoreroot=ignoreroot, excludes=excludes)
 
 if attributes.get('ids') is not None:
     self.log("Loading policy ids from: %s" % str(attributes.get('ids')))
@@ -129,7 +141,9 @@
         <mkdir dir="${build.log.dir}"/>
         <mkdir dir="${post.log.dir}"/>
         <mkdir dir="${temp.build.dir}"/>
-        <hlm:validatePolicyMacro output="${validate.policy.log}" ids="${validate.policy.csv}" ignoreroot="${validate.policy.ignoreroot}" pattern="${validate.policy.pattern}">
+        <hlm:validatePolicyMacro output="${validate.policy.log}" ids="${validate.policy.csv}" 
+            ignoreroot="${validate.policy.ignoreroot}" pattern="${validate.policy.pattern}"
+            excludes="${validate.policy.exclude.pattern}">
             <path refid="reference.policy.path.list" />
         </hlm:validatePolicyMacro>
         <hlm:metadatarecord database="${metadata.dbfile}">
@@ -194,8 +208,10 @@
     
     <!-- Policy validation target for IDO. Only detected ADO will get scanned. -->    
     <target name="ido-validate-policy" depends="ido-create-ado-mapping,ido-validate-policy-skip" unless="do.skip.policy-validation">
+        <record name="${temp.build.dir}/${build.id}_validate-policy.ant.log" action="start" />
         <hlm:iniKeys2Path ini="${ado.quality.mapping.file}" pathid="reference.policy.path.list"/>
         <runtarget target="render-validate-policy" />
+        <record name="${temp.build.dir}/${build.id}_validate-policy.ant.log" action="stop" />
     </target>
 
 </project>
--- a/buildframework/helium/tools/release/release.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/release/release.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -25,6 +25,15 @@
     <description>
         Release publising.
     </description>
+
+    <import file="scm_release.ant.xml" />
+    
+    <!-- This is where the release build logs are stored.
+    @type string
+    @scope private
+    -->
+    <property name="release.log.dir" location="${build.log.dir}/release"/>       
+    
     
     <!--* @property release.grace.service
     The Grace service used
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/release/scm_release.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+============================================================================ 
+Name        : scm_release.ant.xml 
+Part of     : Helium 
+
+Copyright (c) 2009 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 releases -->
+<project name="scm-release" xmlns:hlm="http://www.nokia.com/helium">
+    <description>
+        SCM Release publishing.
+    </description>
+    
+    
+    
+    <!--
+     The release-work-area target will reuse the prep-work-area configuration 
+     to retrieve what project to release based on the releasable 
+     and baseline.release configuration xml properties.
+     Each project releasing will follow these steps:
+        * un-maitained work area
+        * Using RBT tool 
+          * deconfigure
+          * rebaseline
+        * update
+        * maintain the work area
+     -->
+    <target name="release-work-area">
+        <mkdir dir="${release.log.dir}" />
+        <record name="${release.log.dir}/${build.id}_release_work_area.log" action="start"/>
+        <runtarget target="get-ccm-password"/>
+        <runtarget target="ccm-prepare-input"/>
+        
+        <hlm:assertPropertySet property="prep.delivery.file" message="Property prep.delivery.file is not defined." />
+        <trycatch>
+            <try>
+                <hlm:python failonerror="true">
+import preparation
+import configuration
+import traceback
+import logging            
+import ant
+import sys
+import os.path
+
+# enabling logging
+logging.basicConfig(level=logging.INFO)
+
+builder = None           
+try:
+    configBuilder = configuration.NestedConfigurationBuilder(open(ant.get_property(r'${prep.delivery.conf.parsed}'), 'r'))
+    configSet = configBuilder.getConfiguration()
+    password = ant.get_property(r'${ccm.user.password}')
+    builder = preparation.PreparationBuilder(configSet.getConfigurations(), ant.get_property(r'${ccm.user.login}'), password, cache=ant.get_property(r'${ccm.cache.xml}'))
+    builder.extract_release_data(r'${release.log.dir}/${build.id}_releasable.xml')
+    builder.close()
+except Exception, e:
+    print "ERROR: error found during preparation phase:" 
+    for l in traceback.format_exc().splitlines(False):
+        print "ERROR: %s" % l
+    print "ERROR: this is a critical error, build will fail now:"
+    for l in str(e).splitlines(False):
+        print "ERROR: %s" % l
+    if builder != None:
+        builder.close()
+    sys.exit(-1)
+sys.exit(0)
+                </hlm:python>
+            </try>
+            <finally>
+                <record name="${release.log.dir}/${build.id}_release_work_area.log" action="stop"/>
+                <hlm:assertFileExists file="${release.log.dir}/${build.id}_release_work_area.log" />
+            </finally>
+        </trycatch>
+        <hlm:assertFileExists file="${release.log.dir}/${build.id}_releasable.xml" />
+        
+        <fmpp sourceFile="${helium.dir}/tools/release/templates/release_ccm_project.ant.xml.ftl"
+            outputFile="${temp.build.dir}/release_ccm_project.ant.xml">
+            <data expandProperties="yes">
+                data: xml(${release.log.dir}/${build.id}_releasable.xml)
+                ant: antProperties()
+            </data>
+        </fmpp>
+        <hlm:assertFileExists file="${temp.build.dir}/release_ccm_project.ant.xml" />
+        <ant antfile="${temp.build.dir}/release_ccm_project.ant.xml" target="all" />
+    </target>
+    
+</project>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/release/templates/release_ccm_project.ant.xml.ftl	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,66 @@
+<#--
+============================================================================ 
+Name        : modificationset.log.xml.ftl 
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+
+============================================================================
+--> 
+<?xml version="1.0" encoding="utf-8"?>
+<project name="release-ccm-project" xmlns:hlm="http://www.nokia.com/helium">
+    <import file="${r'$'}{helium.dir}/helium_preinclude.ant.xml" />
+
+    <target name="all" depends="get-ccm-password">
+    <#list data.release.project as project>
+        <echo>${project.@database} - ${project.@name} - ${project.@dir} - ${project.@role}</echo>
+        <#if (ant?keys?seq_contains('ccm.cache.xml'))>
+        <hlm:createSessionMacro database="${project.@database}" reference="publish.session" cache="${ant['ccm.cache.xml']}"/>
+        <#else>
+        <hlm:createSessionMacro database="${project.@database}" reference="publish.session"/>
+        </#if>
+        <hlm:ccm verbose="true">
+            <!-- Defining some session to use. -->
+            <hlm:sessionset refid="publish.session"/>
+            <role role="${project.@role}" />
+            <workarea project="${project.@name}" maintain="false" recursive="true" />
+        </hlm:ccm>
+        <trycatch>
+            <try>
+                <hlm:rebaseanddeconf database="${project.@database}"
+                    password="${r'$'}{ccm.user.password}" 
+                    verbosity="1"
+                    ccmProject="${project.@name}"
+                    release="${project.@release}" 
+                    releaseBaseline="yes" 
+                    skipDeconfigure="false" />
+            </try>
+            <finally>
+                <hlm:ccm verbose="true">
+                    <hlm:sessionset refid="publish.session"/>
+                    <update project="${project.@name}" />
+                    <workarea project="${project.@name}" path="${project.@dir}" pst="${project.@pst}" maintain="true" recursive="true" />
+                    
+                    <#if (!ant?keys?seq_contains('ccm.cache.xml'))>
+                    <hlm:close/>
+                    </#if>
+                </hlm:ccm>
+            </finally>
+        </trycatch>
+    </#list>
+    </target>
+        
+    <import file="${r'$'}{helium.dir}/helium.ant.xml" />
+</project>
--- a/buildframework/helium/tools/rombuild/imaker.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/rombuild/imaker.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -178,8 +178,16 @@
                 </exec>
             </then>
         </if>
+        <fmpp sourceFile="${helium.dir}/tools/common/templates/diamonds/build_roms_diamonds.xml.ftl"
+                     outputfile="${diamonds.build.output.dir}/build-roms.xml">
+            <data expandProperties="yes">
+                dbPath: ${metadata.dbfile}
+                ant: antProperties()
+            </data>
+        </fmpp>
     </target>
     
+    
     <!-- iMaker engine configuration -->
     <hlm:defaultEngine id="imaker.engine.default" threads="${number.of.threads}" />
 
--- a/buildframework/helium/tools/startup/bootstrap/bootstrap.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/startup/bootstrap/bootstrap.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -51,12 +51,12 @@
     @type string
     @scope private
     -->
-    <property name="ivy.file" value="${helium.dir}/external/antlibs/${ivy.filename}" />
+    <property name="ivy.file" value="${helium.dir}/external/antlibs2/${ivy.filename}" />
     <available file="${ivy.file}" property="ivy.file.present" />
 
     <!-- Download ivy jar -->
     <target name="get-ivy" unless="ivy.file.present" depends="proxy">
-        <mkdir dir="${helium.dir}/external/antlibs" />
+        <mkdir dir="${helium.dir}/external/antlibs2" />
         <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/ivy/ivy/2.0.0-beta2/${ivy.filename}" dest="${ivy.file}" />
     </target>
 
@@ -88,7 +88,7 @@
     <!-- Set libs for bootstrap -->
     <target name="set-libs">
         <path id="lib.path">
-            <fileset dir="${helium.dir}/external/antlibs" includes="**/*.jar" />
+            <fileset dir="${helium.dir}/external/antlibs2" includes="**/*.jar" />
         </path>
 
         <!-- External tasks. -->
@@ -103,7 +103,7 @@
 
     <!-- unzip jars. @scope private-->
     <target name="unzip-jar">
-        <unzip src="${artifact.file}" dest="${helium.dir}/external/antlibs" />
+        <unzip src="${artifact.file}" dest="${helium.dir}/external/antlibs2" />
     </target>
     <!-- unzip eggs. @scope private -->
     <target name="unzip-egg">
@@ -125,13 +125,13 @@
         <ivy:configure file="${tools.ivy.config.file}" />
         <ivy:resolve file="${helium.dir}/config/ivy/ivy.xml" conf="${build.type}" haltonfailure="false" />
 
-        <ivy:retrieve pattern="${helium.dir}/external/antlibs/[artifact]-[revision].[ext]" type="jar" />
+        <ivy:retrieve pattern="${helium.dir}/external/antlibs2/[artifact]-[revision].[ext]" type="jar" />
         <ivy:retrieve pattern="${helium.dir}/external/python/lib/2.5/[artifact]-[revision].[ext]" type="egg" />
         <ivy:retrieve pattern="${helium.dir}/external/sources/[artifact]-[revision].[ext]" type="zip" />
 
         <delete>
-            <fileset dir="${helium.dir}/external/antlibs" includes="ant-optional*.jar" />
-            <fileset dir="${helium.dir}/external/antlibs" includes="ant-1.5.jar" />
+            <fileset dir="${helium.dir}/external/antlibs2" includes="ant-optional*.jar" />
+            <fileset dir="${helium.dir}/external/antlibs2" includes="ant-1.5.jar" />
         </delete>
 
         <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="lib.path" />
--- a/buildframework/helium/tools/testing/ats/ats.ant.xml	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/tools/testing/ats/ats.ant.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -75,6 +75,12 @@
     @scope public
     -->
     
+    <!--* @property ats.create.singledrop.file
+    defined as true if single drop file is required. Define as false or not present for multiple drop files.
+    @type boolean
+    @editable required
+    @scope public
+    -->
     
     <!-- -->
     <fileset id="reference.ats.flash.images" dir="${release.images.dir}">
@@ -108,14 +114,14 @@
     </condition>
 
     <!-- The target creates ATSDrop.zip file which also includes test.xml file; and sends the drop to ATS.
+        
     The layer definition, in system definition file, for tsrc directory should look like:
-    <pre>
-    <layer name="name_test_layer">
-        <module name="module_name">
-            <unit id="unit_id" name="unti_name" bldFile="path_of_tsrc_folder_to_be_built" filter=""/>
-        </module>
-    </layer>
-    </pre>
+
+        <layer name="name_test_layer">
+            <module name="module_name">
+                <unit id="unit_id" name="unti_name" bldFile="path_of_tsrc_folder_to_be_built" filter=""/>
+            </module>
+        </layer>
     -->
     <target name="ats-test" if="internal.enabled.ats">
         <mkdir dir="${test.log.dir}"/>
@@ -199,58 +205,68 @@
             </else>
         </if>
 
-        <!-- Notify ATS about the drop. -->
-        <if>
-            <istrue value="${ats4.enabled}" />
-            <then>
-                <hlm:python failonerror="true">
+        <trycatch property="exception">
+            <try>
+                <!-- Notify ATS about the drop. -->
+                <if>
+                    <istrue value="${ats4.enabled}" />
+                    <then>
+                        <hlm:python failonerror="true">
 version = r'${java.version}'
 if '1.6.0' in version:
     assert int(version.split('_')[1]) > 6, 'Java 6 u7 required'
-                </hlm:python>
-                <condition property="ats.import.arg" value="-import" else="">
-                    <equals arg1="${ats.script.type}" arg2="import" />
-                </condition>
-                <condition property="ats4.libs" value="${helium.dir}/extensions/nokia/external/ats4" else="${helium.dir}/external/antlibs">
-                    <available type="dir" file="${helium.dir}/extensions/nokia/external/ats4"/>
-                </condition>
-                <java classname="com.nokia.ats.util.server.CommandLineClient" fork="true" maxmemory="1024m" failonerror="true">
-                    <classpath>
-                        <pathelement path="${java.class.path}"/>
-                        <fileset dir="${ats4.libs}" includes="*.jar"/>
-                    </classpath>
-                    <arg line="-url http://${ats.server}/ServerService -path ${ats.drop.location.file} ${ats.import.arg}"/>
-                </java>
-            </then>
-            <else>
-                <if>
-                    <and>
-                        <equals arg1="${ats.script.type}" arg2="import" />
-                        <available classname="com.nokia.taitei.util.TestDropImporter"/>
-                    </and>
-                    <then>
-                        <java classname="com.nokia.taitei.util.TestDropImporter" fork="true" maxmemory="1024m" failonerror="true">
+                        </hlm:python>
+                        <condition property="ats.import.arg" value="-import" else="">
+                            <equals arg1="${ats.script.type}" arg2="import" />
+                        </condition>
+                        <condition property="ats4.libs" value="${helium.dir}/extensions/nokia/external/ats4" else="${helium.dir}/external/antlibs">
+                            <available type="dir" file="${helium.dir}/extensions/nokia/external/ats4"/>
+                        </condition>
+                        <java classname="com.nokia.ats.util.server.CommandLineClient" fork="true" maxmemory="1024m" failonerror="true">
                             <classpath>
                                 <pathelement path="${java.class.path}"/>
+                                <fileset dir="${ats4.libs}" includes="*.jar"/>
                             </classpath>
-                            <arg line="${ats.server} ${ats.drop.location.file} ${ats.username} ${ats.password}"/>
+                            <arg line="-url http://${ats.server}/ServerService -path ${ats.drop.location.file} ${ats.import.arg}"/>
                         </java>
                     </then>
                     <else>
-                        <condition property="ats.wsh.testrun.file" value="wshTestRunImport.vbs" else="wshTestRunX.vbs">
-                            <equals arg1="${ats.script.type}" arg2="import" />
-                        </condition>
-                        <exec executable="cscript" dir="${build.drive}/" failonerror="true">
-                            <env key="ats3.username" value="${ats.username}" />
-                            <env key="ats3.password" value="${ats.password}" />
-                            <env key="ats3.host" value="${ats.server}" />
-                            <env key="ats3.pathToDrop" value="${ats.drop.location.file}"/>
-                            <arg value="${helium.dir}/tools/testing/ats/${ats.wsh.testrun.file}" />
-                        </exec>
+                        <if>
+                            <and>
+                                <equals arg1="${ats.script.type}" arg2="import" />
+                                <available classname="com.nokia.taitei.util.TestDropImporter"/>
+                                <not>
+                                    <istrue value="${ats.disable.java.importer}" />
+                                </not>
+                            </and>
+                            <then>
+                                <java classname="com.nokia.taitei.util.TestDropImporter" fork="true" maxmemory="1024m" failonerror="true">
+                                    <classpath>
+                                        <pathelement path="${java.class.path}"/>
+                                    </classpath>
+                                    <arg line="${ats.server} ${ats.drop.location.file} ${ats.username} ${ats.password}"/>
+                                </java>
+                            </then>
+                            <else>
+                                <condition property="ats.wsh.testrun.file" value="wshTestRunImport.vbs" else="wshTestRunX.vbs">
+                                    <equals arg1="${ats.script.type}" arg2="import" />
+                                </condition>
+                                <exec executable="cscript" dir="${build.drive}/" failonerror="true">
+                                    <env key="ats3.username" value="${ats.username}" />
+                                    <env key="ats3.password" value="${ats.password}" />
+                                    <env key="ats3.host" value="${ats.server}" />
+                                    <env key="ats3.pathToDrop" value="${ats.drop.location.file}"/>
+                                    <arg value="${helium.dir}/tools/testing/ats/${ats.wsh.testrun.file}" />
+                                </exec>
+                            </else>
+                        </if>             
                     </else>
-                </if>             
-            </else>
-        </if>
+                </if>
+            </try>
+            <catch>
+                <echo message="Error: ${exception}"/>
+            </catch>
+        </trycatch>
     </target>
 
     <!-- The target is dependent on "ats-test", should not be called independently. The target fetches flash files location -->
@@ -263,7 +279,7 @@
     import atsant
     ic = None
     try:
-        ic = atsant.IConfigATS(project.getProperty('release.images.dir'))
+        ic = atsant.IConfigATS(project.getProperty('release.images.dir'), project.getProperty('ats.product.name'))
     except Exception, ex:
         print ex
     if ic:
@@ -273,6 +289,8 @@
 <![CDATA[
 flashfilescount = len(r'${ats.flash.images}'.split(','))
 mincount = int(r'${ats.flashfiles.minlimit}')
+if mincount > 0:
+    assert r'${ats.flash.images}' != '', 'No images found in ' + r'${release.images.dir}'
 if flashfilescount < mincount:
     raise Exception('Not enough flash files, check reference.ats.flash.images and build.id, found: ' + r'${ats.flash.images}' + ', looking in: ' + r'${release.images.dir}')
 ]]>
@@ -319,6 +337,11 @@
         @scope public
         -->
         <property name="ats.email.list" value="${email.from}" />
+        <!-- Value of the ats email report
+        @type string
+        @scope public
+        -->
+        <property name="ats.report.type" value="ATS3_REPORT" />
         <!-- The default value is "data" and refers to the 'data' directory under 'tsrc' directory.
         @type string
         @scope public
@@ -404,14 +427,15 @@
         <property name="ats.aste.email.list" value="" />
     </target>
 
-    <!-- This macro fetches the tsrc paths from system definition file (layers.sysdef.xml), layer defintion should look like
-    <pre>
-    <layer name="name_test_layer">
-        <module name="module_name">
-            <unit id="unit_id" name="unti_name" bldFile="path_of_tsrc_folder_to_be_built" filter="" />
-        </module>
-    </layer>
-    </pre>
+    <!-- This macro fetches the tsrc paths from system definition file (layers.sysdef.xml).
+        
+    The layer defintion should look like:
+
+        <layer name="name_test_layer">
+            <module name="module_name">
+                <unit id="unit_id" name="unti_name" bldFile="path_of_tsrc_folder_to_be_built" filter="" />
+            </module>
+        </layer>
     -->
     <scriptdef name="getModuleTsrcMacro" language="jython" uri="http://www.nokia.com/helium">
         <attribute name="property" />
@@ -422,7 +446,8 @@
 from com.nokia.ant.util import Helper
 
 canonicalsysdeffile = Helper.getProperty(project, 'canonical.sysdef.file')
-modules = atsant.files_to_test(canonicalsysdeffile, project.getProperty('exclude.test.layers'), project.getProperty('ido.build.filter'), project.getProperty('build.drive'))
+createsingledropfile = project.getProperty('ats.create.singledrop.file')
+modules = atsant.files_to_test(canonicalsysdeffile, project.getProperty('exclude.test.layers'), project.getProperty('ido.build.filter'), project.getProperty('build.drive'), createsingledropfile)
 
 for name in modules.keys():    
     if modules[name] == []:
@@ -470,6 +495,7 @@
                             <arg value="${internal.ats.diamonds.arg}" />
                             <arg value="--drop-file=${build.output.dir}/ats/${ats.drop.file}" />
                             <arg value="--report-email=${ats.email.list}" />
+                            <arg value="--report-type=${ats.report.type}" />
                             <arg value="--plan-name=${ats.plan.name}" />
                             <arg value="--testrun-name=${ats.testrun.name}_@{module}" />
                             <arg value="--flash-images=${ats.flash.images}" />
@@ -493,7 +519,7 @@
                             <arg value="--verbose" />
                             <arg line="${module.tsrc.@{module}}" />
                         </exec>
-                        <runtarget target="do-ats-test" />
+                        <antcall target="do-ats-test" />
                         <math result="drop.file.counter" operand1="1" operation="+" operand2="${drop.file.counter}" datatype="int" />
                     </sequential>
                 </for>
@@ -704,7 +730,7 @@
     <!-- Zip build area for emulator -->
     <target name="ats-emulator-zip" if="ats.emulator.enable">
         <property name="zips.emulator_zip.spec.name" value="emulator_zip"/>
-        <hlm:zipContentMacro type="emulator_zip" file="${helium.dir}\tools\testing\ats\emulator_zip.cfg.xml" />
+        <hlm:zipContentMacro type="emulator_zip" file="${helium.dir}/tools/testing/ats/emulator_zip.cfg.xml" />
 
         <if>
             <isset property="ats.drop.location" />
@@ -717,4 +743,26 @@
             </else>
         </if>        
     </target>
+    
+    <!-- Generate and upload drop using custom template -->
+    <target name="ats-custom-drop">
+        <mkdir dir="${build.output.dir}/ats" />
+        <runtarget target="ats-set-flash-image-path" />
+        <runtarget target="ats-set-defaults-stifeunit" />
+        <property name="ats.custom.template" value="${helium.dir}/tools/testing/ats/templates/ats4_naviengine_template.xml"/>
+        <exec executable="python">
+            <arg line="-Wignore -m ats3.custom" />
+            <arg value="--custom-template=${ats.custom.template}" />
+            <arg value="--device-type=${ats.product.name}" />
+            <arg value="${internal.ats.diamonds.arg}" />
+            <arg value="--drop-file=${build.output.dir}/ats/${ats.drop.file}" />
+            <arg value="--report-email=${ats.email.list}" />
+            <arg value="--testrun-name=${ats.testrun.name}" />
+            <arg value="--flash-images=${ats.flash.images}" />
+            <arg value="--test-timeout=${ats.test.timeout}" />
+            <arg value="--test-type=${ats.custom.test.type}" />
+        </exec>
+        <runtarget target="do-ats-test" />
+    </target>
+
 </project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/testing/ats/templates/ats4_dualemu_template.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<!-- 
+============================================================================ 
+Name        : ats_template.xml
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+Contains the template for the test.xml file output. The test.xml file contains
+information on the files used to create the drop file.
+============================================================================
+-->
+
+<testrun>
+    <metadata>
+        {% if test_plan['diamonds_build_url'] -%}
+        <meta name="diamonds-buildid">{{ test_plan['diamonds_build_url'] }}</meta> 
+        <meta name="diamonds-testtype">Smoke</meta>
+        {% endif %}
+        <meta name="name">{{ test_plan['testrun_name'] }}</meta> 
+    </metadata>
+    
+    <agents>
+        <agent alias="master">
+            <property name="TYPE" value="EmuMaster"/>
+        </agent>
+        <agent alias="slave">
+            <property name="TYPE" value="EmuSlave"/>
+        </agent>
+    </agents>
+    {% for setd in test_plan.sets -%}
+    <execution>
+        <initialization>
+            <task agents="master">
+                <type>FlashTask</type>
+                <parameters>
+                    <parameter name="image-1" value="{{ atsself.get_sorted_images(setd)[0] }}" />
+                </parameters>
+            </task>
+            <task agents="slave">
+                <type>FlashTask</type>
+                <parameters>
+                    <parameter name="image-2" value="{{ atsself.get_sorted_images(setd)[1] }}" />
+                </parameters>
+            </task>
+        </initialization>
+        <task agents="slave">
+            <metadata/>
+            <type>NonTestExecuteTask</type>
+            <parameters>
+                <parameter value="tpantestbtbaseband.exe" name="file"/>
+                <parameter value="B S 7" name="parameters"/>
+                <parameter value="true" name="async"/>
+            </parameters>
+        </task>
+        <task agents="master">
+            <metadata/>
+            <type>NonTestExecuteTask</type>
+            <parameters>
+                <parameter value="tpantestbtbaseband.exe" name="file"/>
+                <parameter value="A M 6 X" name="parameters"/>
+                <parameter value="false" name="async"/>
+            </parameters>
+        </task>
+        <finalization>
+            <task agents="master">
+                <type>CleanupTask</type>
+                <parameters>
+                    <parameter value="true" name="upload-files"/>
+                </parameters>
+            </task>
+            <task agents="slave">
+                <type>CleanupTask</type>
+                <parameters>
+                    <parameter value="true" name="upload-files"/>
+                </parameters>
+            </task>
+        </finalization>
+    </execution>
+    {% endfor -%}
+    
+    <postActions>
+        {% for action_type, parameters in test_plan.post_actions -%}
+            {% if action_type == 'RunProcessAction' %}
+        <action>
+            <type>{{ action_type }}</type>
+            <parameters>
+                {% for name, value in parameters -%}
+                <parameter name="{{ name }}" value="{{ value }}"/>
+                {% endfor -%}
+            </parameters>
+        </action>
+            {% endif %}
+        {% endfor -%}
+        {% if test_plan['report_email'] -%}
+        <action>
+            <type>EmailAction</type>
+            <parameters>
+                <parameter value="Release testing" name="subject"/>
+                <parameter value="{{ test_plan['report_email'] }}" name="to"/>
+                <parameter value="simplelogger" name="format"/>
+            </parameters>
+        </action>
+        {% endif %}
+        {% if test_plan['diamonds_build_url'] -%}
+        <action>
+            <type>DiamondsAction</type>
+        </action>
+        {% endif %}
+    </postActions>
+    
+</testrun>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/testing/ats/templates/ats4_naviengine_template.xml	Wed Jun 16 16:51:40 2010 +0300
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
+<!-- 
+============================================================================ 
+Name        : ats_template.xml
+Part of     : Helium 
+
+Copyright (c) 2009 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:
+Contains the template for the test.xml file output. The test.xml file contains
+information on the files used to create the drop file.
+============================================================================
+-->
+
+<testrun>
+    <metadata>
+        {% if test_plan['diamonds_build_url'] -%}
+        <meta name="diamonds-buildid">{{ test_plan['diamonds_build_url'] }}</meta> 
+        <meta name="diamonds-testtype">Smoke</meta>
+        {% endif %}
+        <meta name="name">{{ test_plan['testrun_name'] }}</meta> 
+    </metadata>
+    
+    <agents>
+        <agent alias="DEFAULT_{{ test_plan['harness'] }}">
+            <property name="hardware" value="{{ test_plan["device_type"] }}"/>
+        </agent>
+    </agents>
+    
+    <execution defaultAgent="DEFAULT_{{ test_plan['harness'] }}">
+        <task>
+            <type>ExecutableTestCaseTask</type>
+            <parameters>
+                <parameter value="{{ test_plan["test_timeout"] }}" name="timeout"/>
+                <parameter value="cmd.exe" name="file"/>
+                {% for setd in test_plan.sets -%}                
+                <parameter value="/C NaviTest.bat %DEFAULT_GENERIC->NaviPowerIP% %DEFAULT_GENERIC->NaviPowerPort% %DEFAULT_GENERIC->NaviSerialPort% %TEST_RUN_SANDBOX% ATS3Drop\images\{{ os.path.basename(atsself.get_sorted_images(setd)[0]) }} c:\temp\%DEFAULT_GENERIC->name%-console.log" name="parameters"/>
+                {% endfor -%}
+                <parameter value="c:\temp\%DEFAULT_GENERIC->name%-console.log" name="result-file"/>
+                <parameter value="true" name="local-execute"/>
+                <parameter value="true" name="local-result"/>
+                <parameter value="true" name="extract-html"/>
+                {% if test_plan['test_type'] == 'tef' -%}
+                <parameter name="parser" value="TEFResultParser" />
+                {% elif test_plan['test_type'] == 'mtf' -%}
+                <parameter name="parser" value="MTFResultParser" />
+                {% else %}
+                <parameter name="parser" value="RTestResultParser" />
+                {% endif %}
+            </parameters>
+        </task>
+        
+        <finalization>
+            <task>
+                <type>CleanupTask</type>
+                <parameters>
+                    <parameter value="true" name="upload-files"/>
+                </parameters>
+            </task>
+        </finalization>
+    </execution>
+    
+    <postActions>
+        {% for action_type, parameters in test_plan.post_actions -%}
+            {% if action_type == 'RunProcessAction' %}
+        <action>
+            <type>{{ action_type }}</type>
+            <parameters>
+                {% for name, value in parameters -%}
+                <parameter name="{{ name }}" value="{{ value }}"/>
+                {% endfor -%}
+            </parameters>
+        </action>
+            {% endif %}
+        {% endfor -%}
+        {% if test_plan['report_email'] -%}
+        <action>
+            <type>EmailAction</type>
+            <parameters>
+                <parameter value="Release testing" name="subject"/>
+                <parameter value="{{ test_plan['report_email'] }}" name="to"/>
+                <parameter value="simplelogger" name="format"/>
+            </parameters>
+        </action>
+        {% endif %}
+        {% if test_plan['diamonds_build_url'] -%}
+        <action>
+            <type>DiamondsAction</type>
+        </action>
+        {% endif %}
+    </postActions>
+    
+</testrun>